On Jan 28, 2008, at 6:38 PM, Devang Patel wrote:>> >> So what does this assert mean, exactly? > > In simple word, pass manager is unable to fulfill your request.Can you explain this one in complex words then? :^) I've encountered the same problem. --Vikram -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080128/20e12755/attachment.html>
From experience, an important point that is often forgotten is that the order of declaration of dependencies matter. If you declare that you require pass A, and then pass B, and B doesn't preserve A, you'll get an error like this. Just some advice from having had similar problems in the past. --Owen On Jan 28, 2008, at 9:01 PM, Vikram S. Adve wrote:> > > On Jan 28, 2008, at 6:38 PM, Devang Patel wrote: > >>> >>> So what does this assert mean, exactly? >> >> In simple word, pass manager is unable to fulfill your request. > > Can you explain this one in complex words then? :^) I've > encountered the same problem. > > --Vikram > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080128/ca2139f8/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 2555 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080128/ca2139f8/attachment.bin>
On Monday 28 January 2008 09:31:11 pm Owen Anderson wrote:> From experience, an important point that is often forgotten is that > the order of declaration of dependencies matter. If you declare that > you require pass A, and then pass B, and B doesn't preserve A, you'll > get an error like this. > > Just some advice from having had similar problems in the past.I'll have to double-check my code, but I don't think I have this particular problem. But in any case, isn't the whole point of PassManager that it can handle situations like this? Why wouldn't it just run Pass A twice, or run it in the correct order (after Pass B)? This strikes me as rather fragile. And my experience has been that that is in fact exactly the case. -Dave
Dear All, I had a similar error back in December; there are a number of email exchanges about it on llvmdev in December 2007; a search through the archives might shed some light on my PassManager does this. If you're updating a pass from pre-LLVM 2.0 to post-LLVM 2.0, you should be aware that the pass manager in LLVM 2.x is used only for scheduling dependent *analysis* passes. If you need to ensure that transform passes are run in a certain order or before an analysis pass, you need to order that explicitly by adding the passes to the PassManager object in the correct order. In my case, SAFECode used the PassManager's dependency checking to ensure that the Automatic Pool Allocation transform was run before the SAFECode analysis and transform passes. This worked in LLVM 1.9; it doesn't work in LLVM 2.x. -- John T. Vikram S. Adve wrote:> > > On Jan 28, 2008, at 6:38 PM, Devang Patel wrote: > >>> >>> So what does this assert mean, exactly? >> >> In simple word, pass manager is unable to fulfill your request. > > Can you explain this one in complex words then? :^) I've encountered > the same problem. > > --Vikram >
On Jan 28, 2008, at 8:11 PM, John Criswell wrote:> If you're updating a pass from pre-LLVM 2.0 to post-LLVM 2.0, you > should > be aware that the pass manager in LLVM 2.x is used only for scheduling > dependent *analysis* passes.I believe that was the intention from day one otherwise original author would not have used term "analysis" everywhere in code and interface that deals with pass dependencies.> If you need to ensure that transform > passes are run in a certain order or before an analysis pass, you need > to order that explicitly by adding the passes to the PassManager > object > in the correct order. > > In my case, SAFECode used the PassManager's dependency checking to > ensure that the Automatic Pool Allocation transform was run before the > SAFECode analysis and transform passes. This worked in LLVM 1.9; it > doesn't work in LLVM 2.x.On the other side, LLVM 2.x PassManager add much needed flexibility and new features. - Devang