aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2011-07-25 15:41:55 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2011-07-25 15:41:55 +0000
commitf4da258f520dd886a7a1dd9d1c4d71c02f68b46a (patch)
treef2cf0b9af0561c625260a90f703264bc83459945 /gcc
parent1a79cb7341c9face374804f7623d309dc281056e (diff)
downloadgcc-f4da258f520dd886a7a1dd9d1c4d71c02f68b46a.zip
gcc-f4da258f520dd886a7a1dd9d1c4d71c02f68b46a.tar.gz
gcc-f4da258f520dd886a7a1dd9d1c4d71c02f68b46a.tar.bz2
re PR target/39386 ([avr] different computation results for O1 and O0 executables)
PR target/39386 * config/avr/avr.c (out_shift_with_cnt): Use tmp_reg as shift counter for x << x and x >> x shifts. From-SVN: r176756
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;