aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira.c
diff options
context:
space:
mode:
authorRenlin Li <renlin.li@arm.com>2014-11-19 15:15:51 +0000
committerRenlin Li <renlin@gcc.gnu.org>2014-11-19 15:15:51 +0000
commit9d6e10c70a5c5c2ae0a867f287623b1d83f2969a (patch)
tree7e28af5fb6d3e43de7aca4a46ff43b6e5cfaf21a /gcc/ira.c
parentdd308ed81c37f3342ea6d15767d9360f365d9800 (diff)
downloadgcc-9d6e10c70a5c5c2ae0a867f287623b1d83f2969a.zip
gcc-9d6e10c70a5c5c2ae0a867f287623b1d83f2969a.tar.gz
gcc-9d6e10c70a5c5c2ae0a867f287623b1d83f2969a.tar.bz2
re PR middle-end/63762 ([ARM]GCC generates UNPREDICTABLE STR with Rn = Rt when hard-float abi is used)
2014-11-19 Renlin Li <Renlin.Li@arm.com> PR middle-end/63762 * ira.c (ira): Update preferred class. * gcc.dg/pr63762.c: New test. From-SVN: r217783
Diffstat (limited to 'gcc/ira.c')
-rw-r--r--gcc/ira.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ira.c b/gcc/ira.c
index 9c9e71d..e610d35 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -5263,7 +5263,18 @@ ira (FILE *f)
ira_allocno_iterator ai;
FOR_EACH_ALLOCNO (a, ai)
- ALLOCNO_REGNO (a) = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
+ {
+ int old_regno = ALLOCNO_REGNO (a);
+ int new_regno = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
+
+ ALLOCNO_REGNO (a) = new_regno;
+
+ if (old_regno != new_regno)
+ setup_reg_classes (new_regno, reg_preferred_class (old_regno),
+ reg_alternate_class (old_regno),
+ reg_allocno_class (old_regno));
+ }
+
}
else
{