<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Dibyendu,<div><br></div><div>A couple of notes to simplify your code. The following:</div><div><br></div><div><div><font face="monospace">#if USE_ORCv2_JIT</font></div><div><font face="monospace">    auto FPM = llvm::make_unique<FunctionPassManager>(TSM.getModule());</font></div><div><font face="monospace">#else</font></div><div><font face="monospace">    std::unique_ptr<FunctionPassManager> FPM(new FunctionPassManager(M.get()));</font></div><div><font face="monospace">#endif</font></div></div><div><br></div><div>can be reduced to</div><div><br></div><div><font face="monospace">auto FPM = llvm::make_unique<FunctionPassManager>(&*M);</font></div><div><br></div><div>since M must be non-null.</div><div><br></div><div>Likewise, this:</div><div><br></div><div><div><font face="monospace">#if USE_ORCv2_JIT</font></div><div><font face="monospace">    for (auto &F : *TSM.getModule())</font></div><div><font face="monospace">      FPM->run(F);</font></div><div><font face="monospace">#else</font></div><div><font face="monospace">    for (auto &F : *M)</font></div><div><font face="monospace">      FPM->run(F);</font></div><div><font face="monospace">#endif</font></div></div><div><br></div><div>can be reduced to</div><div><br></div><div><font face="monospace">for (auto &F : *M)</font></div><div><font face="monospace">  FPM->run(F);</font></div><div><br></div><div>When you say your code is not getting optimized, do you mean that IR optimizations are not being applied, or that codegen optimizations are not being applied?</div><div><br></div><div>What do you see if you dump the modules before/after running the pass manager on them, like this:</div><div><br></div><div><font face="monospace">dbgs() << "Before optimization:\n" << *M << "\n";</font></div><div><div><font face="monospace">for (auto &F : *M)</font></div><div><font face="monospace">  FPM->run(F);</font></div></div><div><div><font face="monospace">dbgs() << "Before optimization:\n" << *M << "\n";</font></div><div></div></div><div><font face="monospace"><br></font></div><div>I expect that output to be the same for both ORC and ORCv2. If not something is going wrong with IR optimization.<br></div><div><br></div><div>CodeGen optimization seems a more likely culprit: JITTargetMachineBuilder and ExecutionEngineBuilder have different defaults for their CodeGen opt-level. JITTargetMachineBuilder defaults to CodeGenOpt::None, and ExecutionEngineBuilder default to CodeGenOpt::Default.</div><div><br></div><div>What happens if you make the following modification to your setup?</div><div><br></div><div><div><font face="monospace">auto JTMB = llvm::orc::JITTargetMachineBuilder::detectHost();</font></div><div><font face="monospace"><i>JTMB->setCodeGenOptLevel(CodeGenOpt::Default); // <-- Explicitly set Codegen opt level</i></font></div><div><font face="monospace">auto dataLayout = JTMB->getDefaultDataLayoutForTarget();</font></div></div><div><br></div><div>Hopefully one of these approaches helps. If not let me know and we can dig deeper -- I would like to help you to get this working.</div><div><br></div><div>Cheers,</div><div>Lang.</div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 13, 2019 at 1:10 PM Dibyendu Majumdar <<a href="mailto:mobile@majumdar.org.uk">mobile@majumdar.org.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Lang,<br>
<br>
On Tue, 13 Aug 2019 at 20:47, Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>> wrote:<br>
><br>
> Sorry for the delayed reply. Looks like you have figured out how to solve your issue already. Out of interest, what did you need to do? Do you have anything that you would like to see added to <a href="http://llvm.org/docs/ORCv2.html" rel="noreferrer" target="_blank">http://llvm.org/docs/ORCv2.html</a> ?<br>
><br>
<br>
Sorry my post was misleading. I figured out below which was part of the problem.<br>
Code is still not getting optimized at all. I don't really know what<br>
is going on.<br>
<br>
Yet the same setup works fine with the Legacy ORC v1 setup.<br>
<br>
Any help is appreciated.<br>
<br>
Here are again the links to the relevant code:<br>
<br>
<a href="https://github.com/dibyendumajumdar/ravi/blob/master/include/ravi_llvmcodegen.h" rel="noreferrer" target="_blank">https://github.com/dibyendumajumdar/ravi/blob/master/include/ravi_llvmcodegen.h</a><br>
<a href="https://github.com/dibyendumajumdar/ravi/blob/master/src/ravi_llvmjit.cpp" rel="noreferrer" target="_blank">https://github.com/dibyendumajumdar/ravi/blob/master/src/ravi_llvmjit.cpp</a><br>
<br>
Just look sections marked USE_ORCv2_JIT.<br>
<br>
>> > Optimize Module is just a function object.<br>
>> ><br>
>><br>
>> Thank you - I fixed that now.<br>
<br>
Regards<br>
Dibyendu<br>
</blockquote></div>