diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-12 14:56:57 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-12 14:56:57 +0000 |
commit | 50c0c258ba9fbe80b19dbe69ae3b20580abea973 (patch) | |
tree | cc03e3af6c23aedc2d35dd550a24766687e4b0e5 | |
parent | 458a870618683f21ed97b3c49037ba9017ea3c83 (diff) | |
download | gcc-50c0c258ba9fbe80b19dbe69ae3b20580abea973.tar.gz |
* recog.h, genoutput.c, optabs.c: Revert last patch.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172321 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/genoutput.c | 11 | ||||
-rw-r--r-- | gcc/optabs.c | 61 | ||||
-rw-r--r-- | gcc/recog.h | 2 |
4 files changed, 20 insertions, 58 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c130b3b3ec..3a8a279b4c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2011-04-12 Richard Sandiford <richard.sandiford@linaro.org> + + * recog.h, genoutput.c, optabs.c: Revert last patch. + 2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> PR target/48090 diff --git a/gcc/genoutput.c b/gcc/genoutput.c index 621439f479a..3e89cfd6df1 100644 --- a/gcc/genoutput.c +++ b/gcc/genoutput.c @@ -66,8 +66,6 @@ along with GCC; see the file COPYING3. If not see MATCH_OPERAND; it is zero for operands that should not be changed during register elimination such as MATCH_OPERATORs. - g. `allows_mem', is true for operands that accept MEM rtxes. - The code number of an insn is simply its position in the machine description; code numbers are assigned sequentially to entries in the description, starting with code number 0. @@ -258,8 +256,6 @@ output_operand_data (void) for (d = odata; d; d = d->next) { - struct pred_data *pred; - printf (" {\n"); printf (" %s,\n", @@ -273,12 +269,7 @@ output_operand_data (void) printf (" %d,\n", d->constraint == NULL ? 1 : 0); - printf (" %d,\n", d->eliminable); - - pred = NULL; - if (d->predicate) - pred = lookup_predicate (d->predicate); - printf (" %d\n", pred && pred->codes[MEM]); + printf (" %d\n", d->eliminable); printf(" },\n"); } diff --git a/gcc/optabs.c b/gcc/optabs.c index 15f50f7bb48..682b8e40f7c 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -7001,36 +7001,6 @@ insn_operand_matches (enum insn_code icode, unsigned int opno, rtx operand) (operand, insn_data[(int) icode].operand[opno].mode))); } -/* Like maybe_legitimize_operand, but do not change the code of the - current rtx value. */ - -static bool -maybe_legitimize_operand_same_code (enum insn_code icode, unsigned int opno, - struct expand_operand *op) -{ - /* See if the operand matches in its current form. */ - if (insn_operand_matches (icode, opno, op->value)) - return true; - - /* If the operand is a memory, try forcing the address into a register. */ - if (MEM_P (op->value) && insn_data[(int) icode].operand[opno].allows_mem) - { - rtx addr, mem, last; - - last = get_last_insn (); - addr = force_reg (Pmode, XEXP (op->value, 0)); - mem = replace_equiv_address (op->value, addr); - if (insn_operand_matches (icode, opno, mem)) - { - op->value = mem; - return true; - } - delete_insns_since (last); - } - - return false; -} - /* Try to make OP match operand OPNO of instruction ICODE. Return true on success, storing the new operand value back in OP. */ @@ -7041,25 +7011,22 @@ maybe_legitimize_operand (enum insn_code icode, unsigned int opno, enum machine_mode mode, imode; bool old_volatile_ok, result; + old_volatile_ok = volatile_ok; mode = op->mode; + result = false; switch (op->type) { case EXPAND_FIXED: - old_volatile_ok = volatile_ok; volatile_ok = true; - result = maybe_legitimize_operand_same_code (icode, opno, op); - volatile_ok = old_volatile_ok; - return result; + break; case EXPAND_OUTPUT: gcc_assert (mode != VOIDmode); - if (op->value - && op->value != const0_rtx - && GET_MODE (op->value) == mode - && maybe_legitimize_operand_same_code (icode, opno, op)) - return true; - - op->value = gen_reg_rtx (mode); + if (!op->value + || op->value == const0_rtx + || GET_MODE (op->value) != mode + || !insn_operand_matches (icode, opno, op->value)) + op->value = gen_reg_rtx (mode); break; case EXPAND_INPUT: @@ -7067,10 +7034,9 @@ maybe_legitimize_operand (enum insn_code icode, unsigned int opno, gcc_assert (mode != VOIDmode); gcc_assert (GET_MODE (op->value) == VOIDmode || GET_MODE (op->value) == mode); - if (maybe_legitimize_operand_same_code (icode, opno, op)) - return true; - - op->value = copy_to_mode_reg (mode, op->value); + result = insn_operand_matches (icode, opno, op->value); + if (!result) + op->value = copy_to_mode_reg (mode, op->value); break; case EXPAND_CONVERT_TO: @@ -7104,7 +7070,10 @@ maybe_legitimize_operand (enum insn_code icode, unsigned int opno, goto input; break; } - return insn_operand_matches (icode, opno, op->value); + if (!result) + result = insn_operand_matches (icode, opno, op->value); + volatile_ok = old_volatile_ok; + return result; } /* Make OP describe an input operand that should have the same value diff --git a/gcc/recog.h b/gcc/recog.h index cce1321ad09..0261bc6072d 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -272,8 +272,6 @@ struct insn_operand_data const char is_operator; const char eliminable; - - const char allows_mem; }; /* Legal values for insn_data.output_format. Indicate what type of data |