I found that : "Code generator passes are registered and initialized specially by
<tt class="docutils literal"><span class="pre">TargetMachine::addPassesToEmitFile</span></tt> and similar routines, so they cannot
generally be run from the <strong class="program">opt</strong> or <strong class="program">bugpoint</strong> commands."...So how I can run a MachineFunctionPass? In the end, I just want to apply a DFS on a CFG of a function. And I need oriented edges and wanted to use MachineBasicBlock::const_succ_iterator. It is there a way to get the CFG with oriented edges by using a FunctionPass?<br>
<br>Thank you !<br><br><div class="gmail_quote">On Fri, Mar 15, 2013 at 1:30 PM, Alexandru Ionut Diaconescu <span dir="ltr"><<a href="mailto:alexandruionutdiaconescu@gmail.com" target="_blank">alexandruionutdiaconescu@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello everyone,<br><br>I have written several complex passes till now, but I cannot write a MachineFunctionPass pass. It just gives me segfault. Hence I reduced the pass to the following form :<br>
<br><br>using namespace llvm;<br>

<br>namespace {<br>  class CFGexplorator : public MachineFunctionPass {<br>  public:<br>    static char ID; // Pass identification, replacement for typeid<br>    CFGexplorator() : MachineFunctionPass(ID) {<br>      //initializeMemDepPrinterPass(*PassRegistry::getPassRegistry());<br>


    }<br><br>  private:<br>    virtual bool runOnMachineFunction(MachineFunction &MF);<br><br>    virtual void getAnalysisUsage(AnalysisUsage &AU) const {<br>      MachineFunctionPass::getAnalysisUsage(AU);<br>    }<br>


  };<br>} // end anonymous namespace<br><br>char CFGexplorator::ID = 0;<br>static RegisterPass<CFGexplorator> Y("mycfg", "mycfg", false, false);<br><br>bool CFGexplorator::runOnMachineFunction(MachineFunction &MF) { <br>


return false;<br>}<br><br><br><br>I get the error : <br>Pass 'mycfg' is not initialized.<br>Verify if there is a pass dependency cycle.<br>Required Passes:<br>opt: PassManager.cpp:638: void llvm::PMTopLevelManager::schedulePass(llvm::Pass*): Assertion `PI && "Expected required passes to be initialized"' failed.<br>


<br><br>So I have to initialize the pass. But in my all other passes I did not any initialization and I don't want to use INITIALIZE_PASS since I have to recompile the llvm file that is keeping the pass registration... Is there a way to keep using static RegisterPass for a MachineFunctionPass ? I mention that if I change to FunctionPass, I have no problems and that is weird..<br>

<br>Thank you for any advice !<br>
<br><br><br>
</blockquote></div><br><br clear="all"><br>-- <br><font style="background-color:rgb(255,255,255);color:rgb(153,153,153)">Best regards,</font><br style="background-color:rgb(255,255,255);color:rgb(153,153,153)"><font style="background-color:rgb(255,255,255);color:rgb(153,153,153)">Alexandru Ionut Diaconescu</font><br>