[llvm-branch-commits] LiveRangeShrink: Early exit when encountering a code motion barrier. (PR #136806)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Apr 23 02:54:09 PDT 2025


================
@@ -95,14 +95,24 @@ static MachineInstr *FindDominatedInstruction(MachineInstr &New,
   return Old;
 }
 
+static bool isCodeMotionBarrier(MachineInstr &MI) {
+  return MI.hasUnmodeledSideEffects() && !MI.isPseudoProbe();
+}
+
 /// Builds Instruction to its dominating order number map \p M by traversing
 /// from instruction \p Start.
 static void BuildInstOrderMap(MachineBasicBlock::iterator Start,
                               InstOrderMap &M) {
   M.clear();
   unsigned i = 0;
-  for (MachineInstr &I : make_range(Start, Start->getParent()->end()))
+  bool SawStore = false;
+  for (MachineInstr &I : make_range(Start, Start->getParent()->end())) {
+    if (I.mayStore())
+      SawStore = true;
+    if (!I.isSafeToMove(SawStore) && isCodeMotionBarrier(I))
----------------
arsenm wrote:

The MI.hasUnmodeledSideEffects() is redundant with the isSafeToMove check?

https://github.com/llvm/llvm-project/pull/136806


More information about the llvm-branch-commits mailing list