------- 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

Reply via email to