hi John,<br><br>sorry for reply so late.<br><br><div class="gmail_quote">On Tue, Apr 13, 2010 at 10:38 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@uiuc.edu">criswell@uiuc.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><div></div><div class="h5">Devang Patel wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
On Mon, Apr 12, 2010 at 6:41 PM, ether zhhb <<a href="mailto:etherzhhb@gmail.com" target="_blank">etherzhhb@gmail.com</a>> wrote:<br>
<br>
  <br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
that's because FunctionPass implement the "addLowerLevelRequiredPass"<br>
function, but others not.<br>
<br>
so, is there any special reason that only "addLowerLevelRequiredPass" is<br>
allow?<br>
<br>
    <br>
</blockquote>
<br>
There is no reason to not allow it. It is not done because there was<br>
not any use. If you need this then pl. prepare a patch!<br>
  <br>
</blockquote>
<br></div></div>
Alternatively, if you wrote the BasicBlock analysis pass, you could easily modify it to be a FunctionPass.<br></blockquote><div>yep, if we just concerning use BB pass in Function pass, we can just change it into a Function pass. (In fact, i had do something like this before :) ) <br>
<br>But the problem is, sometimes, the BB pass PassA use by some Function pass requires others BB pass for analysis result, so we had to rewrite all the passes required by PassA to Function pass, so that PassA can get the analysis :(<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Currently, I think this is a better alternative because:<br>
<br>
1) It doesn't require patching LLVM (meaning that your passes can work with LLVM 2.7) </blockquote><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

2) You will get better reusability of the analysis results.  When a higher level pass calls a lower level pass (e.g., ModulePass calls FunctionPass), the lower level pass is run again, even if it was run previously and did not have its analysis results invalidated.  If the passes are of the same level (e.g., FunctionPass requires FunctionPass), then the PassManager can avoid duplicate runs of the analysis pass if its results are not invalidated.<br>
</blockquote><div>yep, this make sense. <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
-- John T.<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
-<br>
Devang<br>
  <br>
</blockquote>
<br></blockquote><div>best regards<br>--ether <br></div></div><br>