diff options
author | James E Wilson <wilson@specifixinc.com> | 2003-10-30 01:40:48 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2003-10-29 17:40:48 -0800 |
commit | 3b6c3bb05d6fdc2048a2bcadde2a1ff63be8d7eb (patch) | |
tree | c85ad91a8707ad90462a57b45f9304237ec4d72f | |
parent | a126dc3a79761cf5f38bdb84cae67e6c47420105 (diff) | |
download | gcc-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/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/recog.c | 62 | ||||
-rw-r--r-- | gcc/reload.c | 15 |
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 |