summaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp')
-rw-r--r--llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp25
1 files changed, 11 insertions, 14 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
index 9e2832827686..2985ae004d3c 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp
@@ -434,23 +434,20 @@ bool ObjCARCContract::tryToPeepholeInstruction(
LLVM_FALLTHROUGH;
case ARCInstKind::RetainRV:
case ARCInstKind::UnsafeClaimRV: {
- bool IsInstContainedInBundle = BundledInsts->contains(Inst);
-
- // Return now if the target doesn't need a special inline-asm marker. Return
- // true if this is a bundled retainRV/claimRV call, which is going to be
- // erased at the end of this pass, to avoid undoing objc-arc-expand and
+ // Return true if this is a bundled retainRV/claimRV call, which is always
+ // redundant with the attachedcall in the bundle, and is going to be erased
+ // at the end of this pass. This avoids undoing objc-arc-expand and
// replacing uses of the retainRV/claimRV call's argument with its result.
- if (!RVInstMarker)
- return IsInstContainedInBundle;
-
- // The target needs a special inline-asm marker.
+ if (BundledInsts->contains(Inst))
+ return true;
- // We don't have to emit the marker if this is a bundled call since the
- // backend is responsible for emitting it. Return false to undo
- // objc-arc-expand.
- if (IsInstContainedInBundle)
+ // If this isn't a bundled call, and the target doesn't need a special
+ // inline-asm marker, we're done: return now, and undo objc-arc-expand.
+ if (!RVInstMarker)
return false;
+ // The target needs a special inline-asm marker. Insert it.
+
BasicBlock::iterator BBI = Inst->getIterator();
BasicBlock *InstParent = Inst->getParent();
@@ -548,7 +545,7 @@ bool ObjCARCContract::run(Function &F, AAResults *A, DominatorTree *D) {
AA = A;
DT = D;
PA.setAA(A);
- BundledRetainClaimRVs BRV(true, RVInstMarker);
+ BundledRetainClaimRVs BRV(/*ContractPass=*/true);
BundledInsts = &BRV;
std::pair<bool, bool> R = BundledInsts->insertAfterInvokes(F, DT);