summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2016-03-16 00:33:21 +0000
committerPete Cooper <peter_cooper@apple.com>2016-03-16 00:33:21 +0000
commitbe6c750a8ed11b3c165593c761137901d7730117 (patch)
treea0ea90b3311f0bb247ca2ae0eb92dfeea4cf2600 /clang/lib/Driver/Tools.cpp
parentf7cb16f7de3f12674e50f3bccdc6842103560b9b (diff)
downloadbcm5719-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.cpp12
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)
OpenPOWER on IntegriCloud