------- Comment #2 from ubizjak at gmail dot com 2009-01-25 19:55 ------- gcc should initialize pseudos from "x" variable in my_print_complex:
;; Function my_print_complex (my_print_complex) ;; Generating RTL for gimple basic block 2 ;; D.2813 = internal_print_complex (x); [tail call] (insn 17 6 18 pr38969.c:20 (set (reg:SF 48 $f16) (reg:SF 75 [ D.2870 ])) -1 (nil)) (insn 18 17 19 pr38969.c:20 (set (reg:SF 49 $f17) (reg:SF 76 [ D.2870+4 ])) -1 (nil)) (call_insn 19 18 20 pr38969.c:20 (parallel [ (set (parallel [ (expr_list:REG_DEP_TRUE (reg:SF 32 $f0) (const_int 0 [0x0])) (expr_list:REG_DEP_TRUE (reg:SF 33 $f1) (const_int 4 [0x4])) ]) (call (mem:DI (symbol_ref:DI ("internal_print_complex") [flags 0x3] <function_decl 0x7f203091dc00 internal_print_complex>) [0 S8 A64]) (const_int 0 [0x0]))) (use (reg:DI 29 $29)) (clobber (reg:DI 26 $26)) ]) -1 (expr_list:REG_EH_REGION (const_int 0 [0x0]) (nil)) (expr_list:REG_DEP_TRUE (use (reg:SF 49 $f17)) (expr_list:REG_DEP_TRUE (use (reg:SF 48 $f16)) (nil)))) Missing part is: (insn 7 6 8 pr38969.c:20 (set (reg:SF 75 [ D.2870 ]) (reg/v:SF 73 [ x ])) -1 (nil)) (insn 8 7 9 pr38969.c:20 (set (reg:SF 76 [ D.2870+4 ]) (reg/v:SF 74 [ x+4 ])) -1 (nil)) Since this part is missing, some later pass initializes uninitialized registers with zeros. Looking into it. -- ubizjak at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com |dot org | Status|UNCONFIRMED |ASSIGNED Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2009-01-25 19:55:31 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38969