aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E Wilson <wilson@specifixinc.com>2003-10-30 01:40:48 +0000
committerJim Wilson <wilson@gcc.gnu.org>2003-10-29 17:40:48 -0800
commit3b6c3bb05d6fdc2048a2bcadde2a1ff63be8d7eb (patch)
treec85ad91a8707ad90462a57b45f9304237ec4d72f
parenta126dc3a79761cf5f38bdb84cae67e6c47420105 (diff)
downloadgcc-3b6c3bb05d6fdc2048a2bcadde2a1ff63be8d7eb.zip
gcc-3b6c3bb05d6fdc2048a2bcadde2a1ff63be8d7eb.tar.gz
gcc-3b6c3bb05d6fdc2048a2bcadde2a1ff63be8d7eb.tar.bz2
Fix problem noticed by Dale Johannesen on the gcc list.
* recog.c (asm_operand_ok): Add missing break after case 'X'. Change if statements to else if statements in default case. (extract_constrain_insn_cached): Fix misspelling of constrain_operands in comment. (constrain_operands_cached): Likewise. (constrain_operands): Change if statements to else if statements in default case. * reload.c (find_reloads): Likewise. From-SVN: r73074
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/recog.c62
-rw-r--r--gcc/reload.c15
3 files changed, 45 insertions, 43 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dbb059e..6d6b39f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2003-10-29 James E Wilson <wilson@specifixinc.com>
+
+ * recog.c (asm_operand_ok): Add missing break after case 'X'.
+ Change if statements to else if statements in default case.
+ (extract_constrain_insn_cached): Fix misspelling of constrain_operands
+ in comment.
+ (constrain_operands_cached): Likewise.
+ (constrain_operands): Change if statements to else if statements in
+ default case.
+ * reload.c (find_reloads): Likewise.
+
2003-10-29 Richard Henderson <rth@redhat.com>
* config/m68k/m68k.c (notice_update_cc): Clear cc status for
diff --git a/gcc/recog.c b/gcc/recog.c
index 02ae71d..3c67bd8 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1746,6 +1746,7 @@ asm_operand_ok (rtx op, const char *constraint)
case 'X':
result = 1;
+ break;
case 'g':
if (general_operand (op, VOIDmode))
@@ -1764,20 +1765,16 @@ asm_operand_ok (rtx op, const char *constraint)
result = 1;
}
#ifdef EXTRA_CONSTRAINT_STR
- if (EXTRA_CONSTRAINT_STR (op, c, constraint))
+ else if (EXTRA_CONSTRAINT_STR (op, c, constraint))
+ result = 1;
+ else if (EXTRA_MEMORY_CONSTRAINT (c, constraint)
+ /* Every memory operand can be reloaded to fit. */
+ && memory_operand (op, VOIDmode))
+ result = 1;
+ else if (EXTRA_ADDRESS_CONSTRAINT (c, constraint)
+ /* Every address operand can be reloaded to fit. */
+ && address_operand (op, VOIDmode))
result = 1;
- if (EXTRA_MEMORY_CONSTRAINT (c, constraint))
- {
- /* Every memory operand can be reloaded to fit. */
- if (memory_operand (op, VOIDmode))
- result = 1;
- }
- if (EXTRA_ADDRESS_CONSTRAINT (c, constraint))
- {
- /* Every address operand can be reloaded to fit. */
- if (address_operand (op, VOIDmode))
- result = 1;
- }
#endif
break;
}
@@ -1970,7 +1967,7 @@ extract_insn_cached (rtx insn)
extract_insn (insn);
recog_data.insn = insn;
}
-/* Do cached extract_insn, constrain_operand and complain about failures.
+/* Do cached extract_insn, constrain_operands and complain about failures.
Used by insn_attrtab. */
void
extract_constrain_insn_cached (rtx insn)
@@ -1980,7 +1977,7 @@ extract_constrain_insn_cached (rtx insn)
&& !constrain_operands (reload_completed))
fatal_insn_not_found (insn);
}
-/* Do cached constrain_operand and complain about failures. */
+/* Do cached constrain_operands and complain about failures. */
int
constrain_operands_cached (int strict)
{
@@ -2535,27 +2532,20 @@ constrain_operands (int strict)
else if (EXTRA_CONSTRAINT_STR (op, c, p))
win = 1;
- if (EXTRA_MEMORY_CONSTRAINT (c, p))
- {
- /* Every memory operand can be reloaded to fit. */
- if (strict < 0 && GET_CODE (op) == MEM)
- win = 1;
-
- /* Before reload, accept what reload can turn into mem. */
- if (strict < 0 && CONSTANT_P (op))
- win = 1;
-
- /* During reload, accept a pseudo */
- if (reload_in_progress && GET_CODE (op) == REG
- && REGNO (op) >= FIRST_PSEUDO_REGISTER)
- win = 1;
- }
- if (EXTRA_ADDRESS_CONSTRAINT (c, p))
- {
- /* Every address operand can be reloaded to fit. */
- if (strict < 0)
- win = 1;
- }
+ else if (EXTRA_MEMORY_CONSTRAINT (c, p)
+ /* Every memory operand can be reloaded to fit. */
+ && ((strict < 0 && GET_CODE (op) == MEM)
+ /* Before reload, accept what reload can turn
+ into mem. */
+ || (strict < 0 && CONSTANT_P (op))
+ /* During reload, accept a pseudo */
+ || (reload_in_progress && GET_CODE (op) == REG
+ && REGNO (op) >= FIRST_PSEUDO_REGISTER)))
+ win = 1;
+ else if (EXTRA_ADDRESS_CONSTRAINT (c, p)
+ /* Every address operand can be reloaded to fit. */
+ && strict < 0)
+ win = 1;
#endif
break;
}
diff --git a/gcc/reload.c b/gcc/reload.c
index 59852ba..06bb3fb 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -3264,17 +3264,18 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
win = 1;
/* If the address was already reloaded,
we win as well. */
- if (GET_CODE (operand) == MEM && address_reloaded[i])
+ else if (GET_CODE (operand) == MEM
+ && address_reloaded[i])
win = 1;
/* Likewise if the address will be reloaded because
reg_equiv_address is nonzero. For reg_equiv_mem
we have to check. */
- if (GET_CODE (operand) == REG
- && REGNO (operand) >= FIRST_PSEUDO_REGISTER
- && reg_renumber[REGNO (operand)] < 0
- && ((reg_equiv_mem[REGNO (operand)] != 0
- && EXTRA_CONSTRAINT_STR (reg_equiv_mem[REGNO (operand)], c, p))
- || (reg_equiv_address[REGNO (operand)] != 0)))
+ else if (GET_CODE (operand) == REG
+ && REGNO (operand) >= FIRST_PSEUDO_REGISTER
+ && reg_renumber[REGNO (operand)] < 0
+ && ((reg_equiv_mem[REGNO (operand)] != 0
+ && EXTRA_CONSTRAINT_STR (reg_equiv_mem[REGNO (operand)], c, p))
+ || (reg_equiv_address[REGNO (operand)] != 0)))
win = 1;
/* If we didn't already win, we can reload