diff options
author | Pete Cooper <peter_cooper@apple.com> | 2016-03-16 00:33:21 +0000 |
---|---|---|
committer | Pete Cooper <peter_cooper@apple.com> | 2016-03-16 00:33:21 +0000 |
commit | be6c750a8ed11b3c165593c761137901d7730117 (patch) | |
tree | a0ea90b3311f0bb247ca2ae0eb92dfeea4cf2600 /clang/lib/CodeGen/CodeGenFunction.h | |
parent | f7cb16f7de3f12674e50f3bccdc6842103560b9b (diff) | |
download | llvm-be6c750a8ed11b3c165593c761137901d7730117.zip llvm-be6c750a8ed11b3c165593c761137901d7730117.tar.gz llvm-be6c750a8ed11b3c165593c761137901d7730117.tar.bz2 |
Convert some ObjC msgSends to runtime calls.
It is faster to directly call the ObjC runtime for methods such as retain/release instead of sending a message to those functions.
This patch adds support for converting messages to retain/release/alloc/autorelease to their equivalent runtime calls.
Tests included for the positive case of applying this transformation, negative tests that we ensure we only convert "alloc" to objc_alloc, not "alloc2", and also a driver test to ensure we enable this only for supported runtime versions.
Reviewed by John McCall.
Differential Revision: http://reviews.llvm.org/D14737
llvm-svn: 263607
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 85d5f7a..8a4abbf 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -2821,11 +2821,13 @@ public: llvm::Value *EmitARCStoreStrongCall(Address addr, llvm::Value *value, bool resultIgnored); llvm::Value *EmitARCRetain(QualType type, llvm::Value *value); - llvm::Value *EmitARCRetainNonBlock(llvm::Value *value); + llvm::Value *EmitARCRetainNonBlock(llvm::Value *value, + llvm::Type *returnType = nullptr); llvm::Value *EmitARCRetainBlock(llvm::Value *value, bool mandatory); void EmitARCDestroyStrong(Address addr, ARCPreciseLifetime_t precise); void EmitARCRelease(llvm::Value *value, ARCPreciseLifetime_t precise); - llvm::Value *EmitARCAutorelease(llvm::Value *value); + llvm::Value *EmitARCAutorelease(llvm::Value *value, + llvm::Type *returnType = nullptr); llvm::Value *EmitARCAutoreleaseReturnValue(llvm::Value *value); llvm::Value *EmitARCRetainAutoreleaseReturnValue(llvm::Value *value); llvm::Value *EmitARCRetainAutoreleasedReturnValue(llvm::Value *value); @@ -2838,6 +2840,8 @@ public: std::pair<LValue,llvm::Value*> EmitARCStoreUnsafeUnretained(const BinaryOperator *e, bool ignored); + llvm::Value *EmitObjCAlloc(llvm::Value *value, + llvm::Type *returnType = nullptr); llvm::Value *EmitObjCThrowOperand(const Expr *expr); llvm::Value *EmitObjCConsumeObject(QualType T, llvm::Value *Ptr); llvm::Value *EmitObjCExtendObjectLifetime(QualType T, llvm::Value *Ptr); |