Add detailed diagnostics to LoopUnroll pass

Michael Zolotukhin mzolotukhin at apple.com
Tue Jan 27 11:47:22 PST 2015


> On Jan 27, 2015, at 11:44 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> 
> ----- Original Message -----
>> From: "Michael Zolotukhin" <mzolotukhin at apple.com>
>> To: "Hal Finkel" <hfinkel at anl.gov>
>> Cc: "Commit Messages and Patches for LLVM" <llvm-commits at cs.uiuc.edu>
>> Sent: Tuesday, January 27, 2015 1:36:14 PM
>> Subject: Re: Add detailed diagnostics to LoopUnroll pass
>> 
>> 
>>> On Jan 27, 2015, at 6:07 AM, Hal Finkel <hfinkel at anl.gov> wrote:
>>> 
>>> ----- Original Message -----
>>>> From: "Michael Zolotukhin" <mzolotukhin at apple.com>
>>>> To: "Hal J. Finkel" <hfinkel at anl.gov>
>>>> Cc: "Commit Messages and Patches for LLVM"
>>>> <llvm-commits at cs.uiuc.edu>
>>>> Sent: Monday, January 26, 2015 4:49:24 PM
>>>> Subject: Add detailed diagnostics to LoopUnroll pass
>>>> 
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> This patch adds some diagnostics to loop-unroll pass, triggered by
>>>> -Rpass-analysis=loop-unroll and -Rpass-missed=loop-unroll.
>>>> Currently
>>>> we only do -Rpass=loop-unroll diagnostics in this pass.
>>>> 
>>> 
>>>  if (HasUnrollDisablePragma(L)) {
>>> 
>>> +    emitOptimizationRemarkMissed(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                 "Unrolling is disabled by
>>> pragma.");
>>> 
>>> Please don't add a trailing period to the messages, I don't believe
>>> that's the convention used by the other passes (this applies to
>>> all messages).
>>> 
>>> +                                 "Unrolling is impossible, because
>>> the loop "
>>> 
>>> +                                 "contains non-duplicable
>>> instructions.");
>>> 
>>> Remove comma before 'because'
>>> 
>>> +    emitOptimizationRemarkMissed(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                 "Unrolling is disabled, because
>>> the loop "
>>> 
>>> +                                 "contains candidates for
>>> inlining.");
>>> 
>>> Remove comma before 'because'
>>> 
>>> +  if (TripCount) {
>>> 
>>> +    if (Count == TripCount &&
>>> 
>>> +        (Threshold == NoThreshold || UnrolledSize <= Threshold)) {
>>> 
>>> +      Unrolling = Full;
>>> 
>>> +      emitOptimizationRemarkAnalysis(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                     "Will try to completely
>>> unroll the loop.");
>>> 
>>> Saying 'try' here sounds odd. Either the decision has been made or
>>> it has not. If not, move the message to some later point.
>>> Otherwise, simple state that the loop will be fully unrolled.
>>> 
>>> +      emitOptimizationRemarkAnalysis(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                     "Loop cannot be completely
>>> unrolled, "
>>> 
>>> +                                     "because it is too large.");
>>> 
>>> Remove comma before 'because'
>>> 
>>> +    emitOptimizationRemarkAnalysis(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                   "Loop tripcount: " +
>>> Twine(TripCount) +
>>> 
>>> +                                   ". Estimated unrolled size: " +
>>> 
>>> +                                   Twine(UnrolledSize) +
>>> 
>>> +                                   ". Threshold: " +
>>> Twine(Threshold) + ".");
>>> 
>>> I'm not sure the size information is appropriate for end users
>>> (from their perspective, these are in arbitrary units); I think
>>> leaving this in the debug information is sufficient. Please make
>>> trip count two words.
>>> 
>>> +    emitOptimizationRemarkAnalysis(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                   "Loop tripcount is unknown,
>>> only runtime "
>>> 
>>> +                                   "unrolling is possible.");
>>> 
>>> Trip count should be two words
>>> 
>>> +      emitOptimizationRemarkMissed(Ctx, DEBUG_TYPE, *F, LoopLoc,
>>> 
>>> +                                   "Cannot unroll because loop has
>>> a runtime "
>>> 
>>> +                                   "trip count.");
>>> 
>>> We also have to be careful here not to produce messaging that users
>>> will find confusing. The unroller is run with partial/runtime
>>> unrolling disabled many times (iteratively within the
>>> inliner-driven CGSCC pass manager), and the user might end up
>>> seeing these messages many times for the same loop, which would be
>>> confusing, and also confusing because 'disabled' is not really
>>> true but rather delayed until the end of the pipeline.
>> Hmm.. that’s true. Indeed we emit the messages several times for one
>> loop. Now I’m not sure if we need such diagnostics at all.
>> Personally I found it useful, but other users, especially not
>> involved into LLVM development, might have a different opinion on
>> that. Do you think it’s worth adding these messages at all?
> 
> I recommend leaving them out for now; we can revisit this later if we'd like.
Okay, that makes sense. Thank you for the comments and review!

Michael
> 
> -Hal
> 
>> 
>> Thanks,
>> Michael
>>> 
>>> As a result, we should really not say anything about these loops
>>> that require runtime/partial unrolling until the "final" run of
>>> the unroller at the end of the pipeline.
>>> 
>>> Thanks again,
>>> Hal
>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> The patch shouldn't change any logic in the pass work, only
>>>> rearrange
>>>> code a bit and add the reports. Is it ok to commit?
>>>> 
>>>> Thanks,
>>>> Michael
>>> 
>>> --
>>> Hal Finkel
>>> Assistant Computational Scientist
>>> Leadership Computing Facility
>>> Argonne National Laboratory
>> 
>> 
> 
> -- 
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150127/b9f29816/attachment.html>


More information about the llvm-commits mailing list