re PR rtl-optimization/67145 (associativity from pseudo-reg ordering)
PR rtl-opt/67145 * simplify-rtx.c (simplify_plus_minus): Allow reassoc without simplification when all args are positive non-fixed registers. From-SVN: r233916
This commit is contained in:
parent
82ee0cf2f7
commit
08c1904dcc
|
@ -1,3 +1,9 @@
|
|||
2016-03-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR rtl-opt/67145
|
||||
* simplify-rtx.c (simplify_plus_minus): Allow reassoc without
|
||||
simplification when all args are positive non-fixed registers.
|
||||
|
||||
2016-03-02 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
* target.def (lra_p): Specify that new ports should use LRA.
|
||||
|
|
|
@ -4421,9 +4421,26 @@ simplify_plus_minus (enum rtx_code code, machine_mode mode, rtx op0,
|
|||
n_ops = i;
|
||||
}
|
||||
|
||||
/* If nothing changed, fail. */
|
||||
/* If nothing changed, check that rematerialization of rtl instructions
|
||||
is still required. */
|
||||
if (!canonicalized)
|
||||
return NULL_RTX;
|
||||
{
|
||||
/* Perform rematerialization if only all operands are registers and
|
||||
all operations are PLUS. */
|
||||
/* ??? Also disallow (non-global, non-frame) fixed registers to work
|
||||
around rs6000 and how it uses the CA register. See PR67145. */
|
||||
for (i = 0; i < n_ops; i++)
|
||||
if (ops[i].neg
|
||||
|| !REG_P (ops[i].op)
|
||||
|| (REGNO (ops[i].op) < FIRST_PSEUDO_REGISTER
|
||||
&& fixed_regs[REGNO (ops[i].op)]
|
||||
&& !global_regs[REGNO (ops[i].op)]
|
||||
&& ops[i].op != frame_pointer_rtx
|
||||
&& ops[i].op != arg_pointer_rtx
|
||||
&& ops[i].op != stack_pointer_rtx))
|
||||
return NULL_RTX;
|
||||
goto gen_result;
|
||||
}
|
||||
|
||||
/* Create (minus -C X) instead of (neg (const (plus X C))). */
|
||||
if (n_ops == 2
|
||||
|
@ -4465,6 +4482,7 @@ simplify_plus_minus (enum rtx_code code, machine_mode mode, rtx op0,
|
|||
}
|
||||
|
||||
/* Now make the result by performing the requested operations. */
|
||||
gen_result:
|
||||
result = ops[0].op;
|
||||
for (i = 1; i < n_ops; i++)
|
||||
result = gen_rtx_fmt_ee (ops[i].neg ? MINUS : PLUS,
|
||||
|
|
Loading…
Reference in New Issue