------- Comment #46 from dave at hiauly1 dot hia dot nrc dot ca 2006-01-14 19:28 ------- Subject: Re: [4.1/4.2 Regression] internal compiler error: verify_flow_info failed
> The lack of initialization leads to some strangeness later in the > assembly code: > > copy %r28,%r3 I would have expected that the compiler copy r28 to a different register (e.g., r4) here. It suggests the register aliveness for r3 is messed up. If I initialize the variable node, the compiler uses a different register. I see in postreload: (jump_insn 21 19 24 2 (parallel [ (set (pc) (if_then_else (ne (reg:SI 28 %r28) (const_int 0 [0x0])) (label_ref 31) (pc))) (set (reg/v:SI 3 %r3 [orig:94 call_result ] [94]) (reg:SI 28 %r28)) ]) 227 {*pa.md:8779} (insn_list:REG_DEP_TRUE 19 (nil)) (expr_list:REG_BR_PROB (const_int 5000 [0x1388]) (nil))) ;; End of basic block 2, registers live: 3 [%r3] 30 [%r30] 94 ;; Start of basic block 3, registers live: 30 [%r30] 94 (note 24 21 26 3 [bb 3] NOTE_INSN_BASIC_BLOCK) (insn 26 24 27 3 (set (reg:SI 26 %r26 [ node ]) (reg/v/f:SI 3 %r3 [orig:95 node ] [95])) 37 {*pa.md:2308} (nil) (nil)) Note that insn 26 thinks r3 contains node but insn 21 has just set it to call_result. > .L2: > bl T,%r2 > copy %r3,%r26 To generate the code, I simply compiled testcase #2 with gcc -O2 -S. The compiler was built with the patch in comment #39. Dave -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24626