aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2015-01-17 11:11:52 +1030
committerAlan Modra <amodra@gcc.gnu.org>2015-01-17 11:11:52 +1030
commit25d1a5a74d172683fac3e62816ff0aef8ad3b379 (patch)
tree907e3b5f119b8c42e572927a2f304f0bebd603e6 /gcc
parent3ecec1eff783311415180f8d53cbbf782698960f (diff)
downloadgcc-25d1a5a74d172683fac3e62816ff0aef8ad3b379.zip
gcc-25d1a5a74d172683fac3e62816ff0aef8ad3b379.tar.gz
gcc-25d1a5a74d172683fac3e62816ff0aef8ad3b379.tar.bz2
cprop.c (do_local_cprop): Disallow replacement of fixed hard registers.
* cprop.c (do_local_cprop): Disallow replacement of fixed hard registers. From-SVN: r219786
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cprop.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f95d05d..aa60d5d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-17 Alan Modra <amodra@gmail.com>
+
+ * cprop.c (do_local_cprop): Disallow replacement of fixed
+ hard registers.
+
2015-01-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/62066
diff --git a/gcc/cprop.c b/gcc/cprop.c
index c9fb2fc..e8182db 100644
--- a/gcc/cprop.c
+++ b/gcc/cprop.c
@@ -1189,10 +1189,12 @@ do_local_cprop (rtx x, rtx_insn *insn)
rtx newreg = NULL, newcnst = NULL;
/* Rule out USE instructions and ASM statements as we don't want to
- change the hard registers mentioned. */
+ change the hard registers mentioned, and don't change fixed hard
+ registers. */
if (REG_P (x)
&& (REGNO (x) >= FIRST_PSEUDO_REGISTER
|| (GET_CODE (PATTERN (insn)) != USE
+ && !fixed_regs[REGNO (x)]
&& asm_noperands (PATTERN (insn)) < 0)))
{
cselib_val *val = cselib_lookup (x, GET_MODE (x), 0, VOIDmode);