aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2017-03-14 11:50:46 -0600
committerJeff Law <law@gcc.gnu.org>2017-03-14 11:50:46 -0600
commit4692943dace8ba6e1fc3edc6e1c2b051a81b74b7 (patch)
tree14346fcab7989f1900fef8539874ab63718d1e7e /gcc/reload.c
parent6c841832df663667e5938de3ca0d8a6602920477 (diff)
downloadgcc-4692943dace8ba6e1fc3edc6e1c2b051a81b74b7.zip
gcc-4692943dace8ba6e1fc3edc6e1c2b051a81b74b7.tar.gz
gcc-4692943dace8ba6e1fc3edc6e1c2b051a81b74b7.tar.bz2
re PR rtl-optimization/79728 (ICE in setup_pressure_classes, at ira.c:912)
PR rtl-optimization/79728 * regs.h (struct target_regs): New field x_contains_allocatable_regs_of_mode. (contains_allocatable_regs_of_mode): New macro. * reginfo.c (init_reg_sets_1): Initialize it, and change contains_reg_of_mode so it includes global regs as well. * reload.c (push_reload): Use contains_allocatable_regs_of_mode rather than contains_regs_of_mode. PR rtl-optimization/79728 * gcc.target/i386/sse-globalreg.c: New test. From-SVN: r246138
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 9d27a7c..598b78d 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -1055,7 +1055,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))]
+ && contains_allocatable_reg_of_mode[rclass][GET_MODE (SUBREG_REG (in))]
&& (CONSTANT_P (SUBREG_REG (in))
|| GET_CODE (SUBREG_REG (in)) == PLUS
|| strict_low
@@ -1164,7 +1164,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))]
+ && contains_allocatable_reg_of_mode[rclass][GET_MODE (SUBREG_REG (out))]
&& (CONSTANT_P (SUBREG_REG (out))
|| strict_low
|| (((REG_P (SUBREG_REG (out))