diff options
| author | Erik Pilkington <erik.pilkington@gmail.com> | 2019-01-17 18:18:53 +0000 |
|---|---|---|
| committer | Erik Pilkington <erik.pilkington@gmail.com> | 2019-01-17 18:18:53 +0000 |
| commit | 2ff012df81760f62b655135ab335956c06cbcb22 (patch) | |
| tree | 65904ee3c73c496fe9387067a7cbc178f7c12b1b /clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m | |
| parent | f3b762a0b6cef251afef8907cb4cf5b35bffb0d8 (diff) | |
| download | bcm5719-llvm-2ff012df81760f62b655135ab335956c06cbcb22.tar.gz bcm5719-llvm-2ff012df81760f62b655135ab335956c06cbcb22.zip | |
[CodeGenObjC] Use a constant value for non-fragile ivar offsets when possible
If a class inherits from NSObject and has an implementation, then we
can assume that ivar offsets won't need to be updated by the runtime.
This allows us to index into the object using a constant value and
avoid loading from the ivar offset variable.
This patch was adapted from one written by Pete Cooper.
rdar://problem/10132568
Differential revision: https://reviews.llvm.org/D56802
llvm-svn: 351461
Diffstat (limited to 'clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m')
| -rw-r--r-- | clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m new file mode 100644 index 00000000000..34c393d8ed3 --- /dev/null +++ b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -emit-llvm %s -o - | FileCheck %s + +// CHECK: @"OBJC_IVAR_$_StaticLayout.static_layout_ivar" = hidden constant i64 20 +// CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden global i64 12 + +@interface NSObject { + int these, will, never, change, ever; +} +@end + +@interface StaticLayout : NSObject +@end + +@implementation StaticLayout { + int static_layout_ivar; +} +-(void)meth { + static_layout_ivar = 0; + // CHECK-NOT: load i64, i64* @"OBJC_IVAR_$_StaticLayout +} +@end + +@interface NotNSObject { + int these, might, change; +} +@end + +@interface NotStaticLayout : NotNSObject +@end + +@implementation NotStaticLayout { + int not_static_layout_ivar; +} +-(void)meth { + not_static_layout_ivar = 0; + // CHECK: load i64, i64* @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar +} +@end |

