A question about the pass manager infrastructure

Hi,

I am writing a pass A inheriting the CallGraphSCCPass.
And the getAnalysisUsage () is as below:

virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
CallGraphSCCPass::getAnalysisUsage(AU);
AU.addRequired();

AU.addRequired();
AU.addRequired();
AU.addPreserved();
AU.addPreservedID(MachineDominatorsID);

}

However, this pass can not be scheduled by the current pass manager infrastructure (I am using llvm 3.4), the output is as follows:

image.png
After single-step debugging, I found that it is caused by the PMDataManager::addLowerLevelRequiredPass function.
This virtual function is only implemented by MPPassManager right now.
However, for pass A, since a CallGraphSCCPass requires passes at a lower level, like LiveStacksPass, it triggers the PMDataManager::addLowerLevelRequiredPass function, which should be “unreachable”.

Could some one help me with it?

Thanks in advance!