<div class="socmaildefaultfont" dir="ltr"
style="font-family:Arial, Helvetica, sans-serif;font-size:10.5pt"
><div dir="ltr" >Hi all,</div>
<div dir="ltr" > </div>
<div dir="ltr" >As part of the out-of-tree backend which I am
developing, I'd like to implement an analysis pass that runs prior to RA and
is then consumed post-RA. It needs to run before RA because it makes use of
virtual registers and SSA, but the transformation pass using it operates on
physical registers, so it must run post-RA. I can schedule the pass to run preRA
and it works just fine, but the problem is that the PassManager assumes it to be
invalidated between this initial run and it's consumption, and so schedules
it to run again immediately before its consumption. This second run of the pass
fails because the required virtual register information is no longer
available.</div>
<div dir="ltr" > </div>
<div dir="ltr" >The particular analysis my pass does is known
not to be invalidated by any of the passes between it's initial scheduled
run and its consumption. Is there any way to convey this information to the
PassManager, without modifying all intervening passes? Or is there a known
solution to the general problem of using pre-RA analysis in a postRA pass? Can
anyone point me to an example in one of the existing targets?</div>
<div dir="ltr" > </div>
<div dir="ltr" >I can make it work using static variables and
early exit if its scheduled post-RA, e.g.:</div>
<div dir="ltr" > </div>
<div dir="ltr" >struct MyAnalysis : public MachineFunctionPass
{</div>
<div dir="ltr" > </div>
<div dir="ltr" >   static MyStruct MyAnalysisData;</div>
<div dir="ltr" >   static char ID;</div>
<div dir="ltr" > </div>
<div dir="ltr" >    ....</div>
<div dir="ltr" > </div>
<div dir="ltr" >    bool runOnMachineFunction(MachineFunction
&MF) override {</div>
<div dir="ltr" > </div>
<div dir="ltr" >       if (isPostRa())</div>
<div dir="ltr" >          return false;</div>
<div dir="ltr" > </div>
<div dir="ltr" >       MyAnalysisData =
doAnalysis(MF);</div>
<div dir="ltr" >       return false;</div>
<div dir="ltr" >};</div>
<div dir="ltr" > </div>
<div dir="ltr" > </div>
<div dir="ltr" >... but I don't think this is recommended.
Any feedback would be greatly appreciated.</div>
<div dir="ltr" > </div>
<div dir="ltr" >Thanks,</div>
<div dir="ltr" >Tyler</div></div><BR>