aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@gcc.gnu.org>2011-06-01 19:47:19 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2011-06-01 19:47:19 +0000
commit4d41c2d1ce6f01c53eb8941461b3047e8a6368f6 (patch)
tree9a0f3ba878d421d60706ace98a062816b5c78465 /gcc/reload.c
parent7448d2e73ea9513f001327757541328bb8137b38 (diff)
downloadgcc-4d41c2d1ce6f01c53eb8941461b3047e8a6368f6.zip
gcc-4d41c2d1ce6f01c53eb8941461b3047e8a6368f6.tar.gz
gcc-4d41c2d1ce6f01c53eb8941461b3047e8a6368f6.tar.bz2
re PR rtl-optimization/48830 (unrecognized insn: storing invalid upper FP reg in SImode)
gcc/ PR rtl-optimization/48830 PR rtl-optimization/48808 PR rtl-optimization/48792 * reload.c (push_reload): Check contains_reg_of_mode. * reload1.c (strip_paradoxical_subreg): New function. (gen_reload_chain_without_interm_reg_p): Use it to handle paradoxical subregs. (emit_output_reload_insns, gen_reload): Likewise. gcc/testsuite/ 2011-06-01 Eric Botcazou <ebotcazou@adacore.com> Hans-Peter Nilsson <hp@axis.com> PR rtl-optimization/48830 * gcc.target/sparc/ultrasp12.c: New test. From-SVN: r174540
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 045e559..27d5787 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -1019,6 +1019,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
#ifdef CANNOT_CHANGE_MODE_CLASS
&& !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (in)), inmode, rclass)
#endif
+ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (in))]
&& (CONSTANT_P (SUBREG_REG (in))
|| GET_CODE (SUBREG_REG (in)) == PLUS
|| strict_low
@@ -1125,6 +1126,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
#ifdef CANNOT_CHANGE_MODE_CLASS
&& !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (out)), outmode, rclass)
#endif
+ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (out))]
&& (CONSTANT_P (SUBREG_REG (out))
|| strict_low
|| (((REG_P (SUBREG_REG (out))