Alex Susu via llvm-dev
2017-Feb-22 07:05 UTC
[llvm-dev] Make MachineLICM PostRA (or PreRa) work only on the inner loop for a loop nest
Hello.
I am curious if I can make the MachineLICM transformation work only on the
inner loop
when it encounters a loop nest in the program.
I've started examining the source code of the pass -
http://llvm.org/docs/doxygen/html/MachineLICM_8cpp_source.html . I found
comments like
<<// If this is done before regalloc, only visit outer-most
preheader-sporting // loops>>.
I'll come back if I find a solution.
Thank you very much,
Alex
Alex Susu via llvm-dev
2017-Feb-24 12:56 UTC
[llvm-dev] Make MachineLICM PostRA (or PreRa) work only on the inner loop for a loop nest
Hello.
I found a solution to this problem I asked about - make MachineLICM pre-RA
(or
post-RA, in principle) work only on the inner loop for a loop nest. Basically, I
had to
change the code of MachineLICM.cpp, by adding in method
MachineLICM::HoistOutOfLoop(MachineDomTreeNode *HeaderN)
in the loop:
for (MachineDomTreeNode *Node : Scopes) {
MachineBasicBlock *MBB = Node->getBlock();
...
}
some extra code that checks if MBB has name "vector.body", which is
the inner loop that
I care about, and in such case I set Preheader variable defined there to be the
predecessor of vector.body, normally called "vector.ph".
If you want I can provide the exact code patch.
Since these are the only cases I care about, namely loops (or loop nests)
resulted
from the LoopVectorize LLVM module, this small patch serves well.
So, I could not employ the command-line arguments of llc and had to adapt
the code of
the MachineLICM pass.
Best regards,
Alex
On 2/22/2017 9:05 AM, Alex Susu wrote:> Hello.
> I am curious if I can make the MachineLICM transformation work only on
the inner loop
> when it encounters a loop nest in the program.
>
> I've started examining the source code of the pass -
> http://llvm.org/docs/doxygen/html/MachineLICM_8cpp_source.html . I found
comments like
> <<// If this is done before regalloc, only visit outer-most
preheader-sporting // loops>>.
> I'll come back if I find a solution.
>
> Thank you very much,
> Alex
>
>
>