------- Comment #7 from hjl dot tools at gmail dot com 2010-06-30 22:18 ------- (In reply to comment #6) > Ok, thanks for investigating. I think we may need something like this: > > @@ -17574,6 +17574,7 @@ (define_peephole2 > || GET_MODE (operands[0]) == HImode)) > || GET_MODE (operands[0]) == SImode > || (TARGET_64BIT && GET_MODE (operands[0]) == DImode)) > + && peep2_reg_dead_p (2, operands[0]) > /* We reorder load and the shift. */ > && !reg_overlap_mentioned_p (operands[0], operands[4])" > [(set (match_dup 5) (match_dup 4)) > > Testing now. >
The old peepgole2 pattern has /* The intermediate operand 0 must die or be same as output. */ && (rtx_equal_p (operands[0], operands[5]) || peep2_reg_dead_p (3, operands[0]))" -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44727