[PATCH] D134044: [ConstraintElimination] Move logic for replacing ssub overflow users (NFC)

Zain Jaffal via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 4 04:15:36 PDT 2022


zjaffal updated this revision to Diff 464950.
zjaffal added a comment.

rebase on top of main to fix failing tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134044/new/

https://reviews.llvm.org/D134044

Files:
  llvm/lib/Transforms/Scalar/ConstraintElimination.cpp


Index: llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -669,6 +669,31 @@
   }
 }
 
+static void replaceSubOverflowUses(IntrinsicInst *II, Value *A, Value *B,
+                                   SmallVectorImpl<Instruction *> &ToRemove) {
+  IRBuilder<> Builder(II->getParent(), II->getIterator());
+  Value *Sub = nullptr;
+  for (User *U : make_early_inc_range(II->users())) {
+    if (match(U, m_ExtractValue<0>(m_Value()))) {
+      if (!Sub)
+        Sub = Builder.CreateSub(A, B);
+      U->replaceAllUsesWith(Sub);
+    } else if (match(U, m_ExtractValue<1>(m_Value())))
+      U->replaceAllUsesWith(Builder.getFalse());
+    else
+      continue;
+
+    if (U->use_empty()) {
+      auto *I = cast<Instruction>(U);
+      ToRemove.push_back(I);
+      I->setOperand(0, PoisonValue::get(II->getType()));
+    }
+  }
+
+  if (II->use_empty())
+    II->eraseFromParent();
+}
+
 static void
 tryToSimplifyOverflowMath(IntrinsicInst *II, ConstraintInfo &Info,
                           SmallVectorImpl<Instruction *> &ToRemove) {
@@ -692,28 +717,7 @@
         !DoesConditionHold(CmpInst::ICMP_SGE, B,
                            ConstantInt::get(A->getType(), 0), Info))
       return;
-
-    IRBuilder<> Builder(II->getParent(), II->getIterator());
-    Value *Sub = nullptr;
-    for (User *U : make_early_inc_range(II->users())) {
-      if (match(U, m_ExtractValue<0>(m_Value()))) {
-        if (!Sub)
-          Sub = Builder.CreateSub(A, B);
-        U->replaceAllUsesWith(Sub);
-      } else if (match(U, m_ExtractValue<1>(m_Value())))
-        U->replaceAllUsesWith(Builder.getFalse());
-      else
-        continue;
-
-      if (U->use_empty()) {
-        auto *I = cast<Instruction>(U);
-        ToRemove.push_back(I);
-        I->setOperand(0, PoisonValue::get(II->getType()));
-      }
-    }
-
-    if (II->use_empty())
-      II->eraseFromParent();
+    replaceSubOverflowUses(II, A, B, ToRemove);
   }
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134044.464950.patch
Type: text/x-patch
Size: 2116 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221004/3aada8b5/attachment.bin>


More information about the llvm-commits mailing list