peephole2: dead regs not marked as dead

Paolo Bonzini bonzini@gnu.org
Sat Oct 23 20:32:00 GMT 2010


On 10/22/2010 01:16 PM, Georg Lay wrote:
> Then the first insn gets split after reload and before peephole2:
>
> (insn 22 8 23 2 peep2.c:5 (set (reg:SI 15 d15)
>          (and:SI (reg:SI 4 d4 [ x ])
>              (const_int -98305 [0xfffe7fff]))) 143 {*and3_zeroes.insert.{SI}.ic}
> (nil))
>
> (insn 23 22 21 2 peep2.c:5 (set (reg:SI 15 d15)
>          (xor:SI (reg:SI 15 d15)
>              (reg:SI 4 d4 [ x ]))) 39 {*xorsi3} (nil))
>
> (insn 21 23 10 2 peep2.c:5 (set (reg:SI 4 d4)
>          (reg:SI 15 d15)) 2 {*movsi_insn} (nil))
>
> (call_insn/j 10 21 11 2 peep2.c:5 (parallel [
>              (set (reg:SI 2 d2)
>                  (call (mem:HI (symbol_ref:SI ("f") [flags 0x41]<function_decl
> 0xb76b3280 f>) [0 S2 A16])
>                      (const_int 0 [0x0])))
>              (use (const_int 1 [0x1]))
>          ]) 92 {call_value_insn} (nil)
>      (expr_list:REG_DEP_TRUE (use (reg:SI 4 d4))
>          (nil)))
> ;; End of basic block 2 ->  ( 1)
> ;; lr  out 	 2 [d2] 26 [SP] 27 [a11]
> ;; live  out 	 2 [d2] 26 [SP] 27 [a11]
> ;; Succ edge  EXIT [100.0%]  (ab,sibcall)
>
> (barrier 11 10 20)
>
> D15, is not marked as dead

True.  It should have had a REG_DEAD note.  Are you using 4.6 (which 
scans forwards in peephole2 and requires REG_DEAD notes) or 4.5 (which 
scans backwards)?  If the latter, the absence of the note could be a red 
herring, because 4.5 didn't need REG_DEAD notes so it didn't compute them.

What's your definition of CALL_USED_REGISTERS, 
CALL_REALLY_USED_REGISTERS, EPILOGUE_USES?  Is d15 in any of them?

Paolo



More information about the Gcc mailing list