Fwd: [PATCH] Scheduling result adjustment to enable macro-fusion
Jeff Law
law@redhat.com
Wed Nov 27 09:56:00 GMT 2013
On 11/26/13 12:33, Wei Mi wrote:
> On Mon, Nov 25, 2013 at 2:12 PM, Jeff Law <law@redhat.com> wrote:
>>
>>>
>>> Doing the cleanup at the end of BB could ensure all the groups
>>> inserted for macrofusion will be cleaned. For groups not at the end of
>>> a block, no matter whether they are cleaned up or not, nothing will
>>> happen because other passes will not mess up those groups -- you said
>>> cc0-setter/cc0-user was such a case. Is it call group a different
>>> case?
>>
>> True, it would be safe, but it seems inconsistent and confusing that some
>> SCHED_GROUP_P references would be purged and others remain.
>>
>> Given SCHED_GROUP_P is to used strictly in the scheduler ISTM that we should
>> be wiping it as we leave and that our RTL checkers ought to be verifying
>> there are no insns with SCHED_GROUP_P left on.
>>
>
> How about add a verifier TODO_verify_sched_group_flag similar as
> TODO_verify_rtl_sharing, and add the verifier in the todo lists of all
> the scheduling passes.
>
>>
>>>
>>> For sched1 and sched2, we can do that. Actually, I find it has been
>>> done in move_insn when commit_schedule. But for modulo scheduling, I
>>> havn't found a good place to do it.
>>
>> Well, that's where I'd suggest focusing attention.
>>
>> jeff
>>
>
> After looking it carefully, even for sched1 and sched2, it is not ok
> to depend on move_insn in commit_schedule to clean up all the
> SCHED_GROUP_P, suppose a block is decided not to be scheduled by
> dbg_cnt, then SCHED_GROUP_P inside the block will not be cleaned.
> It is even more difficult to find a place inside SMS scheduling to do
> the cleanup.
>
> Any suggestions?
Hmm, maybe attack from the other direction? -- could we clear
SCHED_GROUP_P for each insn at the start of this loop in sched_analyze?
It's not as clean in the sense that SCHED_GROUP_P "escapes" the
scheduler, but it might be an option.
for (insn = head;; insn = NEXT_INSN (insn))
{
if (INSN_P (insn))
{
/* And initialize deps_lists. */
sd_init_insn (insn);
}
deps_analyze_insn (deps, insn);
if (insn == tail)
{
if (sched_deps_info->use_cselib)
cselib_finish ();
return;
}
}
Jeff
>
More information about the Gcc-patches
mailing list