[llvm] 803fc50 - [ObjCARCContract] Bail before requesting analyses if !ModuleHasARC (NFC) (#216910)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 18 10:22:31 PDT 2026


Author: Alex MacLean
Date: 2026-08-18T10:22:24-07:00
New Revision: 803fc50ac4b0084d3a65595a9893471c8209a5f1

URL: https://github.com/llvm/llvm-project/commit/803fc50ac4b0084d3a65595a9893471c8209a5f1
DIFF: https://github.com/llvm/llvm-project/commit/803fc50ac4b0084d3a65595a9893471c8209a5f1.diff

LOG: [ObjCARCContract] Bail before requesting analyses if !ModuleHasARC (NFC) (#216910)

Added: 
    

Modified: 
    llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
index 95a9bcb839ee4..ece134abd43b7 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
@@ -77,9 +77,6 @@ class ObjCARCContract {
   ARCRuntimeEntryPoints EP;
   BundledRetainClaimRVs *BundledInsts = nullptr;
 
-  /// A flag indicating whether this optimization pass should run.
-  bool Run;
-
   /// Whether objc_claimAutoreleasedReturnValue is available.
   bool HasClaimRV = false;
 
@@ -108,6 +105,8 @@ class ObjCARCContract {
       const DenseMap<BasicBlock *, ColorVector> &BlockColors);
 
 public:
+  /// Returns whether \p M contains any ARC calls, i.e. whether run() can do
+  /// anything at all. The rest of the state is only set up in that case.
   bool init(Module &M);
   bool run(Function &F, AAResults *AA, DominatorTree *DT);
   bool hasCFGChanged() const { return CFGChanged; }
@@ -564,8 +563,7 @@ static bool useClaimRuntimeCall(Module &M) {
 //===----------------------------------------------------------------------===//
 
 bool ObjCARCContract::init(Module &M) {
-  Run = ModuleHasARC(M);
-  if (!Run)
+  if (!ModuleHasARC(M))
     return false;
 
   EP.init(&M);
@@ -575,13 +573,10 @@ bool ObjCARCContract::init(Module &M) {
   // Initialize RVInstMarker.
   RVInstMarker = getRVInstMarker(M);
 
-  return false;
+  return true;
 }
 
 bool ObjCARCContract::run(Function &F, AAResults *A, DominatorTree *D) {
-  if (!Run)
-    return false;
-
   if (!EnableARCOpts)
     return false;
 
@@ -769,7 +764,8 @@ Pass *llvm::createObjCARCContractPass() {
 
 bool ObjCARCContractLegacyPass::runOnFunction(Function &F) {
   ObjCARCContract OCARCC;
-  OCARCC.init(*F.getParent());
+  if (!OCARCC.init(*F.getParent()))
+    return false;
   auto *AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
   auto *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
   return OCARCC.run(F, AA, DT);
@@ -778,7 +774,8 @@ bool ObjCARCContractLegacyPass::runOnFunction(Function &F) {
 PreservedAnalyses ObjCARCContractPass::run(Function &F,
                                            FunctionAnalysisManager &AM) {
   ObjCARCContract OCAC;
-  OCAC.init(*F.getParent());
+  if (!OCAC.init(*F.getParent()))
+    return PreservedAnalyses::all();
 
   bool Changed = OCAC.run(F, &AM.getResult<AAManager>(F),
                           &AM.getResult<DominatorTreeAnalysis>(F));


        


More information about the llvm-commits mailing list