[PATCH] D101187: [MachineCSE] Prevent CSE of non-local convergent instrs
    Michael Kitzan via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Apr 23 11:02:52 PDT 2021
    
    
  
mkitzan created this revision.
mkitzan added reviewers: rtereshin, dsanders.
Herald added a subscriber: hiraditya.
mkitzan requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
At the moment, `MachineCSE` allows CSE-ing convergent instrs which are non-local to each other. This can cause illegal codegen as convergent instrs are control flow dependent. The patch prevents non-local CSE of convergent instrs by adding a check in `isProfitableToCSE` and rejecting CSE-ing if we're considering CSE-ing non-local convergent instrs. We can still CSE convergent instrs which are in the same control flow scope, so the patch purposely does not make all convergent instrs non-CSE candidates in `isCSECandidate`.
Repository:
  rG LLVM Github Monorepo
https://reviews.llvm.org/D101187
Files:
  llvm/lib/CodeGen/MachineCSE.cpp
Index: llvm/lib/CodeGen/MachineCSE.cpp
===================================================================
--- llvm/lib/CodeGen/MachineCSE.cpp
+++ llvm/lib/CodeGen/MachineCSE.cpp
@@ -433,6 +433,11 @@
                                    MachineBasicBlock *CSBB, MachineInstr *MI) {
   // FIXME: Heuristics that works around the lack the live range splitting.
 
+  MachineBasicBlock *BB = MI->getParent();
+  // Prevent CSE-ing non-local convergent instructions.
+  if (MI->isConvergent() && CSBB != BB)
+    return false;
+
   // If CSReg is used at all uses of Reg, CSE should not increase register
   // pressure of CSReg.
   bool MayIncreasePressure = true;
@@ -455,7 +460,6 @@
   // an immediate predecessor. We don't want to increase register pressure and
   // end up causing other computation to be spilled.
   if (TII->isAsCheapAsAMove(*MI)) {
-    MachineBasicBlock *BB = MI->getParent();
     if (CSBB != BB && !CSBB->isSuccessor(BB))
       return false;
   }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101187.340107.patch
Type: text/x-patch
Size: 970 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210423/2c9c3b13/attachment.bin>
    
    
More information about the llvm-commits
mailing list