[llvm-dev] pass invalidation

John Criswell via llvm-dev llvm-dev at lists.llvm.org
Sun Jun 19 08:05:56 PDT 2016


On 6/19/16 4:28 AM, Mehdi Amini via llvm-dev wrote:
>
>> On Jun 18, 2016, at 10:44 PM, Yuxi Chen via llvm-dev 
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Hi All,
>>
>> When I use llvm, I encounter a problem like "unable to schedule pass 
>> A required by C"
>> I investigated deeper. It's like:
>> I have three passes, say A, B, C(all are on function level)
>> A would modify IR code. (change instruction order)
>>
>> For pass B,
>> I would use the result of pass A, I use addRequired<B>(), and 
>> &getAnalysis<B>(), it works.
>>
>> void getAnalysisUsage(AU){
>> AU.addRequired<A>();
>> }
>>
>>
>> For pass C, it will use the results of pass A and B.
>> I use the way as used for pass B, but it failed, even for LoopInfo 
>> analysis pass(which is the built-in analysis pass).
>> void getAnalysisUsage(AU){
>> AU.addRequired<A>();
>> AU.addRequired<B>();
>> }
>>
>>
>> It seems because A would modify IR code, so for pass C, I need first 
>> load pass A then pass B, otherwise it will be invalidated.
>> However, when I change the using order, I still got error "unable to 
>> schedule pass A required by C".
>>
>> Does anyone encounter the same problem before and have a solution?
>> Any help is appreciated.
>
> Depending on other transformations isn’t recommended, and isn’t 
> supported by the soon-new-passmanager I believe.
> The expectation is that the passes are added in order to the pass 
> manager by the client.

Depending on transformation passes isn't supported by the legacy 
PassManager, either.  Occasionally some passes can get away with it, but 
it often results in unschedule-able pass pipelines as above.

If your transform pass does something to the code, other passes should 
either infer what it did by examining the IR.  the IR contains the 
definitive information about the program (because it is the program).

Alternatively, you could create an analysis pass upon which both your 
transform and analysis passes depend.  The transform pass would update 
this new analysis pass with information on what it transformed; your 
later analysis passes could then query this information.  This approach 
is fragile, but it could work.

Regards,

John Criswell

>
> In you case, I expect that it would “work” by removing the dependency 
> from C to A. If C requires B and B requires A, by scheduling C you’ll 
> get A, B, C in sequence.
>
>> Mehdi
>
>
>
>>
>> Best,
>> Yuxi
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160619/4d4e8fa1/attachment.html>


More information about the llvm-dev mailing list