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) _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits