Skip to content

Commit a41ae90

Browse files
committed
[MergeLodstore] Add tests for preserving metadata when sinking stores.
1 parent 62c3c1c commit a41ae90

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes=mldst-motion -S %s | FileCheck %s
3+
4+
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"
5+
6+
; FIXME: Can preserve common metadata on the sunk store.
7+
define void @perserve_common_metadata(i1 %c, ptr %dst, ptr %min) {
8+
; CHECK-LABEL: define void @perserve_common_metadata(
9+
; CHECK-SAME: i1 [[C:%.*]], ptr [[DST:%.*]], ptr [[MIN:%.*]]) {
10+
; CHECK-NEXT: [[ENTRY:.*:]]
11+
; CHECK-NEXT: [[GEP_DST_16:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 16
12+
; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[ELSE:.*]]
13+
; CHECK: [[THEN]]:
14+
; CHECK-NEXT: store ptr [[DST]], ptr [[MIN]], align 8, !tbaa [[TBAA0:![0-9]+]]
15+
; CHECK-NEXT: br label %[[RETURN:.*]]
16+
; CHECK: [[ELSE]]:
17+
; CHECK-NEXT: [[GEP_DST_24:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 24
18+
; CHECK-NEXT: store ptr null, ptr [[GEP_DST_24]], align 8
19+
; CHECK-NEXT: br label %[[RETURN]]
20+
; CHECK: [[RETURN]]:
21+
; CHECK-NEXT: [[DOTSINK:%.*]] = phi ptr [ [[DST]], %[[THEN]] ], [ null, %[[ELSE]] ]
22+
; CHECK-NEXT: store ptr [[DOTSINK]], ptr [[GEP_DST_16]], align 8
23+
; CHECK-NEXT: ret void
24+
;
25+
entry:
26+
%gep.dst.16 = getelementptr inbounds nuw i8, ptr %dst, i64 16
27+
br i1 %c, label %then, label %else
28+
29+
then:
30+
store ptr %dst, ptr %gep.dst.16, align 8, !tbaa !0, !alias.scope !9, !noalias !9, !llvm.access.group !13
31+
store ptr %dst, ptr %min, align 8, !tbaa !5
32+
br label %return
33+
34+
else:
35+
store ptr null, ptr %gep.dst.16, align 8, !tbaa !0, !alias.scope !9, !noalias !9, !llvm.access.group !13
36+
%gep.dst.24 = getelementptr inbounds nuw i8, ptr %dst, i64 24
37+
store ptr null, ptr %gep.dst.24, align 8
38+
br label %return
39+
40+
return:
41+
ret void
42+
}
43+
44+
define void @clear_different_metadata(i1 %c, ptr %dst, ptr %min) {
45+
; CHECK-LABEL: define void @clear_different_metadata(
46+
; CHECK-SAME: i1 [[C:%.*]], ptr [[DST:%.*]], ptr [[MIN:%.*]]) {
47+
; CHECK-NEXT: [[ENTRY:.*:]]
48+
; CHECK-NEXT: [[GEP_DST_16:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 16
49+
; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[ELSE:.*]]
50+
; CHECK: [[THEN]]:
51+
; CHECK-NEXT: store ptr [[DST]], ptr [[MIN]], align 8, !tbaa [[TBAA4:![0-9]+]]
52+
; CHECK-NEXT: br label %[[RETURN:.*]]
53+
; CHECK: [[ELSE]]:
54+
; CHECK-NEXT: [[GEP_DST_24:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 24
55+
; CHECK-NEXT: store ptr null, ptr [[GEP_DST_24]], align 8
56+
; CHECK-NEXT: br label %[[RETURN]]
57+
; CHECK: [[RETURN]]:
58+
; CHECK-NEXT: [[DOTSINK:%.*]] = phi ptr [ [[DST]], %[[THEN]] ], [ null, %[[ELSE]] ]
59+
; CHECK-NEXT: store ptr [[DOTSINK]], ptr [[GEP_DST_16]], align 8
60+
; CHECK-NEXT: ret void
61+
;
62+
entry:
63+
%gep.dst.16 = getelementptr inbounds nuw i8, ptr %dst, i64 16
64+
br i1 %c, label %then, label %else
65+
66+
then:
67+
store ptr %dst, ptr %gep.dst.16, align 8, !tbaa !5, !alias.scope !9, !noalias !9, !llvm.access.group !13
68+
store ptr %dst, ptr %min, align 8, !tbaa !6
69+
br label %return
70+
71+
else:
72+
store ptr null, ptr %gep.dst.16, align 8, !tbaa !6, !alias.scope !12, !noalias !12, !llvm.access.group !14
73+
%gep.dst.24 = getelementptr inbounds nuw i8, ptr %dst, i64 24
74+
store ptr null, ptr %gep.dst.24, align 8
75+
br label %return
76+
77+
return:
78+
ret void
79+
}
80+
81+
!0 = !{!1, !1, i64 0, i64 0}
82+
!1 = !{!"long", !2}
83+
!2 = !{!"omnipotent char", !3, i64 0}
84+
!3 = !{!"Simple C++ TBAA"}
85+
!4 = !{!5, !5, i64 0, i64 0}
86+
!5 = !{!"int", !2}
87+
!6 = !{!7, !7, i64 0, i64 0}
88+
!7 = !{!"p2 _Foo", !8}
89+
!8 = !{!"any pointer", !2, i64 0}
90+
!9 = !{!10}
91+
!10 = distinct !{!10, !11}
92+
!11 = distinct !{!11}
93+
!12 = distinct !{!10}
94+
!13 = distinct !{}
95+
!14 = distinct !{}
96+
;.
97+
; CHECK: [[TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}
98+
; CHECK: [[META1]] = !{!"int", [[META2:![0-9]+]]}
99+
; CHECK: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]], i64 0}
100+
; CHECK: [[META3]] = !{!"Simple C++ TBAA"}
101+
; CHECK: [[TBAA4]] = !{[[META5:![0-9]+]], [[META5]], i64 0, i64 0}
102+
; CHECK: [[META5]] = !{!"p2 _Foo", [[META6:![0-9]+]]}
103+
; CHECK: [[META6]] = !{!"any pointer", [[META2]], i64 0}
104+
;.

0 commit comments

Comments
 (0)