Skip to content

Commit c66ce08

Browse files
committed
[Inline] Add tests for captures-before check for scoped AA metadata (NFC)
1 parent 0764f65 commit c66ce08

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=inline %s | FileCheck %s
3+
4+
declare ptr @get_ptr()
5+
declare void @capture(ptr)
6+
7+
define void @callee_no_capture(ptr noalias %p) {
8+
; CHECK-LABEL: define void @callee_no_capture(
9+
; CHECK-SAME: ptr noalias [[P:%.*]]) {
10+
; CHECK-NEXT: [[P2:%.*]] = call ptr @get_ptr()
11+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[P]], align 4
12+
; CHECK-NEXT: store i32 [[V]], ptr [[P2]], align 4
13+
; CHECK-NEXT: ret void
14+
;
15+
%p2 = call ptr @get_ptr()
16+
%v = load i32, ptr %p
17+
store i32 %v, ptr %p2
18+
ret void
19+
}
20+
21+
define void @test_no_capture(ptr %p) {
22+
; CHECK-LABEL: define void @test_no_capture(
23+
; CHECK-SAME: ptr [[P:%.*]]) {
24+
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
25+
; CHECK-NEXT: [[P2_I:%.*]] = call ptr @get_ptr(), !noalias [[META0]]
26+
; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P]], align 4, !alias.scope [[META0]]
27+
; CHECK-NEXT: store i32 [[V_I]], ptr [[P2_I]], align 4, !noalias [[META0]]
28+
; CHECK-NEXT: ret void
29+
;
30+
call void @callee_no_capture(ptr %p)
31+
ret void
32+
}
33+
34+
define void @callee_capture(ptr noalias %p) {
35+
; CHECK-LABEL: define void @callee_capture(
36+
; CHECK-SAME: ptr noalias [[P:%.*]]) {
37+
; CHECK-NEXT: call void @capture(ptr [[P]])
38+
; CHECK-NEXT: [[P2:%.*]] = call ptr @get_ptr()
39+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[P]], align 4
40+
; CHECK-NEXT: store i32 [[V]], ptr [[P2]], align 4
41+
; CHECK-NEXT: ret void
42+
;
43+
call void @capture(ptr %p)
44+
%p2 = call ptr @get_ptr()
45+
%v = load i32, ptr %p
46+
store i32 %v, ptr %p2
47+
ret void
48+
}
49+
50+
define void @test_capture(ptr %p) {
51+
; CHECK-LABEL: define void @test_capture(
52+
; CHECK-SAME: ptr [[P:%.*]]) {
53+
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
54+
; CHECK-NEXT: call void @capture(ptr [[P]])
55+
; CHECK-NEXT: [[P2_I:%.*]] = call ptr @get_ptr()
56+
; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P]], align 4, !alias.scope [[META3]]
57+
; CHECK-NEXT: store i32 [[V_I]], ptr [[P2_I]], align 4
58+
; CHECK-NEXT: ret void
59+
;
60+
call void @callee_capture(ptr %p)
61+
ret void
62+
}
63+
64+
define void @callee_addr_only_capture(ptr noalias %p) {
65+
; CHECK-LABEL: define void @callee_addr_only_capture(
66+
; CHECK-SAME: ptr noalias [[P:%.*]]) {
67+
; CHECK-NEXT: call void @capture(ptr captures(address) [[P]])
68+
; CHECK-NEXT: [[P2:%.*]] = call ptr @get_ptr()
69+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[P]], align 4
70+
; CHECK-NEXT: store i32 [[V]], ptr [[P2]], align 4
71+
; CHECK-NEXT: ret void
72+
;
73+
call void @capture(ptr captures(address) %p)
74+
%p2 = call ptr @get_ptr()
75+
%v = load i32, ptr %p
76+
store i32 %v, ptr %p2
77+
ret void
78+
}
79+
80+
define void @test_addr_only_capture(ptr %p) {
81+
; CHECK-LABEL: define void @test_addr_only_capture(
82+
; CHECK-SAME: ptr [[P:%.*]]) {
83+
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])
84+
; CHECK-NEXT: call void @capture(ptr captures(address) [[P]])
85+
; CHECK-NEXT: [[P2_I:%.*]] = call ptr @get_ptr()
86+
; CHECK-NEXT: [[V_I:%.*]] = load i32, ptr [[P]], align 4, !alias.scope [[META6]]
87+
; CHECK-NEXT: store i32 [[V_I]], ptr [[P2_I]], align 4
88+
; CHECK-NEXT: ret void
89+
;
90+
call void @callee_addr_only_capture(ptr %p)
91+
ret void
92+
}
93+
;.
94+
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
95+
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee_no_capture: %p"}
96+
; CHECK: [[META2]] = distinct !{[[META2]], !"callee_no_capture"}
97+
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
98+
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]], !"callee_capture: %p"}
99+
; CHECK: [[META5]] = distinct !{[[META5]], !"callee_capture"}
100+
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
101+
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"callee_addr_only_capture: %p"}
102+
; CHECK: [[META8]] = distinct !{[[META8]], !"callee_addr_only_capture"}
103+
;.

0 commit comments

Comments
 (0)