summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorErik Pilkington <erik.pilkington@gmail.com>2019-02-14 19:58:37 +0000
committerErik Pilkington <erik.pilkington@gmail.com>2019-02-14 19:58:37 +0000
commitec389b0838b9dfbf00f1ec8c55e058967d758aa6 (patch)
treedc0be7bd1d3938db0ebb260a8ac6ffbd5452a32c /clang/test
parent794b536736670a71dacc689588950c24ee4b4f07 (diff)
downloadbcm5719-llvm-ec389b0838b9dfbf00f1ec8c55e058967d758aa6.tar.gz
bcm5719-llvm-ec389b0838b9dfbf00f1ec8c55e058967d758aa6.zip
[CodeGenObjC] Emit [[X alloc] init] as objc_alloc_init(X) when available
This provides a code size win on the caller side, since the init message send is done in the runtime function. rdar://44987038 Differential revision: https://reviews.llvm.org/D57936 llvm-svn: 354056
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGenObjC/objc-alloc-init.m28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/objc-alloc-init.m b/clang/test/CodeGenObjC/objc-alloc-init.m
new file mode 100644
index 00000000000..e56303c7fef
--- /dev/null
+++ b/clang/test/CodeGenObjC/objc-alloc-init.m
@@ -0,0 +1,28 @@
+// RUN: %clang_cc1 %s -fobjc-runtime=macosx-10.14.4 -emit-llvm -O0 -o - | FileCheck %s --check-prefix=OPTIMIZED --check-prefix=EITHER
+// RUN: %clang_cc1 %s -fobjc-runtime=macosx-10.14.3 -emit-llvm -O0 -o - | FileCheck %s --check-prefix=NOT_OPTIMIZED --check-prefix=EITHER
+// RUN: %clang_cc1 %s -fobjc-runtime=ios-12.2 -emit-llvm -O0 -o - | FileCheck %s --check-prefix=OPTIMIZED --check-prefix=EITHER
+// RUN: %clang_cc1 %s -fobjc-runtime=ios-12.1 -emit-llvm -O0 -o - | FileCheck %s --check-prefix=NOT_OPTIMIZED --check-prefix=EITHER
+
+@interface X
++(X *)alloc;
+-(X *)init;
+@end
+
+void f() {
+ [[X alloc] init];
+ // OPTIMIZED: call i8* @objc_alloc_init(
+ // NOT_OPTIMIZED: call i8* @objc_alloc(
+}
+
+@interface Y : X
++(void)meth;
+@end
+
+@implementation Y
++(void)meth {
+ [[self alloc] init];
+ // EITHER-NOT: call i8* @objc_alloc
+ // EITHER: call {{.*}} @objc_msgSend
+ // EITHER: call {{.*}} @objc_msgSend
+}
+@end
OpenPOWER on IntegriCloud