<div dir="ltr"><div dir="ltr"><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">> Well for ORCV2 there is no change before and after.<br>Okay I had to put the after dump following MPM->run(*M).<br>So now I get optimized IR.</blockquote><div><br></div><div>Huh. I assumed FPM->run(F) actually ran the function passes. I may just be misunderstanding how the pass manager works.</div><div><br></div><div>-- Lang.</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 13, 2019 at 3:11 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">On Tue, 13 Aug 2019 at 22:58, Dibyendu Majumdar <<a href="mailto:mobile@majumdar.org.uk" target="_blank">mobile@majumdar.org.uk</a>> wrote:<br>
><br>
> On Tue, 13 Aug 2019 at 22:03, Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>> wrote:<br>
> > 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?<br>
> ><br>
> > What do you see if you dump the modules before/after running the pass manager on them, like this:<br>
> ><br>
> > dbgs() << "Before optimization:\n" << *M << "\n";<br>
> > for (auto &F : *M)<br>
> >   FPM->run(F);<br>
> > dbgs() << "Before optimization:\n" << *M << "\n";<br>
> ><br>
> > I expect that output to be the same for both ORC and ORCv2. If not something is going wrong with IR optimization.<br>
><br>
> Well for ORCV2 there is no change before and after.<br>
<br>
Okay I had to put the after dump following MPM->run(*M).<br>
So now I get optimized IR.<br>
<br>
> I also get this message:<br>
><br>
> JIT session error: Symbols not found: { raise_error }<br>
><br>
<br>
So this must be real issue. IR is getting optimized but then codegen is failing.<br>
<br>
> Yes raise_error and all other extern functions are explicitly added as<br>
> global symbols.<br>
><br>
> ><br>
> > 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.<br>
> ><br>
> > What happens if you make the following modification to your setup?<br>
> ><br>
> > auto JTMB = llvm::orc::JITTargetMachineBuilder::detectHost();<br>
> > JTMB->setCodeGenOptLevel(CodeGenOpt::Default); // <-- Explicitly set Codegen opt level<br>
> > auto dataLayout = JTMB->getDefaultDataLayoutForTarget();<br>
> ><br>
><br>
> No change.<br>
><br>
> Regards<br>
</blockquote></div>