Daniel Liew
2014-Apr-05 02:13 UTC
[LLVMdev] General questions about PassManager and the removed SimplifyLibraryCalls pass
Hi, I've been going the PassManager documentation and reading some of the code and there a few things that aren't obvious (at least) to me that I'd like to understand. 1. It seems the opt tool is aware of the dependencies of Transforms (e.g. Global Value Numbering) and adds its the analyses it depends on to the PassManager. It looks like the dependencies are specified using macros lib/Transforms/Scalar/GVN.cpp ``` INITIALIZE_PASS_BEGIN(GVN, "gvn", "Global Value Numbering", false, false) INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis) INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfo) INITIALIZE_AG_DEPENDENCY(AliasAnalysis) INITIALIZE_PASS_END(GVN, "gvn", "Global Value Numbering", false, false) ``` But also in ``` void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<DominatorTreeWrapperPass>(); AU.addRequired<TargetLibraryInfo>(); if (!NoLoads) AU.addRequired<MemoryDependenceAnalysis>(); AU.addRequired<AliasAnalysis>(); AU.addPreserved<DominatorTreeWrapperPass>(); AU.addPreserved<AliasAnalysis>(); } ``` Why are these dependencies stated twice, once in getAnalysisUsage() and the other using macros? If I am using my a PassManager in my own tool and add a transform like GVN do I manually need to add the analyses it depends on to the PassManager before adding the Transform itself or does the PassManager do something smart and add the Analyses automatically like the opt tool does? 2. I recently noticed that the SimplifyLibraryCallsPass was removed and according to the LLVM3.4 release notes its functionality is now in "instruction combiner and function attribute marking passes". I was wondering, which function attributes passes were meant? I took a look at opt's code and it seems to add the TargetLibraryInfo pass. Is there anything I need to do with this pass (possibly add to the pass manager depending on the answer to 1) to achieve the same transform that SimplifyLibraryCalls did? Thanks, Dan Liew.
Meador Inge
2014-Apr-10 20:48 UTC
[LLVMdev] General questions about PassManager and the removed SimplifyLibraryCalls pass
On 04/04/2014 09:13 PM, Daniel Liew wrote:> 2. I recently noticed that the SimplifyLibraryCallsPass was removed > and according to the LLVM3.4 release notes its functionality is now in > "instruction combiner and function attribute marking passes". I was > wondering, which function attributes passes were meant?The "functionattrs" pass. See 'lib/Transforms/IPO/FunctionAttrs.cpp'.> I took a look at opt's code and it seems to add the TargetLibraryInfo > pass. Is there anything I need to do with this pass (possibly add to > the pass manager depending on the answer to 1) to achieve the same > transform that SimplifyLibraryCalls did?Off the top of my head, I am not sure. If I get a moment, then I will look into it. -- Meador Inge CodeSourcery / Mentor Embedded