[llvm-dev] pass invalidation

Yuxi Chen via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 20 13:38:05 PDT 2016

Hi Mehdi,

Thanks for your reply.
However, when I remove dependency from C to A, the problem is still here.

From: mehdi.amini at apple.com [mehdi.amini at apple.com]
Sent: Sunday, June 19, 2016 4:28 AM
To: Yuxi Chen
Cc: llvmdev at cs.uiuc.edu; llvm-dev at lists.llvm.org; llvmdev-bounces at cs.uiuc.edu
Subject: Re: [llvm-dev] pass invalidation

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){

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){

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.

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.


LLVM Developers mailing list
llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160620/9874b71f/attachment.html>

More information about the llvm-dev mailing list