diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2015-01-15 20:26:19 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2015-01-15 20:26:19 +0000 |
commit | d1457701461d5a49ca6b5d8a6d1c83a37a6dc771 (patch) | |
tree | 8ad53dce7dd0dcd0dfba90387bdd8075e7e631b3 /gcc/lra-constraints.c | |
parent | 41dbbb3789850dfea98dd8984f69806284f87b6e (diff) | |
download | gcc-d1457701461d5a49ca6b5d8a6d1c83a37a6dc771.zip gcc-d1457701461d5a49ca6b5d8a6d1c83a37a6dc771.tar.gz gcc-d1457701461d5a49ca6b5d8a6d1c83a37a6dc771.tar.bz2 |
re PR rtl-optimization/64110 (ICE: Max. number of generated reload insns per insn is achieved (90))
2015-01-15 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/64110
* stmt.c (parse_output_constraint): Process '^' and '$'.
(parse_input_constraint): Ditto.
* lra-constraints.c (process_alt_operands): Process the new
constraints.
* ira-costs.c (record_reg_classes): Process the new constraint
'^'.
* genoutput.c (indep_constraints): Add '^' and '$'.
* config/i386/sse.md (*vec_dup<mode>): Use '$' instead of '!'.
* doc/md.texi: Add description of the new constraints.
2015-01-15 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/64110
* gcc.target/i386/pr64110.c: Add scan-assembler.
From-SVN: r219683
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index cdfa944..f102fe5 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -1657,6 +1657,7 @@ process_alt_operands (int only_alternative) then REJECT is ignored, but otherwise it gets this much counted against it in addition to the reloading needed. */ int reject; + int op_reject; /* The number of elements in the following array. */ int early_clobbered_regs_num; /* Numbers of operands which are early clobber registers. */ @@ -1806,6 +1807,7 @@ process_alt_operands (int only_alternative) track. */ lra_assert (*p != 0 && *p != ','); + op_reject = 0; /* Scan this alternative's specs for this operand; set WIN if the operand fits any letter in this alternative. Otherwise, clear BADOP if this operand could fit some @@ -1828,6 +1830,13 @@ process_alt_operands (int only_alternative) early_clobber_p = true; break; + case '$': + op_reject += LRA_MAX_REJECT; + break; + case '^': + op_reject += LRA_LOSER_COST_FACTOR; + break; + case '#': /* Ignore rest of this alternative. */ c = '\0'; @@ -2114,6 +2123,7 @@ process_alt_operands (int only_alternative) int const_to_mem = 0; bool no_regs_p; + reject += op_reject; /* Never do output reload of stack pointer. It makes impossible to do elimination when SP is changed in RTL. */ |