diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/avr/avr.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 335e65e..d3178e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-07-25 Georg-Johann Lay <avr@gjlay.de> + + PR target/39386 + * config/avr/avr.c (out_shift_with_cnt): Use tmp_reg as + shift counter for x << x and x >> x shifts. + 2011-07-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR target/47124 diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 4951f56..eb1707e 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -3147,8 +3147,11 @@ out_shift_with_cnt (const char *templ, rtx insn, rtx operands[], } else if (register_operand (operands[2], QImode)) { - if (reg_unused_after (insn, operands[2])) - op[3] = op[2]; + if (reg_unused_after (insn, operands[2]) + && !reg_overlap_mentioned_p (operands[0], operands[2])) + { + op[3] = op[2]; + } else { op[3] = tmp_reg_rtx; |