aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2010-07-09 21:40:48 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2010-07-09 21:40:48 +0000
commitc033690d7e2108d2b7ddbb37d488a6f1519eedff (patch)
tree0f4ba6c4f6978df7d77d7f9b7c320a76b3712099 /gcc/reload.c
parente8edaf9523c61dfbdeac886069badf12ff981973 (diff)
downloadgcc-c033690d7e2108d2b7ddbb37d488a6f1519eedff.zip
gcc-c033690d7e2108d2b7ddbb37d488a6f1519eedff.tar.gz
gcc-c033690d7e2108d2b7ddbb37d488a6f1519eedff.tar.bz2
reload.c (find_reloads): Don't clear badop if we have a winreg alternative...
* reload.c (find_reloads): Don't clear badop if we have a winreg alternative, but not win, and the class only has fixed regs. * hard-reg-set.h (class_only_fixed_regs): Declare. * reginfo.c (class_only_fixed_regs): New array. (init_reg_sets_1): Initialize it. * config/arm/arm.md (arm_addsi3, thumb1_addsi3, arm_subsi3_insn): Don't discourage alternatives using the stack pointer. testsuite/ * gcc.dg/pr32370.c: Allow another kind of error message. From-SVN: r162019
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 8a3d295..6301f9a 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -3470,7 +3470,8 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
/* If this operand could be handled with a reg,
and some reg is allowed, then this operand can be handled. */
- if (winreg && this_alternative[i] != NO_REGS)
+ if (winreg && this_alternative[i] != NO_REGS
+ && (win || !class_only_fixed_regs[this_alternative[i]]))
badop = 0;
/* Record which operands fit this alternative. */