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 > > >