<div dir="ltr"><div class="gmail_default" style="font-family:'courier new',monospace">Hi </div><div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">
I am modifying LLVM to enable runtime feedback directed optimizations. I have modified the instrumentation part of LLVM to keep instrumentation data in some pre-setup structures in memory and use the JIT to recompile some of the hot functions with profiling information.</div>
<div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">I need an analysis pass which loads the profiling data in memory and can be used by different optimization passes in LLVM, e.g. loopunroller, inliner, basicblockplacement, etc . Currently, I have an analysis pass that derives from a functionpass that loads the instrumentation data in memory and the basicblockplacement pass can then use that data as guide to place the blocks. </div>
<div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">However, when i add the same pass as an analysis dependence to the loopunroller, i get some kind of infinite loop when the passes are scheduled here.</div>
<div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">I would like to know is it allowed in LLVM to have a LoopPass depending on a FunctionPass ? </div>
<div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">/// Schedule pass P for execution. Make sure that passes required by</font></div>
<div class="gmail_default"><font face="courier new, monospace">/// P are run before P is run. Update analysis info maintained by</font></div><div class="gmail_default"><font face="courier new, monospace">/// the manager. Remove dead passes. This is a recursive function.</font></div>
<div class="gmail_default"><font face="courier new, monospace">void PMTopLevelManager::schedulePass(Pass *P) {</font></div><div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">
        ....</div></div><div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default"><font face="courier new, monospace">        else if (P->getPotentialPassManagerType () ></font></div>
<div class="gmail_default"><font face="courier new, monospace">                 AnalysisPass->getPotentialPassManagerType()) {</font></div><div class="gmail_default"><font face="courier new, monospace">      */// INFINITE LOOP HERE. maybe because </font><span style="font-family:'courier new',monospace">checkAnalysis</span><span style="font-family:'courier new',monospace">  is set to true for some reasons not very clear based on the comments.</span><span style="font-family:'courier new',monospace"> *   </span></div>
<div class="gmail_default"><font face="courier new, monospace">    printf("Analysis Pass Name is %s\n", AnalysisPass->getPassName());</font></div><div class="gmail_default"><font face="courier new, monospace">          // Schedule analysis pass that is managed by a new manager.</font></div>
<div class="gmail_default"><font face="courier new, monospace">          schedulePass(AnalysisPass);</font></div><div class="gmail_default"><font face="courier new, monospace">          // Recheck analysis passes to ensure that required analyses that</font></div>
<div class="gmail_default"><font face="courier new, monospace">          // are already checked are still available.</font></div><div class="gmail_default"><font face="courier new, monospace">          checkAnalysis = true;</font></div>
<div class="gmail_default" style="font-family:'courier new',monospace"> };</div><div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default" style="font-family:'courier new',monospace">
Thank you,</div><div class="gmail_default" style="font-family:'courier new',monospace">Trent</div></div>