I am trying to add an analysis pass as a FunctionPass, and let LICM
(LoopPass) depends upon it. So in LICM.cpp, I have the following:
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
AU.addRequired<DominatorTree>();
AU.addRequired<LoopInfo>();
AU.addRequiredID(LoopSimplifyID);
AU.addRequired<AliasAnalysis>();
AU.addRequired<MyAnalysis>(); // Add this
AU.addPreserved<AliasAnalysis>();
AU.addPreserved("scalar-evolution");
AU.addPreservedID(LoopSimplifyID);
}
char LICM::ID = 0;
INITIALIZE_PASS_BEGIN(LICM, "licm", "Loop Invariant Code Motion", false, false)
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
INITIALIZE_PASS_DEPENDENCY(MyAnalysis)
// add this dependency
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
INITIALIZE_PASS_END(LICM, "licm", "Loop Invariant Code Motion", false, false)
Howerver, I got an infinite loop when trying
opt -O3 t.bc -o out.bc
Where t.bc is created using clang from
int main() { return 0; }
What am I missing ?
All files are attacahed (include/Analysis/MyAnalysis.h,
lib/Analysis/MyAnanlysis.cpp, and diffs to the existing files).
Thanks
Junjie
MyAnalysis.cpp (158 Bytes)
MyAnalysis.h (451 Bytes)
myana.diff (3.07 KB)