Hi, First, please send any replies to me separately, as I am not on the list. I'm trying to run a very simple LLVM pass as a start on a class project. It compiles fine, but I get a runtime assertion when running the pass. I'll paste the error and cpp file below, but basically I'm being told that I haven't specified a required pass. However, I've looked at some example files, and i _think_ I'm doing stuff right. Do I have to run the getAnalysisUsage function manually (I'm subclassing FunctionPass), or can I trust it's called before runOnFunction if I implement it? Any help is greatly appreciated, Nadir Kiyanclar kiyancla at uiuc.edu The command I use (licm is the pass I'm writing) ========================opt -load ../../../lib/Debug/liblicm.so -licm < loop1.bc > loop1.aftermypass.bc The assertion: =====================================opt: /usr/dcs/csil-linux/projects/cs326/kiyancla/llvm/include/llvm/Pass.h:182: AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const [with AnalysisType = llvm::LoopInfo]: Assertion `i !AnalysisImpls.size() && "getAnalysis*() called on an analysis that we not " "'required' by pass!"' failed. Aborted (core dumped) finally, the cpp file: (sorry about the extraneous includes) =================================#include "llvm/Transforms/Scalar.h" #include "llvm/Function.h" #include "llvm/Pass.h" #include "llvm/PassAnalysisSupport.h" #include "llvm/Function.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Support/CFG.h" #include "llvm/Module.h" #include "llvm/Instruction.h" #include "Support/PostOrderIterator.h" #include <iostream> using namespace llvm; namespace { class LICM : public FunctionPass { public: void getAnalysisUsage(AnalysisUsage &AU){ AU.setPreservesCFG(); AU.addRequiredID(LoopSimplifyID); AU.addRequired<DominatorTree>(); AU.addRequired<LoopInfo>(); } bool runOnFunction(Function &F); }; RegisterOpt<LICM> Z("licm","Nadir Kiyanclar's code motion pass for cs326, MP3"); bool LICM::runOnFunction(Function &F){ LoopInfo &LI = getAnalysis<LoopInfo>(); return false; } }