[llvm-branch-commits] [llvm] 2e4d572 - Revert "[ObjCARC][Contract] Optimize bundled RetainRV to ClaimRV (#139762)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue May 13 12:19:51 PDT 2025
Author: Marina Taylor
Date: 2025-05-13T20:19:48+01:00
New Revision: 2e4d57206e24efb7f495e38684dcc5a04168e4d2
URL: https://github.com/llvm/llvm-project/commit/2e4d57206e24efb7f495e38684dcc5a04168e4d2
DIFF: https://github.com/llvm/llvm-project/commit/2e4d57206e24efb7f495e38684dcc5a04168e4d2.diff
LOG: Revert "[ObjCARC][Contract] Optimize bundled RetainRV to ClaimRV (#139762)"
This reverts commit 810148cb0769f61f8afebdaf27a9c1af95de27aa.
Added:
Modified:
llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h
llvm/lib/Transforms/ObjCARC/ObjCARC.cpp
llvm/lib/Transforms/ObjCARC/ObjCARC.h
llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
Removed:
llvm/test/Transforms/ObjCARC/contract-attached-call-retain-to-claim.ll
################################################################################
diff --git a/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h b/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h
index 3fa844eda21cf..0dedd0207571b 100644
--- a/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h
+++ b/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h
@@ -42,7 +42,6 @@ enum class ARCRuntimeEntryPointKind {
Autorelease,
StoreStrong,
RetainRV,
- ClaimRV,
UnsafeClaimRV,
RetainAutorelease,
RetainAutoreleaseRV,
@@ -63,7 +62,6 @@ class ARCRuntimeEntryPoints {
Autorelease = nullptr;
StoreStrong = nullptr;
RetainRV = nullptr;
- ClaimRV = nullptr;
UnsafeClaimRV = nullptr;
RetainAutorelease = nullptr;
RetainAutoreleaseRV = nullptr;
@@ -89,9 +87,6 @@ class ARCRuntimeEntryPoints {
case ARCRuntimeEntryPointKind::RetainRV:
return getIntrinsicEntryPoint(RetainRV,
Intrinsic::objc_retainAutoreleasedReturnValue);
- case ARCRuntimeEntryPointKind::ClaimRV:
- return getIntrinsicEntryPoint(
- ClaimRV, Intrinsic::objc_claimAutoreleasedReturnValue);
case ARCRuntimeEntryPointKind::UnsafeClaimRV:
return getIntrinsicEntryPoint(
UnsafeClaimRV, Intrinsic::objc_unsafeClaimAutoreleasedReturnValue);
@@ -131,9 +126,6 @@ class ARCRuntimeEntryPoints {
/// Declaration for objc_retainAutoreleasedReturnValue().
Function *RetainRV = nullptr;
- /// Declaration for objc_claimAutoreleasedReturnValue().
- Function *ClaimRV = nullptr;
-
/// Declaration for objc_unsafeClaimAutoreleasedReturnValue().
Function *UnsafeClaimRV = nullptr;
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARC.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARC.cpp
index 32e7092e80117..b6ade1c29a2b5 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARC.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARC.cpp
@@ -101,37 +101,8 @@ BundledRetainClaimRVs::~BundledRetainClaimRVs() {
// can't be tail calls.
if (auto *CI = dyn_cast<CallInst>(CB))
CI->setTailCallKind(CallInst::TCK_NoTail);
-
- // We can also do one final optimization: modify the bundle in the
- // annotated call, to change the bundle operand from
- // objc_retainAutoreleasedReturnValue
- // to:
- // objc_claimAutoreleasedReturnValue
- // allowing the marker to be omitted from the bundle expansion later.
- //
- // Note that, confusingly, ClaimRV is semantically equivalent to RetainRV,
- // and only
diff ers in that it doesn't require the marker.
- // The bundle provides the guarantee that we're emitting the ClaimRV call
- // adjacent to the original call, and providing that guarantee is the
- // only
diff erence between ClaimRV and RetainRV.
- //
- // UnsafeClaimRV has a
diff erent RC contract entirely.
-
- // Find the clang.arc.attachedcall bundle, and rewrite its operand.
- if (UseClaimRV) {
- for (auto OBI : CB->bundle_op_infos()) {
- auto OBU = CB->operandBundleFromBundleOpInfo(OBI);
- if (OBU.getTagID() == LLVMContext::OB_clang_arc_attachedcall &&
- OBU.Inputs[0] == EP.get(ARCRuntimeEntryPointKind::RetainRV)) {
- CB->setOperand(OBI.Begin,
- EP.get(ARCRuntimeEntryPointKind::ClaimRV));
- break;
- }
- }
- }
}
- // Erase the RV call we emitted earlier: it's already in the bundle.
EraseInstruction(P.first);
}
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARC.h b/llvm/lib/Transforms/ObjCARC/ObjCARC.h
index d0bff00446aa0..f4d7c92d499c1 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARC.h
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARC.h
@@ -22,7 +22,6 @@
#ifndef LLVM_LIB_TRANSFORMS_OBJCARC_OBJCARC_H
#define LLVM_LIB_TRANSFORMS_OBJCARC_OBJCARC_H
-#include "ARCRuntimeEntryPoints.h"
#include "llvm/Analysis/ObjCARCAnalysisUtils.h"
#include "llvm/Analysis/ObjCARCUtil.h"
#include "llvm/IR/EHPersonalities.h"
@@ -105,9 +104,7 @@ CallInst *createCallInstWithColors(
class BundledRetainClaimRVs {
public:
- BundledRetainClaimRVs(ARCRuntimeEntryPoints &EP, bool ContractPass,
- bool UseClaimRV)
- : EP(EP), ContractPass(ContractPass), UseClaimRV(UseClaimRV) {}
+ BundledRetainClaimRVs(bool ContractPass) : ContractPass(ContractPass) {}
~BundledRetainClaimRVs();
/// Insert a retainRV/claimRV call to the normal destination blocks of invokes
@@ -158,9 +155,7 @@ class BundledRetainClaimRVs {
/// A map of inserted retainRV/claimRV calls to annotated calls/invokes.
DenseMap<CallInst *, CallBase *> RVCalls;
- ARCRuntimeEntryPoints &EP;
bool ContractPass;
- bool UseClaimRV;
};
} // end namespace objcarc
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
index 86d7e2f07c1d9..e11748b2c9dbb 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
@@ -42,7 +42,6 @@
#include "llvm/InitializePasses.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/ObjCARC.h"
using namespace llvm;
@@ -53,11 +52,6 @@ using namespace llvm::objcarc;
STATISTIC(NumPeeps, "Number of calls peephole-optimized");
STATISTIC(NumStoreStrongs, "Number objc_storeStrong calls formed");
-static cl::opt<cl::boolOrDefault> UseObjCClaimRV(
- "arc-contract-use-objc-claim-rv",
- cl::desc(
- "Enable generation of calls to objc_claimAutoreleasedReturnValue"));
-
//===----------------------------------------------------------------------===//
// Declarations
//===----------------------------------------------------------------------===//
@@ -80,9 +74,6 @@ class ObjCARCContract {
/// A flag indicating whether this optimization pass should run.
bool Run;
- /// Whether objc_claimAutoreleasedReturnValue is available.
- bool HasClaimRV = false;
-
/// The inline asm string to insert between calls and RetainRV calls to make
/// the optimization work on targets which need it.
const MDString *RVInstMarker;
@@ -526,39 +517,6 @@ bool ObjCARCContract::tryToPeepholeInstruction(
}
}
-/// Should we use objc_claimAutoreleasedReturnValue?
-static bool useClaimRuntimeCall(Module &M) {
- // Let the flag override our OS-based default.
- if (UseObjCClaimRV != cl::BOU_UNSET)
- return UseObjCClaimRV == cl::BOU_TRUE;
-
- Triple TT(M.getTargetTriple());
-
- // On x86_64, claimARV doesn't make sense, as the marker isn't actually a nop
- // there (it's needed by the calling convention).
- if (!TT.isAArch64())
- return false;
-
- unsigned Major = TT.getOSMajorVersion();
- switch (TT.getOS()) {
- default:
- return false;
- case Triple::IOS:
- case Triple::TvOS:
- return Major >= 16;
- case Triple::WatchOS:
- return Major >= 9;
- case Triple::BridgeOS:
- return Major >= 7;
- case Triple::MacOSX:
- return Major >= 13;
- case Triple::Darwin:
- return Major >= 21;
- }
-
- return false;
-}
-
//===----------------------------------------------------------------------===//
// Top Level Driver
//===----------------------------------------------------------------------===//
@@ -570,8 +528,6 @@ bool ObjCARCContract::init(Module &M) {
EP.init(&M);
- HasClaimRV = useClaimRuntimeCall(M);
-
// Initialize RVInstMarker.
RVInstMarker = getRVInstMarker(M);
@@ -589,7 +545,7 @@ bool ObjCARCContract::run(Function &F, AAResults *A, DominatorTree *D) {
AA = A;
DT = D;
PA.setAA(A);
- BundledRetainClaimRVs BRV(EP, /*ContractPass=*/true, HasClaimRV);
+ BundledRetainClaimRVs BRV(/*ContractPass=*/true);
BundledInsts = &BRV;
std::pair<bool, bool> R = BundledInsts->insertAfterInvokes(F, DT);
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
index 5eb3f51d38945..2ef87f531dfae 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
@@ -2423,7 +2423,7 @@ bool ObjCARCOpt::run(Function &F, AAResults &AA) {
return false;
Changed = CFGChanged = false;
- BundledRetainClaimRVs BRV(EP, /*ContractPass=*/false, /*UseClaimRV=*/false);
+ BundledRetainClaimRVs BRV(/*ContractPass=*/false);
BundledInsts = &BRV;
LLVM_DEBUG(dbgs() << "<<< ObjCARCOpt: Visiting Function: " << F.getName()
diff --git a/llvm/test/Transforms/ObjCARC/contract-attached-call-retain-to-claim.ll b/llvm/test/Transforms/ObjCARC/contract-attached-call-retain-to-claim.ll
deleted file mode 100644
index d0b8ce97d6517..0000000000000
--- a/llvm/test/Transforms/ObjCARC/contract-attached-call-retain-to-claim.ll
+++ /dev/null
@@ -1,35 +0,0 @@
-; RUN: opt -passes=objc-arc-contract -arc-contract-use-objc-claim-rv=1 -S < %s | FileCheck %s --check-prefixes=CHECK,CLAIM
-; RUN: opt -passes=objc-arc-contract -arc-contract-use-objc-claim-rv=0 -S < %s | FileCheck %s --check-prefixes=CHECK,RETAIN
-
-; CHECK-LABEL: define void @test0() {
-; CLAIM: %[[CALL:.*]] = notail call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.claimAutoreleasedReturnValue) ]
-; RETAIN: %[[CALL:.*]] = notail call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-; CHECK-NEXT: ret void
-
-define void @test0() {
- %call1 = call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
- ret void
-}
-
-; CHECK-LABEL: define void @test1() {
-; CHECK: %[[CALL:.*]] = notail call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-; CHECK-NEXT: ret void
-
-define void @test1() {
- %call1 = call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
- ret void
-}
-
-; CHECK-LABEL: define void @test2() {
-; CLAIM: %[[CALL:.*]] = notail call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.claimAutoreleasedReturnValue), "otherbundle"() ]
-; RETAIN: %[[CALL:.*]] = notail call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue), "otherbundle"() ]
-; CHECK-NEXT: ret void
-
-define void @test2() {
- %call1 = call ptr @foo() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue), "otherbundle"() ]
- ret void
-}
-
-declare ptr @foo()
-declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)
-declare ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue(ptr)
More information about the llvm-branch-commits
mailing list