aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2011-07-21 10:13:27 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2011-07-21 10:13:27 +0000
commitd6f2373894eeb4fdf52141d9c94bba7c5c884d43 (patch)
treee7be17936d279457d5bb7033fdb5627952fdd91d /gcc
parentfec3cad34054045fd56274fe4620cf98a9da3d25 (diff)
downloadgcc-d6f2373894eeb4fdf52141d9c94bba7c5c884d43.zip
gcc-d6f2373894eeb4fdf52141d9c94bba7c5c884d43.tar.gz
gcc-d6f2373894eeb4fdf52141d9c94bba7c5c884d43.tar.bz2
regcprop.c (maybe_mode_change): Check HARD_REGNO_MODE_OK.
gcc/ * regcprop.c (maybe_mode_change): Check HARD_REGNO_MODE_OK. From-SVN: r176558
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/regcprop.c7
2 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2f35786..cf57537 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2011-07-21 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * regcprop.c (maybe_mode_change): Check HARD_REGNO_MODE_OK.
+
2011-07-21 Kai Tietz <ktietz@redhat.com>
* tree-ssa-propagate.c (substitute_and_fold): Use
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index 911f59eb..aca005d 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -418,10 +418,9 @@ maybe_mode_change (enum machine_mode orig_mode, enum machine_mode copy_mode,
offset = ((WORDS_BIG_ENDIAN ? wordoffset : 0)
+ (BYTES_BIG_ENDIAN ? byteoffset : 0));
- return gen_rtx_raw_REG (new_mode,
- regno + subreg_regno_offset (regno, orig_mode,
- offset,
- new_mode));
+ regno += subreg_regno_offset (regno, orig_mode, offset, new_mode);
+ if (HARD_REGNO_MODE_OK (regno, new_mode))
+ return gen_rtx_raw_REG (new_mode, regno);
}
return NULL_RTX;
}