aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-09 21:40:48 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-09 21:40:48 +0000
commitbccb54440a2db32b6bf7feaf695859a1f5062bed (patch)
tree0f4ba6c4f6978df7d77d7f9b7c320a76b3712099 /gcc/reload.c
parenta8a0294d5520b2324fa601058689967464ff239e (diff)
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162019 138bc75d-0d04-0410-961f-82ee72b054a4
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 8a3d29525e7..6301f9ada8b 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. */