This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Speedup CSE by 5%
Hi Jeff,
> I understand all that. However, if you look at the first call to
> validate_change (inside an ASM_OPERANDS case) you'll see a case where
> I think we can modify x without copying it first.
I think the proposed patch is actually safe. Consider
case ASM_OPERANDS:
for (i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--)
validate_change (insn, &ASM_OPERANDS_INPUT (x, i),
fold_rtx (ASM_OPERANDS_INPUT (x, i), insn), 0);
break;
validate_change enters a change into the CHANGES vector like so
changes[num_changes].object = object;
apply_change_group starts out like so:
for (i = 0; i < num_changes; i++)
{
rtx object = changes[i].object;
/* If there is no object to test or if it is the same as the one we
already tested, ignore it. */
if (object == 0 || object == last_validated)
continue;
So, if we have changes[i].object == 0 for each i, apply_change_group
does nothing but set BB_DIRTY flag, which makes sense because we need
an insn to validate a change.
Just to make things clear, we might want to do something like this:
case ASM_OPERANDS:
if (insn)
{
for (i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--)
validate_change (insn, &ASM_OPERANDS_INPUT (x, i),
fold_rtx (ASM_OPERANDS_INPUT (x, i), insn), 0);
}
break;
Kazu Hirata