On 11/29/08 10:37:33, Eric Botcazou wrote: > > The conditional jump instruction formed by instructions > > 56 and 57 above is deleted because GCSE thinks that > > (reg:SI 61 [ p$thread ]) is non-zero. It comes to this > > conclusion when it propagates the > > REG_EQUAL (const_int 4294967296 [0x100000000]) > > value listed in instruction 25: > > > > (insn 25 24 26 2 (set (reg:SI 61 [ p$thread ]) > > (subreg:SI (reg:TI 70 [ D.2967 ]) 8)) 40 {*movsi_1} (nil) > > (expr_list:REG_EQUAL (const_int 4294967296 [0x100000000]) > > (nil))) > > > > Note that it takes 33 bits to express 0x100000000, and it won't > > fit into an SImode container. > > Then this note is invalid, REG_EQUAL pertains to the destination register: [...]
Eric, thanks for the clarification on the role of REG_EQUAL notes. > IOW the culprit is not GCSE but whoever has created this note. Agreed. The routine that creates the errant REG_EQUAL note is lookup_as_function(). I posted a possible patch: http://gcc.gnu.org/ml/gcc-patches/2008-11/msg01466.html (My FSF assignment is on file.) - Gary