[llvm] Preferential treatment of labels in MI sched DAG construction

Andrew Trick atrick at apple.com
Mon Feb 11 15:51:31 PST 2013


On Feb 11, 2013, at 1:50 PM, Sergei Larin <slarin at codeaurora.org> wrote:

> 
> Andy,
> 
> 
>  Following our discussion below here is the proposed patch.
> I also looked at the comment language for the CanHandleTerminators:
> 
>    /// The standard DAG builder does not normally include terminators as
> DAG
>    /// nodes because it does not create the necessary dependencies to
> prevent
>    /// reordering. A specialized scheduler can overide
>    /// TargetInstrInfo::isSchedulingBoundary then enable this flag to
> indicate
>    /// it has taken responsibility for scheduling the terminator correctly.
>    bool CanHandleTerminators;
> 
> ...and it seems clear and all encompassing enough to cover the proposed
> change. If you would like to modify it, just let me know and I'll amend the
> patch. Thanks.

Hi Sergei,

I might have misunderstood, but to make the requirements explicit for targets that do not have custom terminator/label schedulers, I think we should have this:

-    assert((!MI->isTerminator() || CanHandleTerminators) && !MI->isLabel() &&
+    assert(CanHandleTerminators || (!MI->isTerminator() && MI->isLabel()) &&

-Andy

> ---
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
> The Linux Foundation
> 
> 
>> -----Original Message-----
>> From: Andrew Trick [mailto:atrick at apple.com]
>> Sent: Monday, February 11, 2013 3:23 PM
>> To: Sergei Larin
>> Cc: llvmdev at cs.uiuc.edu
>> Subject: Re: [LLVMdev] Preferential treatment of labels in MI sched DAG
>> construction
>> 
>> 
>> On Feb 11, 2013, at 1:03 PM, Sergei Larin <slarin at codeaurora.org>
>> wrote:
>> 
>>> Hi Andy,
>>> 
>>> I have to resurrect an ancient question regarding scheduling
>> boundaries.
>>> 
>>> You might remember the reason for introduction of
>> CanHandleTerminators
>>> to ScheduleDAGInstrs. In short, Hexagon is currently uses DAG
>>> construction method (buildSchedGraph) for several purposes, which
>>> includes region formation for general VLIW packetization/bundling. As
>>> such we need to handle pretty much all instructions and any
>>> terminators, including labels (though I know it sounds strange).
>>> Nevertheless, ScheduleDAGInstrs::buildSchedGraph
>>> still has this hard assert in it:
>>> 
>>> assert((!MI->isTerminator() || CanHandleTerminators) && !MI-
>>> isLabel() &&
>>>          "Cannot schedule terminators or labels!");
>>> 
>>> ...and we have been OK till now by simply disabling it in our local
>>> version of the code, but since we are now working towards upstreaming
>>> all our code, this could no longer be ignored.
>>> 
>>> I guess my proposal is not to treat labels differently from any
>> other
>>> terminator - if a target wants to "schedule" labels - let it do so.
>> It
>>> actually works just fine for Hexagon... so if we can change this
>>> assert to something like:
>>> 
>>> 
>>> assert((!MI->isTerminator() || CanHandleTerminators) && "Cannot
>>> schedule terminators or labels!");
>>> 
>>> It would equal label in rights with any other terminator. What do
>> you
>>> think?
>> 
>> Sure, as long as CanHandleTerminators is commented to that effect.
>> 
>> -Andy
> <CanHandleTerminators.patch>




More information about the llvm-commits mailing list