Skip to content

Commit 7d44645

Browse files
committed
[GVN] Add test with different captures attributes (NFC)
1 parent f59742c commit 7d44645

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

llvm/test/Transforms/GVN/captures.ll

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=gvn < %s | FileCheck %s
3+
4+
declare void @capture(ptr)
5+
declare void @unknown_call()
6+
7+
define i32 @full_capture() {
8+
; CHECK-LABEL: define i32 @full_capture() {
9+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
10+
; CHECK-NEXT: call void @capture(ptr [[A]])
11+
; CHECK-NEXT: store i32 1, ptr [[A]], align 4
12+
; CHECK-NEXT: call void @unknown_call()
13+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4
14+
; CHECK-NEXT: ret i32 [[V]]
15+
;
16+
%a = alloca i32
17+
call void @capture(ptr %a)
18+
store i32 1, ptr %a
19+
call void @unknown_call()
20+
%v = load i32, ptr %a
21+
ret i32 %v
22+
}
23+
24+
define i32 @address_capture() {
25+
; CHECK-LABEL: define i32 @address_capture() {
26+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
27+
; CHECK-NEXT: call void @capture(ptr captures(address) [[A]])
28+
; CHECK-NEXT: store i32 1, ptr [[A]], align 4
29+
; CHECK-NEXT: call void @unknown_call()
30+
; CHECK-NEXT: ret i32 1
31+
;
32+
%a = alloca i32
33+
call void @capture(ptr captures(address) %a)
34+
store i32 1, ptr %a
35+
call void @unknown_call()
36+
%v = load i32, ptr %a
37+
ret i32 %v
38+
}
39+
40+
define i32 @read_provenance_capture() {
41+
; CHECK-LABEL: define i32 @read_provenance_capture() {
42+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
43+
; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])
44+
; CHECK-NEXT: store i32 1, ptr [[A]], align 4
45+
; CHECK-NEXT: call void @unknown_call()
46+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4
47+
; CHECK-NEXT: ret i32 [[V]]
48+
;
49+
%a = alloca i32
50+
call void @capture(ptr captures(address, read_provenance) %a)
51+
store i32 1, ptr %a
52+
call void @unknown_call()
53+
%v = load i32, ptr %a
54+
ret i32 %v
55+
}
56+
57+
define i32 @read_provenance_capture_and_full_capture() {
58+
; CHECK-LABEL: define i32 @read_provenance_capture_and_full_capture() {
59+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
60+
; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])
61+
; CHECK-NEXT: call void @capture(ptr [[A]])
62+
; CHECK-NEXT: store i32 1, ptr [[A]], align 4
63+
; CHECK-NEXT: call void @unknown_call()
64+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4
65+
; CHECK-NEXT: ret i32 [[V]]
66+
;
67+
%a = alloca i32
68+
call void @capture(ptr captures(address, read_provenance) %a)
69+
call void @capture(ptr %a)
70+
store i32 1, ptr %a
71+
call void @unknown_call()
72+
%v = load i32, ptr %a
73+
ret i32 %v
74+
}
75+
76+
define i32 @read_provenance_capture_and_full_capture_commuted() {
77+
; CHECK-LABEL: define i32 @read_provenance_capture_and_full_capture_commuted() {
78+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
79+
; CHECK-NEXT: call void @capture(ptr [[A]])
80+
; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])
81+
; CHECK-NEXT: store i32 1, ptr [[A]], align 4
82+
; CHECK-NEXT: call void @unknown_call()
83+
; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 4
84+
; CHECK-NEXT: ret i32 [[V]]
85+
;
86+
%a = alloca i32
87+
call void @capture(ptr %a)
88+
call void @capture(ptr captures(address, read_provenance) %a)
89+
store i32 1, ptr %a
90+
call void @unknown_call()
91+
%v = load i32, ptr %a
92+
ret i32 %v
93+
}

0 commit comments

Comments
 (0)