Skip to content

Commit cb9cb4e

Browse files
[UTC] Introduce test for PR147670 (NFC)
1 parent 20cfaf0 commit cb9cb4e

File tree

3 files changed

+247
-0
lines changed

3 files changed

+247
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
; RUN: opt < %s -S | FileCheck %s
2+
3+
define void @store_unsignedptr(ptr %ptr) {
4+
entry:
5+
store ptr null, ptr %ptr, align 8, !tbaa !0
6+
ret void
7+
}
8+
9+
define void @store_char(ptr %ptr) {
10+
entry:
11+
store i8 0, ptr %ptr, align 1, !tbaa !5
12+
ret void
13+
}
14+
15+
define float @ptr_to_float(ptr %ptr) {
16+
entry:
17+
store float 0.000000e+00, ptr %ptr, align 4, !tbaa !6
18+
call void @opaque(ptr %ptr)
19+
%val = load float, ptr %ptr, align 4, !tbaa !6
20+
ret float %val
21+
}
22+
23+
define i64 @ptr_to_longlong(ptr %ptr) {
24+
entry:
25+
%val = load i64, ptr %ptr, align 8, !tbaa !8
26+
store i64 0, ptr %ptr, align 8, !tbaa !8
27+
ret i64 %val
28+
}
29+
30+
; struct STRUCT1 {
31+
; int x;
32+
; int y;
33+
; };
34+
35+
define void @store_struct1ptr(ptr %ptr) {
36+
entry:
37+
; *(struct STRUCT1 **)ptr = 0;
38+
store ptr null, ptr %ptr, align 8, !tbaa !10
39+
ret void
40+
}
41+
42+
; struct STRUCT2 {
43+
; struct STRUCT1 *s;
44+
; };
45+
46+
define void @store_struct2(ptr %ptr) {
47+
entry:
48+
; ptr->s = 0;
49+
store ptr null, ptr %ptr, align 8, !tbaa !12
50+
ret void
51+
}
52+
53+
define double @access_matrix(ptr %ptr) {
54+
entry:
55+
%alloca.ptr = alloca ptr, align 8
56+
store ptr %ptr, ptr %alloca.ptr, align 8, !tbaa !14
57+
%ptr.idx = load ptr, ptr %alloca.ptr, align 8, !tbaa !14
58+
%add.ptr = getelementptr inbounds ptr, ptr %ptr.idx, i64 4
59+
%ptr.idx.1 = load ptr, ptr %add.ptr, align 8, !tbaa !16
60+
%add.ptr1 = getelementptr inbounds [6 x double], ptr %ptr.idx.1, i64 6
61+
%ptr.idx.2 = load <6 x double>, ptr %add.ptr1, align 8, !tbaa !5
62+
%matrixext = extractelement <6 x double> %ptr.idx.2, i64 5
63+
ret double %matrixext
64+
}
65+
66+
declare void @opaque(ptr)
67+
68+
!0 = !{!1, !1, i64 0}
69+
!1 = !{!"p1 int", !2, i64 0}
70+
!2 = !{!"any pointer", !3, i64 0}
71+
!3 = !{!"omnipotent char", !4, i64 0}
72+
!4 = !{!"Simple C/C++ TBAA"}
73+
!5 = !{!3, !3, i64 0}
74+
!6 = !{!7, !7, i64 0}
75+
!7 = !{!"float", !3, i64 0}
76+
!8 = !{!9, !9, i64 0}
77+
!9 = !{!"long long", !3, i64 0}
78+
!10 = !{!11, !11, i64 0}
79+
!11 = !{!"p1 _ZTS7STRUCT1", !2, i64 0}
80+
!12 = !{!13, !11, i64 0}
81+
!13 = !{!"STRUCT2", !11, i64 0}
82+
!14 = !{!15, !15, i64 0}
83+
!15 = !{!"any p2 pointer", !2, i64 0}
84+
!16 = !{!2, !2, i64 0}
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -S | FileCheck %s
3+
4+
define void @store_unsignedptr(ptr %ptr) {
5+
; CHECK-LABEL: define void @store_unsignedptr(
6+
; CHECK-SAME: ptr [[PTR:%.*]]) {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[TBAA0:![0-9]+]]
9+
; CHECK-NEXT: ret void
10+
;
11+
entry:
12+
store ptr null, ptr %ptr, align 8, !tbaa !0
13+
ret void
14+
}
15+
16+
define void @store_char(ptr %ptr) {
17+
; CHECK-LABEL: define void @store_char(
18+
; CHECK-SAME: ptr [[PTR:%.*]]) {
19+
; CHECK-NEXT: [[ENTRY:.*:]]
20+
; CHECK-NEXT: store i8 0, ptr [[PTR]], align 1, !tbaa [[TBAA5:![0-9]+]]
21+
; CHECK-NEXT: ret void
22+
;
23+
entry:
24+
store i8 0, ptr %ptr, align 1, !tbaa !5
25+
ret void
26+
}
27+
28+
define float @ptr_to_float(ptr %ptr) {
29+
; CHECK-LABEL: define float @ptr_to_float(
30+
; CHECK-SAME: ptr [[PTR:%.*]]) {
31+
; CHECK-NEXT: [[ENTRY:.*:]]
32+
; CHECK-NEXT: store float 0.000000e+00, ptr [[PTR]], align 4, !tbaa [[TBAA6:![0-9]+]]
33+
; CHECK-NEXT: call void @opaque(ptr [[PTR]])
34+
; CHECK-NEXT: [[VAL:%.*]] = load float, ptr [[PTR]], align 4, !tbaa [[TBAA6]]
35+
; CHECK-NEXT: ret float [[VAL]]
36+
;
37+
entry:
38+
store float 0.000000e+00, ptr %ptr, align 4, !tbaa !6
39+
call void @opaque(ptr %ptr)
40+
%val = load float, ptr %ptr, align 4, !tbaa !6
41+
ret float %val
42+
}
43+
44+
define i64 @ptr_to_longlong(ptr %ptr) {
45+
; CHECK-LABEL: define i64 @ptr_to_longlong(
46+
; CHECK-SAME: ptr [[PTR:%.*]]) {
47+
; CHECK-NEXT: [[ENTRY:.*:]]
48+
; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR]], align 8, !tbaa [[TBAA8:![0-9]+]]
49+
; CHECK-NEXT: store i64 0, ptr [[PTR]], align 8, !tbaa [[TBAA8]]
50+
; CHECK-NEXT: ret i64 [[VAL]]
51+
;
52+
entry:
53+
%val = load i64, ptr %ptr, align 8, !tbaa !8
54+
store i64 0, ptr %ptr, align 8, !tbaa !8
55+
ret i64 %val
56+
}
57+
58+
; struct STRUCT1 {
59+
; int x;
60+
; int y;
61+
; };
62+
63+
define void @store_struct1ptr(ptr %ptr) {
64+
; CHECK-LABEL: define void @store_struct1ptr(
65+
; CHECK-SAME: ptr [[PTR:%.*]]) {
66+
; CHECK-NEXT: [[ENTRY:.*:]]
67+
; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[TBAA10:![0-9]+]]
68+
; CHECK-NEXT: ret void
69+
;
70+
entry:
71+
; *(struct STRUCT1 **)ptr = 0;
72+
store ptr null, ptr %ptr, align 8, !tbaa !10
73+
ret void
74+
}
75+
76+
; struct STRUCT2 {
77+
; struct STRUCT1 *s;
78+
; };
79+
80+
define void @store_struct2(ptr %ptr) {
81+
; CHECK-LABEL: define void @store_struct2(
82+
; CHECK-SAME: ptr [[PTR:%.*]]) {
83+
; CHECK-NEXT: [[ENTRY:.*:]]
84+
; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[TBAA12:![0-9]+]]
85+
; CHECK-NEXT: ret void
86+
;
87+
entry:
88+
; ptr->s = 0;
89+
store ptr null, ptr %ptr, align 8, !tbaa !12
90+
ret void
91+
}
92+
93+
define double @access_matrix(ptr %ptr) {
94+
; CHECK-LABEL: define double @access_matrix(
95+
; CHECK-SAME: ptr [[PTR:%.*]]) {
96+
; CHECK-NEXT: [[ENTRY:.*:]]
97+
; CHECK-NEXT: [[ALLOCA_PTR:%.*]] = alloca ptr, align 8
98+
; CHECK-NEXT: store ptr [[PTR]], ptr [[ALLOCA_PTR]], align 8, !tbaa [[TBAA14:![0-9]+]]
99+
; CHECK-NEXT: [[PTR_IDX:%.*]] = load ptr, ptr [[ALLOCA_PTR]], align 8, !tbaa [[TBAA14]]
100+
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds ptr, ptr [[PTR_IDX]], i64 4
101+
; CHECK-NEXT: [[PTR_IDX_1:%.*]] = load ptr, ptr [[ADD_PTR]], align 8, !tbaa [[TBAA16:![0-9]+]]
102+
; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds [6 x double], ptr [[PTR_IDX_1]], i64 6
103+
; CHECK-NEXT: [[PTR_IDX_2:%.*]] = load <6 x double>, ptr [[ADD_PTR1]], align 8, !tbaa [[TBAA5]]
104+
; CHECK-NEXT: [[MATRIXEXT:%.*]] = extractelement <6 x double> [[PTR_IDX_2]], i64 5
105+
; CHECK-NEXT: ret double [[MATRIXEXT]]
106+
;
107+
entry:
108+
%alloca.ptr = alloca ptr, align 8
109+
store ptr %ptr, ptr %alloca.ptr, align 8, !tbaa !14
110+
%ptr.idx = load ptr, ptr %alloca.ptr, align 8, !tbaa !14
111+
%add.ptr = getelementptr inbounds ptr, ptr %ptr.idx, i64 4
112+
%ptr.idx.1 = load ptr, ptr %add.ptr, align 8, !tbaa !16
113+
%add.ptr1 = getelementptr inbounds [6 x double], ptr %ptr.idx.1, i64 6
114+
%ptr.idx.2 = load <6 x double>, ptr %add.ptr1, align 8, !tbaa !5
115+
%matrixext = extractelement <6 x double> %ptr.idx.2, i64 5
116+
ret double %matrixext
117+
}
118+
119+
declare void @opaque(ptr)
120+
121+
!0 = !{!1, !1, i64 0}
122+
!1 = !{!"p1 int", !2, i64 0}
123+
!2 = !{!"any pointer", !3, i64 0}
124+
!3 = !{!"omnipotent char", !4, i64 0}
125+
!4 = !{!"Simple C/C++ TBAA"}
126+
!5 = !{!3, !3, i64 0}
127+
!6 = !{!7, !7, i64 0}
128+
!7 = !{!"float", !3, i64 0}
129+
!8 = !{!9, !9, i64 0}
130+
!9 = !{!"long long", !3, i64 0}
131+
!10 = !{!11, !11, i64 0}
132+
!11 = !{!"p1 _ZTS7STRUCT1", !2, i64 0}
133+
!12 = !{!13, !11, i64 0}
134+
!13 = !{!"STRUCT2", !11, i64 0}
135+
!14 = !{!15, !15, i64 0}
136+
!15 = !{!"any p2 pointer", !2, i64 0}
137+
!16 = !{!2, !2, i64 0}
138+
;.
139+
; CHECK: [[TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}
140+
; CHECK: [[META1]] = !{!"p1 int", [[META2:![0-9]+]], i64 0}
141+
; CHECK: [[META2]] = !{!"any pointer", [[META3:![0-9]+]], i64 0}
142+
; CHECK: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0}
143+
; CHECK: [[META4]] = !{!"Simple C/C++ TBAA"}
144+
; CHECK: [[TBAA5]] = !{[[META3]], [[META3]], i64 0}
145+
; CHECK: [[TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}
146+
; CHECK: [[META7]] = !{!"float", [[META3]], i64 0}
147+
; CHECK: [[TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0}
148+
; CHECK: [[META9]] = !{!"long long", [[META3]], i64 0}
149+
; CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0}
150+
; CHECK: [[META11]] = !{!"p1 _ZTS7STRUCT1", [[META2]], i64 0}
151+
; CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META11]], i64 0}
152+
; CHECK: [[META13]] = !{!"STRUCT2", [[META11]], i64 0}
153+
; CHECK: [[TBAA14]] = !{[[META15:![0-9]+]], [[META15]], i64 0}
154+
; CHECK: [[META15]] = !{!"any p2 pointer", [[META2]], i64 0}
155+
; CHECK: [[TBAA16]] = !{[[META2]], [[META2]], i64 0}
156+
;.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## Test correct application of TBAA semantics in TBAA check lines.
2+
# RUN: cp -f %S/Inputs/tbaa-semantics-checks.ll %t.ll && %update_test_checks --version 5 %t.ll
3+
# RUN: diff -u %t.ll %S/Inputs/tbaa-semantics-checks.ll.expected
4+
5+
## Check that running the script again does not change the result.
6+
# RUN: %update_test_checks %t.ll
7+
# RUN: diff -u %t.ll %S/Inputs/tbaa-semantics-checks.ll.expected

0 commit comments

Comments
 (0)