<div dir="ltr">Frank,<div><br></div><div>Perhaps someone more knowledgeable will shoot this approach down, but what I do for this case is copy the module after running the function pass manager and pass it through:</div><div>
<br></div><div><div>    const string extension = fileName.substr(fileName.find_last_of(".") + 1);</div><div>    string errorInfo;<br></div><div>    tool_output_file output(fileName.c_str(), errorInfo, sys::fs::F_None);</div>
<div>    PassManager pm;</div><div>    formatted_raw_ostream fos(output.os());</div><div>    targetMachine->addPassesToEmitFile(pm, fos, extension == "s" ? TargetMachine::CGFT_AssemblyFile : TargetMachine::CGFT_ObjectFile);</div>
<div>    pm.run(*module);</div></div><div><br></div><div>This code was basically taken from `llc` and I believe MCJIT does essentially (exactly?) the same thing.</div><div><br></div><div>-Josh</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Fri, Mar 7, 2014 at 4:23 PM, Frank Winter <span dir="ltr"><<a href="mailto:fwinter@jlab.org" target="_blank">fwinter@jlab.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there a way to capture the assembler when using MCJIT? I was searching the lists and this popped up:<br>
<br>
<a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-March/047873.html" target="_blank">http://lists.cs.uiuc.edu/<u></u>pipermail/llvmdev/2012-March/<u></u>047873.html</a><br>
<br>
However this is quite elaborate and I was wondering if there's not an easier way to do this..?!<br>
<br>
The setup I am using:<br>
<br>
    llvm::InitializeNativeTarget()<u></u>;<br>
    InitializeNativeTargetAsmPrint<u></u>er(); // MCJIT<br>
    InitializeNativeTargetAsmParse<u></u>r(); // MCJIT<br>
<br>
    Mod = llvm::ParseIRFile( INPUT_FILE , Err, llvm::getGlobalContext());<br>
<br>
    Mod->setTargetTriple(llvm::<u></u>sys::getProcessTriple());<br>
<br>
    llvm::EngineBuilder engineBuilder(Mod);<br>
    engineBuilder.setEngineKind(<u></u>llvm::EngineKind::JIT);<br>
engineBuilder.setOptLevel(<u></u>llvm::CodeGenOpt::Aggressive);<br>
    TheExecutionEngine = engineBuilder.setUseMCJIT(<u></u>true).create(); // MCJIT<br>
<br>
    targetMachine = engineBuilder.selectTarget();<br>
<br>
    mainFunc = Mod->getFunction("main");<br>
<br>
    llvm::FunctionPassManager *functionPassManager;<br>
<br>
    llvm::PassRegistry &registry = *llvm::PassRegistry::<u></u>getPassRegistry();<br>
    initializeScalarOpts(registry)<u></u>;<br>
<br>
    functionPassManager = new llvm::FunctionPassManager(Mod)<u></u>;<br>
functionPassManager->add(llvm:<u></u>:createVerifierPass(llvm::<u></u>PrintMessageAction));<br>
targetMachine-><u></u>addAnalysisPasses(*<u></u>functionPassManager);<br>
    functionPassManager->add(new llvm::TargetLibraryInfo(llvm::<u></u>Triple(Mod->getTargetTriple())<u></u>));<br>
    functionPassManager->add(new llvm::DataLayout(Mod));<br>
functionPassManager->add(llvm:<u></u>:createBasicAliasAnalysisPass(<u></u>));<br>
    functionPassManager->add(llvm:<u></u>:createLICMPass());<br>
    functionPassManager->add(llvm:<u></u>:createGVNPass());<br>
functionPassManager->add(llvm:<u></u>:<u></u>createPromoteMemoryToRegisterP<u></u>ass());<br>
functionPassManager->add(llvm:<u></u>:createLoopVectorizePass());<br>
functionPassManager->add(llvm:<u></u>:createEarlyCSEPass());<br>
functionPassManager->add(llvm:<u></u>:<u></u>createInstructionCombiningPass<u></u>());<br>
functionPassManager->add(llvm:<u></u>:createCFGSimplificationPass()<u></u>);<br>
<br>
    functionPassManager->run(*<u></u>mainFunc);<br>
<br>
    TheExecutionEngine-><u></u>finalizeObject();  // MCJIT<br>
<br>
    void *fptr = TheExecutionEngine-><u></u>getPointerToFunction( mainFunc );<br>
<br>
<br>
Thanks,<br>
Frank<br>
<br>
______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvmdev</a><br>
</blockquote></div><br></div>