<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Nov 16, 2011, at 2:43 AM, Pankaj Gode wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-family: 'Courier New', courier, monaco, monospace, sans-serif; font-size: 10pt; position: static; z-index: auto; "><div style="RIGHT: auto">In order to detect whether CallSite is present in innermost loop, do I need to insert logic from LoopInfo pass for collecting loops, within a CallGraphSCC pass? </div>
<div style="RIGHT: auto"> </div>
<div style="RIGHT: auto">Is there any other approach for this?<var id="yui-ie-cursor"></var></div>
<div style="RIGHT: auto"><br></div></div></div></blockquote><br></div><div>PassManager not only schedules passes, it also </div><div><span class="Apple-tab-span" style="white-space:pre">   </span>- manages memory</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>- ensures that analysis info is valid at the point of use</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>- eliminates redundant calculation of analysis</div><div><span class="Apple-tab-span" style="white-space: pre; ">       </span>- automatically schedule other required passes</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>- takes responsibility of walking program construct. For example, a LoopPass does not need to worry about how to walk loop nest. A FunctionPass does not worry about in which order the functions are processed. </div><div><br></div><div>Right now, CallGraph pass manager is not equipped to satisfy these requirements at loop level. You could certainly extend the PassManager, but it is not structured and designed to support such scenarios.</div><div><br></div><div>That does not mean you can not use LoopInfo in your pass. It means, you'll have to manage the memory, satisfy its needs and ensure validity of the info yourself. You could do something like,</div><div><br></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">       </span>LoopInfo LI;</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">   </span>DominatorTree DT;</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><br></font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">       </span>....</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">   </span>DT.recalculate(F)</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">      </span>LI.Calculate(DT.getBase());</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">    </span>...</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">    </span>... use LI ...  /* Make sure F is not modified since DT and LI were calculate. */</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre"> </span>...</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">    </span>DT.releaseMemory();</font></div><div><font class="Apple-style-span" face="Menlo" style="font-size: 11px;"><span class="Apple-tab-span" style="white-space:pre">    </span>LI.releaseMemory();</font></div><div><br></div><div>-</div><div>Devang</div></body></html>