diff options
author | Erik Pilkington <erik.pilkington@gmail.com> | 2019-02-14 19:58:37 +0000 |
---|---|---|
committer | Erik Pilkington <erik.pilkington@gmail.com> | 2019-02-14 19:58:37 +0000 |
commit | ec389b0838b9dfbf00f1ec8c55e058967d758aa6 (patch) | |
tree | dc0be7bd1d3938db0ebb260a8ac6ffbd5452a32c /clang/test | |
parent | 794b536736670a71dacc689588950c24ee4b4f07 (diff) | |
download | bcm5719-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.m | 28 |
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 |