[llvm] [ObjCARCContract] Bail before requesting analyses if !ModuleHasARC (NFC) (PR #216910)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 18 08:58:00 PDT 2026
https://github.com/AlexMaclean updated https://github.com/llvm/llvm-project/pull/216910
>From a6e3183f765c92ef17ee92948cf9b8d0a557df3b Mon Sep 17 00:00:00 2001
From: Alex Maclean <amaclean at nvidia.com>
Date: Mon, 17 Aug 2026 21:34:51 -0700
Subject: [PATCH] [ObjCARCContract] Bail early before requesting analyses if
!ModuleHasARC (NFC)
---
.../Transforms/ObjCARC/ObjCARCContract.cpp | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
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