[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / CodeGenObjC / optimize-ivar-offset-load.m
blob95d534ec224d0d10c6a224868dc9a95edfe6399d
1 // RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10  -O0 -emit-llvm %s -o -  | FileCheck %s
2 // rdar://16095748
4 @interface MyNSObject 
5 @end
7 @interface SampleClass : MyNSObject {
8     @public
9     int _value;
11 + (SampleClass*) new;
12 @end
14 @interface AppDelegate  : MyNSObject
15 @end
17 extern void foo(int);
19 @implementation AppDelegate
20 - (void)application
22     // Create set of objects in loop
23     for(int i = 0; i < 2; i++) {
24         SampleClass *sample = [SampleClass new];
25         foo (sample->_value);
26     }
28 @end
29 // CHECK: [[IVAR:%.*]]  = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8
30 // CHECK: [[THREE:%.*]] = bitcast [[ONE:%.*]]* [[CALL:%.*]] to i8*
31 // CHECK: [[ADDPTR:%.*]] = getelementptr inbounds i8, i8* [[THREE]], i64 [[IVAR]]
32 // CHECK: [[FOUR:%.*]] = bitcast i8* [[ADDPTR]] to i32*
33 // CHECK: [[FIVE:%.*]] = load i32, i32* [[FOUR]], align 4
34 // CHECK:   call void @foo(i32 noundef [[FIVE]])
36 @implementation SampleClass
37 + (SampleClass*) new { return 0; }
38 - (void) SampleClassApplication
40     // Create set of objects in loop
41     for(int i = 0; i < 2; i++) {
42         SampleClass *sample = [SampleClass new];
43         foo (sample->_value);
44     }
46 @end
47 // CHECK: [[ZERO:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_, align 8, !invariant.load
48 // CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load
50 @interface Sample : SampleClass @end
52 @implementation Sample
53 - (void) SampleApplication
55     // Create set of objects in loop
56     for(int i = 0; i < 2; i++) {
57         SampleClass *sample = [SampleClass new];
58         foo (sample->_value);
59     }
61 @end
62 // CHECK: [[ZERO:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_, align 8, !invariant.load 
63 // CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load