[DF] Generate REFs in REGNO order
Dimitrios Apostolou
jimis@gmx.net
Tue May 22 16:29:00 GMT 2012
On Tue, 22 May 2012, Paolo Bonzini wrote:
> Il 21/05/2012 19:49, Dimitrios Apostolou ha scritto:
>>
>> Thanks for reviewing, in the meantime I'll try to figure out why this
>> patch doesn't offer any speed-up on ppc64 (doesn't break anything
>> though), so expect a followup by tomorrow.
>
> Perhaps you hit this?
>
> else if (GET_CODE (XEXP (note, 0)) == CLOBBER)
> {
> if (REG_P (XEXP (XEXP (note, 0), 0)))
> {
> unsigned int regno = REGNO (XEXP (XEXP (note, 0), 0));
> if (!TEST_HARD_REG_BIT (defs_generated, regno))
> df_defs_record (collection_rec, XEXP (note, 0), bb,
> insn_info, flags);
> }
You are right, and I noticed that if we reverse (actually put straight)
the loop for the PARALLEL defs inside df_defs_record() then the speedup
stands for both x86 and ppc64.
The following patch was tested on x86, do you think it is meaningful for
the generic case?
--- gcc/df-scan.c 2012-05-06 04:08:43 +0000
+++ gcc/df-scan.c 2012-05-22 13:08:33 +0000
@@ -3010,7 +3010,7 @@ df_defs_record (struct df_collection_rec
break;
case PARALLEL:
- for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
+ for (i = 0; i < XVECLEN (x, 0); i++)
df_defs_record (collection_rec, XVECEXP (x, 0, i),
bb, insn_info, flags);
break;
Thanks,
Dimitris
More information about the Gcc-patches
mailing list