aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.c7
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;