<div dir="ltr">Hi,<div><br></div><div>I am writing a pass A inheriting the CallGraphSCCPass.</div><div><b>And the getAnalysisUsage () is as below:<br></b><div><b>   virtual void getAnalysisUsage(AnalysisUsage &AU) const {</b></div><div><b>      AU.setPreservesCFG();    </b></div><div><b><span style="white-space:pre">   </span>  CallGraphSCCPass::getAnalysisUsage(AU);</b></div><div><b>     AU.addRequired<AliasAnalysis>();</b></div><div><b><span class="" style="white-space:pre">       </span> </b></div><div><b>      AU.addRequired<LiveStacks>();</b></div><div><b>      AU.addRequired<MachineBlockFrequencyInfo>();</b></div><div><b>      AU.addPreserved<MachineBlockFrequencyInfo>();</b></div><div><b>      AU.addPreservedID(MachineDominatorsID);</b></div><div><b>      </b></div><div><b>    }</b></div><div><br></div><div>However, this pass can not be scheduled by the current pass manager infrastructure (I am using llvm 3.4), the output is as follows:</div><div> <br></div><div><img src="cid:ii_149cc44040ff9994" alt="内嵌图片 1" width="559" height="311"><br>After single-step debugging, I found that it is caused by the PMDataManager::addLowerLevelRequiredPass function.</div><div>This virtual function is only implemented by MPPassManager right now.</div><div>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".</div><div><br></div><div>Could some one help me with it?</div><div><br></div><div>Thanks in advance!</div><div><br></div><div> <br></div><div class="gmail_signature">Best regards,<div><br></div><div>Li Qingan</div></div>
</div></div>