https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87871
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |vmakarov at gcc dot gnu.org --- Comment #17 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #15) > Forming thread by copy 0:a0r111-a4r117 (freq=500): > Result (freq=3500): a0r111(2500) a4r117(1000) > Forming thread by copy 2:a3r112-a5r116 (freq=125): > Result (freq=4500): a3r112(1500) a5r116(3000) > Forming thread by copy 1:a2r114-a3r112 (freq=62): > Result (freq=5500): a2r114(1000) a3r112(1500) a5r116(3000) > Pushing a1(r113,l0)(cost 0) > Pushing a4(r117,l0)(cost 0) > Pushing a0(r111,l0)(cost 0) > Pushing a2(r114,l0)(cost 0) > Pushing a3(r112,l0)(cost 0) > Pushing a5(r116,l0)(cost 0) > Popping a5(r116,l0) -- assign reg 3 > Popping a3(r112,l0) -- assign reg 4 > Popping a2(r114,l0) -- assign reg 3 > Popping a0(r111,l0) -- assign reg 0 > Popping a4(r117,l0) -- assign reg 0 > Popping a1(r113,l0) -- assign reg 2 > Assigning 4 to a5r116 > Disposition: > 0:r111 l0 0 3:r112 l0 4 1:r113 l0 2 2:r114 l0 3 > 5:r116 l0 4 4:r117 l0 0 > > > r116 does not conflict with *any* other pseudo. It is alive in the first > two insns of the function, which are > > (insn 50 3 7 2 (set (reg:SI 116) > (reg:SI 0 r0 [ a ])) "ira-shrinkwrap-prep-1.c":14:1 181 > {*arm_movsi_insn} > (nil)) > (insn 7 50 8 2 (parallel [ > (set (reg:CC 100 cc) > (compare:CC (reg:SI 116) > (const_int 0 [0]))) > (set (reg/v:SI 112 [ a ]) > (reg:SI 116)) > ]) "ira-shrinkwrap-prep-1.c":17:6 188 {*movsi_compare0} > (expr_list:REG_DEAD (reg:SI 116) > (nil))) > > r0 _is_ used by a successor (as the argument for the call to foo), but we > could use r0 for r116 anyway, since what we assign to it is r0 :-) CCing Vlad on this. I don't see that *movsi_compare0 would in any way prefer the =r,0 alternative over =r,r and using the =r,r alternative would allow to remove one instruction.