@@ -4,9 +4,9 @@ void p2unsigned(unsigned **ptr) {
4
4
// CHECK-LABEL: define void @p2unsigned(ptr noundef %ptr)
5
5
// CHECK-NEXT: entry:
6
6
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
7
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 :!.+]]
8
- // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
9
- // CHECK-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[ANY_POINTER_0 ]]
7
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P2INT_0 :!.+]]
8
+ // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P2INT_0 ]]
9
+ // CHECK-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[P1INT_0:!.+ ]]
10
10
// CHECK-NEXT: ret void
11
11
//
12
12
* ptr = 0 ;
@@ -16,9 +16,9 @@ void p2unsigned_volatile(unsigned *volatile *ptr) {
16
16
// CHECK-LABEL: define void @p2unsigned_volatile(ptr noundef %ptr)
17
17
// CHECK-NEXT: entry:
18
18
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
19
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
20
- // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
21
- // CHECK-NEXT: store volatile ptr null, ptr [[BASE]], align 8, !tbaa [[ANY_POINTER_0 ]]
19
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P2INT_0 ]]
20
+ // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P2INT_0 ]]
21
+ // CHECK-NEXT: store volatile ptr null, ptr [[BASE]], align 8, !tbaa [[P1INT_0 ]]
22
22
// CHECK-NEXT: ret void
23
23
//
24
24
* ptr = 0 ;
@@ -28,10 +28,10 @@ void p3int(int ***ptr) {
28
28
// CHECK-LABEL: define void @p3int(ptr noundef %ptr)
29
29
// CHECK-NEXT: entry:
30
30
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
31
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
32
- // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
33
- // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[ANY_POINTER_0 ]]
34
- // CHECK-NEXT: store ptr null, ptr [[BASE_1]], align 8, !tbaa [[ANY_POINTER_0 ]]
31
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P3INT_0:!.+ ]]
32
+ // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P3INT_0 ]]
33
+ // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[P2INT_0 ]]
34
+ // CHECK-NEXT: store ptr null, ptr [[BASE_1]], align 8, !tbaa [[P1INT_0 ]]
35
35
// CHECK-NEXT: ret void
36
36
//
37
37
* * ptr = 0 ;
@@ -41,11 +41,11 @@ void p4char(char ****ptr) {
41
41
// CHECK-LABEL: define void @p4char(ptr noundef %ptr)
42
42
// CHECK-NEXT: entry:
43
43
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
44
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
45
- // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
46
- // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[ANY_POINTER_0 ]]
47
- // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[ANY_POINTER_0 ]]
48
- // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[ANY_POINTER_0 ]]
44
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0:!.+ ]]
45
+ // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0 ]]
46
+ // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[P3CHAR_0:!.+ ]]
47
+ // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[P2CHAR_0:!.+ ]]
48
+ // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[P1CHAR_0:!.+ ]]
49
49
// CHECK-NEXT: ret void
50
50
//
51
51
* * * ptr = 0 ;
@@ -55,11 +55,11 @@ void p4char_const1(const char ****ptr) {
55
55
// CHECK-LABEL: define void @p4char_const1(ptr noundef %ptr)
56
56
// CHECK-NEXT: entry:
57
57
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
58
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
59
- // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
60
- // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[ANY_POINTER_0 ]]
61
- // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[ANY_POINTER_0 ]]
62
- // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[ANY_POINTER_0 ]]
58
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0 ]]
59
+ // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0 ]]
60
+ // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[P3CHAR_0 ]]
61
+ // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[P2CHAR_0 ]]
62
+ // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[P1CHAR_0 ]]
63
63
// CHECK-NEXT: ret void
64
64
//
65
65
* * * ptr = 0 ;
@@ -69,11 +69,11 @@ void p4char_const2(const char **const **ptr) {
69
69
// CHECK-LABEL: define void @p4char_const2(ptr noundef %ptr)
70
70
// CHECK-NEXT: entry:
71
71
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
72
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
73
- // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
74
- // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[ANY_POINTER_0 ]]
75
- // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[ANY_POINTER_0 ]]
76
- // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[ANY_POINTER_0 ]]
72
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0 ]]
73
+ // CHECK-NEXT: [[BASE_0:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P4CHAR_0 ]]
74
+ // CHECK-NEXT: [[BASE_1:%.+]] = load ptr, ptr [[BASE_0]], align 8, !tbaa [[P3CHAR_0 ]]
75
+ // CHECK-NEXT: [[BASE_2:%.+]] = load ptr, ptr [[BASE_1]], align 8, !tbaa [[P2CHAR_0 ]]
76
+ // CHECK-NEXT: store ptr null, ptr [[BASE_2]], align 8, !tbaa [[P1CHAR_0 ]]
77
77
// CHECK-NEXT: ret void
78
78
//
79
79
* * * ptr = 0 ;
@@ -88,16 +88,28 @@ void p2struct(struct S1 **ptr) {
88
88
// CHECK-LABEL: define void @p2struct(ptr noundef %ptr)
89
89
// CHECK-NEXT: entry:
90
90
// CHECK-NEXT: %ptr.addr = alloca ptr, align 8
91
- // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
92
- // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[ANY_POINTER_0 ]]
93
- // CHECK-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[ANY_POINTER_0 ]]
91
+ // CHECK-NEXT: store ptr %ptr, ptr %ptr.addr, align 8, !tbaa [[P2S1_0:!.+ ]]
92
+ // CHECK-NEXT: [[BASE:%.+]] = load ptr, ptr %ptr.addr, align 8, !tbaa [[P2S1_0 ]]
93
+ // CHECK-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[P1S1_:!.+ ]]
94
94
// CHECK-NEXT: ret void
95
95
//
96
96
* ptr = 0 ;
97
97
}
98
98
99
- // CHECK: [[ANY_POINTER_0]] = !{[[ANY_POINTER:!.+]], [[ANY_POINTER]], i64 0}
99
+ // CHECK: [[P2INT_0]] = !{[[P2INT:!.+]], [[P2INT]], i64 0}
100
+ // CHECK: [[P2INT]] = !{!"p2 int", [[ANY_POINTER:!.+]], i64 0}
100
101
// CHECK: [[ANY_POINTER]] = !{!"any pointer", [[CHAR:!.+]], i64 0}
101
102
// CHECK: [[CHAR]] = !{!"omnipotent char", [[TBAA_ROOT:!.+]], i64 0}
102
103
// CHECK: [[TBAA_ROOT]] = !{!"Simple C/C++ TBAA"}
103
- //
104
+ // CHECK: [[P1INT_0]] = !{[[P1INT:!.+]], [[P1INT]], i64 0}
105
+ // CHECK: [[P1INT]] = !{!"p1 int", [[ANY_POINTER]], i64 0}
106
+ // CHECK: [[P3INT_0]] = !{[[P3INT:!.+]], [[P3INT]], i64 0}
107
+ // CHECK: [[P3INT]] = !{!"p3 int", [[ANY_POINTER]], i64 0}
108
+ // CHECK: [[P4CHAR_0]] = !{[[P4CHAR:!.+]], [[P4CHAR]], i64 0}
109
+ // CHECK: [[P4CHAR]] = !{!"p4 omnipotent char", [[ANY_POINTER]], i64 0}
110
+ // CHECK: [[P3CHAR_0]] = !{[[P3CHAR:!.+]], [[P3CHAR]], i64 0}
111
+ // CHECK: [[P3CHAR]] = !{!"p3 omnipotent char", [[ANY_POINTER]], i64 0}
112
+ // CHECK: [[P2CHAR_0]] = !{[[P2CHAR:!.+]], [[P2CHAR]], i64 0}
113
+ // CHECK: [[P2CHAR]] = !{!"p2 omnipotent char", [[ANY_POINTER]], i64 0}
114
+ // CHECK: [[P1CHAR_0]] = !{[[P1CHAR:!.+]], [[P1CHAR]], i64 0}
115
+ // CHECK: [[P1CHAR]] = !{!"p1 omnipotent char", [[ANY_POINTER]], i64 0}
0 commit comments