aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard@metafoo.co.uk>2021-01-25 13:30:12 -0800
committerRichard Smith <richard@metafoo.co.uk>2021-01-25 13:53:38 -0800
commit925ae8c790c7e354f12ec14a6cac6aa49fc75b29 (patch)
treeb15e5228acd8409e8227aec34856156c46f9e364 /llvm/lib/Transforms/Utils/InlineFunction.cpp
parent03f1c9fa85d426d8638cefdf58496733ae225de1 (diff)
downloadllvm-925ae8c790c7e354f12ec14a6cac6aa49fc75b29.zip
llvm-925ae8c790c7e354f12ec14a6cac6aa49fc75b29.tar.gz
llvm-925ae8c790c7e354f12ec14a6cac6aa49fc75b29.tar.bz2
Revert "[ObjC][ARC] Annotate calls with attributes instead of emitting retainRV"
This reverts commit 53176c168061d6f26dcf3ce4fa59288b7d67255e, which introduceed a layering violation. LLVM's IR library can't include headers from Analysis.
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/InlineFunction.cpp79
1 files changed, 1 insertions, 78 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 8387f68..0ac8fa5 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -27,9 +27,8 @@
#include "llvm/Analysis/CaptureTracking.h"
#include "llvm/Analysis/EHPersonalities.h"
#include "llvm/Analysis/InstructionSimplify.h"
-#include "llvm/Analysis/ObjCARCAnalysisUtils.h"
-#include "llvm/Analysis/ObjCARCRVAttr.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
+#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/Argument.h"
@@ -62,7 +61,6 @@
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/Utils/AssumeBundleBuilder.h"
#include "llvm/Transforms/Utils/Cloning.h"
-#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <algorithm>
#include <cassert>
@@ -1646,77 +1644,6 @@ void llvm::updateProfileCallee(
}
}
-static void
-insertRetainOrClaimRVCalls(CallBase &CB,
- const SmallVectorImpl<ReturnInst *> &Returns) {
- Module *Mod = CB.getParent()->getParent()->getParent();
- bool IsRetainRV = objcarc::hasRetainRVAttr(&CB), IsClaimRV = !IsRetainRV;
-
- for (auto *RI : Returns) {
- Value *RetOpnd = llvm::objcarc::GetRCIdentityRoot(RI->getOperand(0));
- BasicBlock::reverse_iterator I = ++(RI->getIterator().getReverse());
- BasicBlock::reverse_iterator EI = RI->getParent()->rend();
- bool InsertRetainCall = IsRetainRV;
- IRBuilder<> Builder(RI->getContext());
-
- // Walk backwards through the basic block looking for either a matching
- // autoreleaseRV call or an unannotated call.
- for (; I != EI;) {
- auto CurI = I++;
-
- // Ignore casts.
- if (isa<CastInst>(*CurI))
- continue;
-
- if (auto *II = dyn_cast<IntrinsicInst>(&*CurI)) {
- if (II->getIntrinsicID() == Intrinsic::objc_autoreleaseReturnValue &&
- II->hasNUses(0) &&
- llvm::objcarc::GetRCIdentityRoot(II->getOperand(0)) == RetOpnd) {
- // If we've found a matching authoreleaseRV call:
- // - If the call is annotated with claimRV, insert a call to
- // objc_release and erase the autoreleaseRV call.
- // - If the call is annotated with retainRV, just erase the
- // autoreleaseRV call.
- if (IsClaimRV) {
- Builder.SetInsertPoint(II);
- Function *IFn =
- Intrinsic::getDeclaration(Mod, Intrinsic::objc_release);
- Value *BC =
- Builder.CreateBitCast(RetOpnd, IFn->getArg(0)->getType());
- Builder.CreateCall(IFn, BC, "");
- }
- II->eraseFromParent();
- InsertRetainCall = false;
- }
- } else if (auto *CI = dyn_cast<CallInst>(&*CurI)) {
- if (llvm::objcarc::GetRCIdentityRoot(CI) == RetOpnd &&
- !objcarc::hasRetainRVOrClaimRVAttr(CI)) {
- // If we've found an unannotated call that defines RetOpnd, annotate
- // the call with the attributes.
- llvm::AttributeList AL = CI->getAttributes();
- AL = AL.addAttribute(CI->getContext(), AttributeList::ReturnIndex,
- objcarc::getRVAttrKeyStr(),
- objcarc::getRVAttrValStr(IsRetainRV));
- CI->setAttributes(AL);
- InsertRetainCall = false;
- }
- }
-
- break;
- }
-
- if (InsertRetainCall) {
- // The call is annotated with retainRV and we've failed to find a matching
- // autoreleaseRV or an annotated call in the callee. Emit a call to
- // objc_retain.
- Builder.SetInsertPoint(RI);
- Function *IFn = Intrinsic::getDeclaration(Mod, Intrinsic::objc_retain);
- Value *BC = Builder.CreateBitCast(RetOpnd, IFn->getArg(0)->getType());
- Builder.CreateCall(IFn, BC, "");
- }
- }
-}
-
/// This function inlines the called function into the basic block of the
/// caller. This returns false if it is not possible to inline this call.
/// The program is still in a well defined state if this occurs though.
@@ -1920,10 +1847,6 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
// Remember the first block that is newly cloned over.
FirstNewBlock = LastBlock; ++FirstNewBlock;
- // Insert retainRV/clainRV runtime calls.
- if (objcarc::hasRetainRVOrClaimRVAttr(&CB))
- insertRetainOrClaimRVCalls(CB, Returns);
-
if (IFI.CallerBFI != nullptr && IFI.CalleeBFI != nullptr)
// Update the BFI of blocks cloned into the caller.
updateCallerBFI(OrigBB, VMap, IFI.CallerBFI, IFI.CalleeBFI,