diff options
Diffstat (limited to 'test/CodeGenObjC/optimize-ivar-offset-load.m')
-rw-r--r-- | test/CodeGenObjC/optimize-ivar-offset-load.m | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/CodeGenObjC/optimize-ivar-offset-load.m b/test/CodeGenObjC/optimize-ivar-offset-load.m new file mode 100644 index 000000000000..d34ac137587f --- /dev/null +++ b/test/CodeGenObjC/optimize-ivar-offset-load.m @@ -0,0 +1,64 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -Os -emit-llvm %s -o - | FileCheck %s +// rdar://16095748 + +@interface NSObject +@end + +@interface SampleClass : NSObject { + @public + int _value; +} ++ (SampleClass*) new; +@end + +@interface AppDelegate : NSObject +@end + +extern void foo(int); + +@implementation AppDelegate +- (void)application +{ + // Create set of objects in loop + for(int i = 0; i < 2; i++) { + SampleClass *sample = [SampleClass new]; + foo (sample->_value); + } +} +@end +// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_SampleClass._value", align 8 +// CHECK: [[THREE:%.*]] = bitcast [[ONE:%.*]]* [[CALL:%.*]] to i8* +// CHECK: [[ADDPTR:%.*]] = getelementptr inbounds i8* [[THREE]], i64 [[IVAR]] +// CHECK: [[FOUR:%.*]] = bitcast i8* [[ADDPTR]] to i32* +// CHECK: [[FIVE:%.*]] = load i32* [[FOUR]], align 4 +// CHECK: tail call void @foo(i32 [[FIVE]]) + +@implementation SampleClass ++ (SampleClass*) new { return 0; } +- (void) SampleClassApplication +{ + // Create set of objects in loop + for(int i = 0; i < 2; i++) { + SampleClass *sample = [SampleClass new]; + foo (sample->_value); + } +} +@end +// CHECK: [[ZERO:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_", align 8, !invariant.load +// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load + +@interface Sample : SampleClass @end + +@implementation Sample +- (void) SampleApplication +{ + // Create set of objects in loop + for(int i = 0; i < 2; i++) { + SampleClass *sample = [SampleClass new]; + foo (sample->_value); + } +} +@end +// CHECK: [[ZERO:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_", align 8, !invariant.load +// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load + |