diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h')
| -rw-r--r-- | contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h b/contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h deleted file mode 100644 index e1e95cd6a407..000000000000 --- a/contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h +++ /dev/null @@ -1,146 +0,0 @@ -//===- ARCRuntimeEntryPoints.h - ObjC ARC Optimization ----------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -/// \file -/// This file contains a class ARCRuntimeEntryPoints for use in -/// creating/managing references to entry points to the arc objective c runtime. -/// -/// WARNING: This file knows about certain library functions. It recognizes them -/// by name, and hardwires knowledge of their semantics. -/// -/// WARNING: This file knows about how certain Objective-C library functions are -/// used. Naive LLVM IR transformations which would otherwise be -/// behavior-preserving may break these assumptions. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_LIB_TRANSFORMS_OBJCARC_ARCRUNTIMEENTRYPOINTS_H -#define LLVM_LIB_TRANSFORMS_OBJCARC_ARCRUNTIMEENTRYPOINTS_H - -#include "llvm/ADT/StringRef.h" -#include "llvm/IR/Attributes.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Intrinsics.h" -#include "llvm/IR/Module.h" -#include "llvm/IR/Type.h" -#include "llvm/Support/ErrorHandling.h" -#include <cassert> - -namespace llvm { - -class Function; -class LLVMContext; - -namespace objcarc { - -enum class ARCRuntimeEntryPointKind { - AutoreleaseRV, - Release, - Retain, - RetainBlock, - Autorelease, - StoreStrong, - RetainRV, - RetainAutorelease, - RetainAutoreleaseRV, -}; - -/// Declarations for ObjC runtime functions and constants. These are initialized -/// lazily to avoid cluttering up the Module with unused declarations. -class ARCRuntimeEntryPoints { -public: - ARCRuntimeEntryPoints() = default; - - void init(Module *M) { - TheModule = M; - AutoreleaseRV = nullptr; - Release = nullptr; - Retain = nullptr; - RetainBlock = nullptr; - Autorelease = nullptr; - StoreStrong = nullptr; - RetainRV = nullptr; - RetainAutorelease = nullptr; - RetainAutoreleaseRV = nullptr; - } - - Function *get(ARCRuntimeEntryPointKind kind) { - assert(TheModule != nullptr && "Not initialized."); - - switch (kind) { - case ARCRuntimeEntryPointKind::AutoreleaseRV: - return getIntrinsicEntryPoint(AutoreleaseRV, - Intrinsic::objc_autoreleaseReturnValue); - case ARCRuntimeEntryPointKind::Release: - return getIntrinsicEntryPoint(Release, Intrinsic::objc_release); - case ARCRuntimeEntryPointKind::Retain: - return getIntrinsicEntryPoint(Retain, Intrinsic::objc_retain); - case ARCRuntimeEntryPointKind::RetainBlock: - return getIntrinsicEntryPoint(RetainBlock, Intrinsic::objc_retainBlock); - case ARCRuntimeEntryPointKind::Autorelease: - return getIntrinsicEntryPoint(Autorelease, Intrinsic::objc_autorelease); - case ARCRuntimeEntryPointKind::StoreStrong: - return getIntrinsicEntryPoint(StoreStrong, Intrinsic::objc_storeStrong); - case ARCRuntimeEntryPointKind::RetainRV: - return getIntrinsicEntryPoint(RetainRV, - Intrinsic::objc_retainAutoreleasedReturnValue); - case ARCRuntimeEntryPointKind::RetainAutorelease: - return getIntrinsicEntryPoint(RetainAutorelease, - Intrinsic::objc_retainAutorelease); - case ARCRuntimeEntryPointKind::RetainAutoreleaseRV: - return getIntrinsicEntryPoint(RetainAutoreleaseRV, - Intrinsic::objc_retainAutoreleaseReturnValue); - } - - llvm_unreachable("Switch should be a covered switch."); - } - -private: - /// Cached reference to the module which we will insert declarations into. - Module *TheModule = nullptr; - - /// Declaration for ObjC runtime function objc_autoreleaseReturnValue. - Function *AutoreleaseRV = nullptr; - - /// Declaration for ObjC runtime function objc_release. - Function *Release = nullptr; - - /// Declaration for ObjC runtime function objc_retain. - Function *Retain = nullptr; - - /// Declaration for ObjC runtime function objc_retainBlock. - Function *RetainBlock = nullptr; - - /// Declaration for ObjC runtime function objc_autorelease. - Function *Autorelease = nullptr; - - /// Declaration for objc_storeStrong(). - Function *StoreStrong = nullptr; - - /// Declaration for objc_retainAutoreleasedReturnValue(). - Function *RetainRV = nullptr; - - /// Declaration for objc_retainAutorelease(). - Function *RetainAutorelease = nullptr; - - /// Declaration for objc_retainAutoreleaseReturnValue(). - Function *RetainAutoreleaseRV = nullptr; - - Function *getIntrinsicEntryPoint(Function *&Decl, Intrinsic::ID IntID) { - if (Decl) - return Decl; - - return Decl = Intrinsic::getDeclaration(TheModule, IntID); - } -}; - -} // end namespace objcarc - -} // end namespace llvm - -#endif // LLVM_LIB_TRANSFORMS_OBJCARC_ARCRUNTIMEENTRYPOINTS_H |
