Hi> Right it does. However, does something *else* require MParSchedule? If
> so, what?
Ok, i am writing on a different backend based on the cbackend.
The test usage of this pass looks like this:
void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<LoopInfo>();
AU.addRequired<MParSchedule>();
AU.setPreservesAll();
}
and then in the runOnFunction pass of this backend:
LI = &getAnalysis<LoopInfo>();
MParSchedule &MPar = getAnalysis<MParSchedule>();
lowerIntrinsics(F);
printFloatingPointConstants(F);
F.renameLocalSymbols();
list<Schedule *>* ScheduleList;
Schedule *currentSchedule;
for (Function::iterator i = F.begin(), e = F.end(); i != e; ++i) {
for(BasicBlock::iterator j=i->begin(),bbe=i->end();j!=bbe;++j) {
BasicBlock *bb;
if((bb=dyn_cast<BasicBlock>(j))) {
ScheduleList=MPar.lookupBasicBlock(bb);
if(ScheduleList) {
cerr<<"Schedule List:
"<<bb->getName()<<endl;
for(list<Schedule*>::iterator
lsi=ScheduleList->begin(),lse=ScheduleList->end();lsi!=lse;++lsi) {
cerr<<(*lsi)->cycle<<"
"<<(*(*lsi)->instr);
}
cerr<<endl;
} else cerr<<"Schedule not found"<<endl;
} else cerr<<"Instruction not a basic
block"<<endl;
}
}
return false;
Compiling and linking works fine but
llc -f -march my_backend a.out.bc
gives this error:
llc: PassManagerT.h:387: void
llvm::PassManagerT<Trait>::markPassUsed(const
llvm::PassInfo*, llvm::Pass*) [with Trait = llvm::MTraits]: Assertion
`getAnalysisOrNullUp(P) &&
dynamic_cast<ImmutablePass*>(getAnalysisOrNullUp(P)) && "Pass
available but
not found! " "Perhaps this is a module pass requiring a function
pass?"'
failed.
llc((anonymous namespace)::PrintStackTrace()+0x1f)[0x880791f]
/lib/tls/libc.so.6(abort+0x1d2)[0xb7da7fa2]
/lib/tls/libc.so.6(__assert_fail+0x10f)[0xb7da02df]
llc(llvm::PassManagerT<llvm::MTraits>::markPassUsed(llvm::PassInfo const*,
llvm::Pass*)+0xf6)[0x8736c36]
Aborted
Poking around i tried to inherit the MParSchedule Pass from ImmutablePass then
i get an different error:
llc: /work0/tstone/llvm-1.7/include/llvm/Pass.h:185: AnalysisType&
llvm::Pass::getAnalysisID(const llvm::PassInfo*) const [with AnalysisType =
llvm::FindUsedTypes]: Assertion `i != AnalysisImpls.size() &&
"getAnalysis*()
called on an analysis that was not " "'required' by
pass!"' failed.
llc((anonymous namespace)::PrintStackTrace()+0x1f)[0x8807aaf]
/lib/tls/libc.so.6(abort+0x1d2)[0xb7d98fa2]
/lib/tls/libc.so.6(__assert_fail+0x10f)[0xb7d912df]
llc(llvm::FindUsedTypes&
llvm::Pass::getAnalysisID<llvm::FindUsedTypes>(llvm::PassInfo const*)
const+0xa5)[0x8173da5]
[0x8995e54]
make: *** [a.out.s] Aborted
Thanks for your help
ST