[llvm-dev] Make MachineLICM PostRA (or PreRa) work only on the inner loop for a loop nest

Alex Susu via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 24 04:56:56 PST 2017

     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,

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

More information about the llvm-dev mailing list