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/Driver/Tools.cpp | |
parent | f7cb16f7de3f12674e50f3bccdc6842103560b9b (diff) | |
download | bcm5719-llvm-be6c750a8ed11b3c165593c761137901d7730117.tar.gz bcm5719-llvm-be6c750a8ed11b3c165593c761137901d7730117.zip |
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/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index cb398711631..2849d513df7 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5284,6 +5284,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } + // Allow the user to control whether messages can be converted to runtime + // functions. + if (types::isObjC(InputType)) { + auto *Arg = Args.getLastArg( + options::OPT_fobjc_convert_messages_to_runtime_calls, + options::OPT_fno_objc_convert_messages_to_runtime_calls); + if (Arg && + Arg->getOption().matches( + options::OPT_fno_objc_convert_messages_to_runtime_calls)) + CmdArgs.push_back("-fno-objc-convert-messages-to-runtime-calls"); + } + // -fobjc-infer-related-result-type is the default, except in the Objective-C // rewriter. if (rewriteKind != RK_None) |