aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-01 19:47:19 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-01 19:47:19 +0000
commitb128b22fd1b6eb1261f3fcb4ec06dc5fef3fc4a3 (patch)
tree9a0f3ba878d421d60706ace98a062816b5c78465 /gcc/reload.c
parent4cbcb428f4bd0a0725016655feb7e5eb8922eb7d (diff)
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174540 138bc75d-0d04-0410-961f-82ee72b054a4
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 045e5594195..27d57877501 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))