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

Andrew Trick atrick at apple.com
Tue Feb 12 08:13:06 PST 2013


Please commit. Thanks.
-Andy

On Feb 12, 2013, at 8:12 AM, Sergei Larin <slarin at codeaurora.org> wrote:

> Sure. Here is (hopefully) the final version :)
> 
> Sergei
> 
> ---
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
> The Linux Foundation
> 
> 
>> -----Original Message-----
>> From: Bill Wendling [mailto:bwendling at apple.com]
>> Sent: Monday, February 11, 2013 5:57 PM
>> To: Andrew Trick
>> Cc: Sergei Larin; llvm-commits at cs.uiuc.edu
>> Subject: Re: [llvm] Preferential treatment of labels in MI sched DAG
>> construction
>> 
>> 
>> On Feb 11, 2013, at 3:51 PM, Andrew Trick <atrick at apple.com> wrote:
>> 
>>> 
>>> 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()) &&
>>> 
>> Don't forget the parens around the ||'ed stuff. :-)
>> 
>> -bw
>> 
>>> -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>
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> <CanHandleTerminators_2.patch>




More information about the llvm-commits mailing list