https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100960
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aoliva at gcc dot gnu.org, | |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- We have two different VALUEs here, (value/u:SI 5:5 @0x4a99810/0x4a402e0) locs: from insn 1 (value/u:SI 6:261 @0x4a99828/0x4a40310) from insn 1 (entry_value:SI (reg:SI 2 %r2 [ x ])) from insn 1 (reg:SI 2 %r2 [ x ]) no addrs and (value/u:DI 15:15 @0x4a99900/0x4a404c0) locs: from insn 17 (reg:DI 12 %r12 [63]) from insn 17 (reg:DI 2 %r2 [ x+-4 ]) no addrs and cselib doesn't record that when insn 17 copies the 15:15 value to a new location it effectively copies also the 5:5 value which is present in its low bits. Maybe it would be better to record among the locs of 5:5 that it is equivalent to lowpart subreg of (value:DI 15:15), perhaps at the point where the value 15:15 is created or so?