[llvm-branch-commits] [llvm] ObjCARCContract: Use stripPointerCastsAndAliases (PR #134275)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Apr 3 09:53:56 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/134275.diff


1 Files Affected:

- (modified) llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp (+10-24) 


``````````diff
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
index e11748b2c9dbb..ed7a235f5e2e3 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
@@ -661,30 +661,16 @@ bool ObjCARCContract::run(Function &F, AAResults *A, DominatorTree *D) {
 
     Value *Arg = cast<CallInst>(Inst)->getArgOperand(0);
 
-    // TODO: Change this to a do-while.
-    for (;;) {
-      ReplaceArgUses(Arg);
-
-      // If Arg is a no-op casted pointer, strip one level of casts and iterate.
-      if (const BitCastInst *BI = dyn_cast<BitCastInst>(Arg))
-        Arg = BI->getOperand(0);
-      else if (isa<GEPOperator>(Arg) &&
-               cast<GEPOperator>(Arg)->hasAllZeroIndices())
-        Arg = cast<GEPOperator>(Arg)->getPointerOperand();
-      else if (isa<GlobalAlias>(Arg) &&
-               !cast<GlobalAlias>(Arg)->isInterposable())
-        Arg = cast<GlobalAlias>(Arg)->getAliasee();
-      else {
-        // If Arg is a PHI node, get PHIs that are equivalent to it and replace
-        // their uses.
-        if (PHINode *PN = dyn_cast<PHINode>(Arg)) {
-          SmallVector<Value *, 1> PHIList;
-          getEquivalentPHIs(*PN, PHIList);
-          for (Value *PHI : PHIList)
-            ReplaceArgUses(PHI);
-        }
-        break;
-      }
+    ReplaceArgUses(Arg);
+
+    Arg = Arg->stripPointerCastsAndAliases();
+    // If Arg is a PHI node, get PHIs that are equivalent to it and replace
+    // their uses.
+    if (PHINode *PN = dyn_cast<PHINode>(Arg)) {
+      SmallVector<Value *, 1> PHIList;
+      getEquivalentPHIs(*PN, PHIList);
+      for (Value *PHI : PHIList)
+        ReplaceArgUses(PHI);
     }
   }
 

``````````

</details>


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


More information about the llvm-branch-commits mailing list