[llvm-dev] pass invalidation
Mehdi Amini via llvm-dev
llvm-dev at lists.llvm.org
Sun Jun 19 02:30:11 PDT 2016
> On Jun 19, 2016, at 12:59 AM, serge guelton via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> On Sun, Jun 19, 2016 at 05:44:01AM +0000, Yuxi Chen via llvm-dev 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.
>
> Hi,
>
> It looks like A is not an analyse, as it modifies IR code, while
> analysis don't modify IR. You cannot specify this kind of dependencies
> in the getAnalysisUsage method.
>
> What you can do though is create a pass ABC that spawns a new
> Passmanager that calls A, B and C in that order, something like:
>
> llvm::legacy::FunctionPassManager FPM(Module);
> FPM.add(createA());
> FPM.add(createB());
> FPM.add(createC());
>
> bool modified = false;
> modified |= FPM.doInitialization();
> for (Function &F : Module)
> modified |= FPM.run(F);
> modified |= FPM.doFinalization();
Indeed, this would work quite elegantly.
However be aware that it prevents from sharing analyses (easily…) with the outer pass-manager, so it can cost some compile time.
I think it should be possible to set it up in a nicer way with the new pass manager though.
—
Mehdi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160619/0c9810e6/attachment.html>
More information about the llvm-dev
mailing list