annotate llvm/test/Transforms/LICM/call-hoisting.ll @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1 ; RUN: opt -S -passes=licm %s | FileCheck %s
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
2 ; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
150
anatofuz
parents:
diff changeset
3
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
4 declare i32 @load(ptr %p) argmemonly readonly nounwind
150
anatofuz
parents:
diff changeset
5
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
6 define void @test_load(ptr noalias %loc, ptr noalias %sink) {
150
anatofuz
parents:
diff changeset
7 ; CHECK-LABEL: @test_load
anatofuz
parents:
diff changeset
8 ; CHECK-LABEL: entry:
anatofuz
parents:
diff changeset
9 ; CHECK: call i32 @load
anatofuz
parents:
diff changeset
10 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
11 entry:
anatofuz
parents:
diff changeset
12 br label %loop
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 loop:
anatofuz
parents:
diff changeset
15 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
16 %ret = call i32 @load(ptr %loc)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
17 store volatile i32 %ret, ptr %sink
150
anatofuz
parents:
diff changeset
18 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
19 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
20 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 exit:
anatofuz
parents:
diff changeset
23 ret void
anatofuz
parents:
diff changeset
24 }
anatofuz
parents:
diff changeset
25
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
26 declare i32 @spec(ptr %p, ptr %q) readonly argmemonly nounwind speculatable
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
27
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
28 ; We should strip the dereferenceable callsite attribute on spec call's argument since it is
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
29 ; can cause UB in the speculatable call when hoisted to preheader.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
30 ; However, we need not strip the nonnull attribute since it just propagates
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
31 ; poison if the parameter was indeed null.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
32 define void @test_strip_attribute(ptr noalias %loc, ptr noalias %sink, ptr %q) {
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
33 ; CHECK-LABEL: @test_strip_attribute(
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
34 ; CHECK-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
35 ; CHECK-NEXT: [[RET:%.*]] = call i32 @load(ptr [[LOC:%.*]])
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
36 ; CHECK-NEXT: [[NULLCHK:%.*]] = icmp eq ptr [[Q:%.*]], null
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
37 ; CHECK-NEXT: [[RET2:%.*]] = call i32 @spec(ptr nonnull [[Q]], ptr [[LOC]])
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
38 ; CHECK-NEXT: br label [[LOOP:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
39 ; CHECK: loop:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
40 ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[ISNULL:%.*]] ]
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
41 ; CHECK-NEXT: br i1 [[NULLCHK]], label [[ISNULL]], label [[NONNULLBB:%.*]]
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
42 entry:
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
43 br label %loop
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
44
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
45 loop:
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
46 %iv = phi i32 [0, %entry], [%iv.next, %isnull ]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
47 %ret = call i32 @load(ptr %loc)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
48 %nullchk = icmp eq ptr %q, null
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
49 br i1 %nullchk, label %isnull, label %nonnullbb
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
50
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
51 nonnullbb:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
52 %ret2 = call i32 @spec(ptr nonnull %q, ptr dereferenceable(12) %loc)
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
53 br label %isnull
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
54
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
55 isnull:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
56 store volatile i32 %ret, ptr %sink
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
57 %iv.next = add i32 %iv, 1
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
58 %cmp = icmp slt i32 %iv, 200
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
59 br i1 %cmp, label %loop, label %exit
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
60
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
61 exit:
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
62 ret void
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
63 }
150
anatofuz
parents:
diff changeset
64
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
65 declare void @store(i32 %val, ptr %p) argmemonly writeonly nounwind
150
anatofuz
parents:
diff changeset
66
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
67 define void @test(ptr %loc) {
150
anatofuz
parents:
diff changeset
68 ; CHECK-LABEL: @test
anatofuz
parents:
diff changeset
69 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
70 ; CHECK: call void @store
anatofuz
parents:
diff changeset
71 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
72 entry:
anatofuz
parents:
diff changeset
73 br label %loop
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 loop:
anatofuz
parents:
diff changeset
76 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
77 call void @store(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
78 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
79 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
80 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 exit:
anatofuz
parents:
diff changeset
83 ret void
anatofuz
parents:
diff changeset
84 }
anatofuz
parents:
diff changeset
85
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
86 define void @test_multiexit(ptr %loc, i1 %earlycnd) {
150
anatofuz
parents:
diff changeset
87 ; CHECK-LABEL: @test_multiexit
anatofuz
parents:
diff changeset
88 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
89 ; CHECK: call void @store
anatofuz
parents:
diff changeset
90 ; CHECK-LABEL: backedge:
anatofuz
parents:
diff changeset
91 entry:
anatofuz
parents:
diff changeset
92 br label %loop
anatofuz
parents:
diff changeset
93
anatofuz
parents:
diff changeset
94 loop:
anatofuz
parents:
diff changeset
95 %iv = phi i32 [0, %entry], [%iv.next, %backedge]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
96 call void @store(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
97 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
98 br i1 %earlycnd, label %exit1, label %backedge
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
99
150
anatofuz
parents:
diff changeset
100 backedge:
anatofuz
parents:
diff changeset
101 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
102 br i1 %cmp, label %loop, label %exit2
anatofuz
parents:
diff changeset
103
anatofuz
parents:
diff changeset
104 exit1:
anatofuz
parents:
diff changeset
105 ret void
anatofuz
parents:
diff changeset
106 exit2:
anatofuz
parents:
diff changeset
107 ret void
anatofuz
parents:
diff changeset
108 }
anatofuz
parents:
diff changeset
109
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
110 define void @neg_lv_value(ptr %loc) {
150
anatofuz
parents:
diff changeset
111 ; CHECK-LABEL: @neg_lv_value
anatofuz
parents:
diff changeset
112 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
113 ; CHECK: call void @store
anatofuz
parents:
diff changeset
114 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
115 entry:
anatofuz
parents:
diff changeset
116 br label %loop
anatofuz
parents:
diff changeset
117
anatofuz
parents:
diff changeset
118 loop:
anatofuz
parents:
diff changeset
119 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
120 call void @store(i32 %iv, ptr %loc)
150
anatofuz
parents:
diff changeset
121 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
122 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
123 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
124
anatofuz
parents:
diff changeset
125 exit:
anatofuz
parents:
diff changeset
126 ret void
anatofuz
parents:
diff changeset
127 }
anatofuz
parents:
diff changeset
128
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
129 define void @neg_lv_addr(ptr %loc) {
150
anatofuz
parents:
diff changeset
130 ; CHECK-LABEL: @neg_lv_addr
anatofuz
parents:
diff changeset
131 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
132 ; CHECK: call void @store
anatofuz
parents:
diff changeset
133 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
134 entry:
anatofuz
parents:
diff changeset
135 br label %loop
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 loop:
anatofuz
parents:
diff changeset
138 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
139 %p = getelementptr i32, ptr %loc, i32 %iv
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
140 call void @store(i32 0, ptr %p)
150
anatofuz
parents:
diff changeset
141 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
142 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
143 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
144
anatofuz
parents:
diff changeset
145 exit:
anatofuz
parents:
diff changeset
146 ret void
anatofuz
parents:
diff changeset
147 }
anatofuz
parents:
diff changeset
148
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
149 define void @neg_mod(ptr %loc) {
150
anatofuz
parents:
diff changeset
150 ; CHECK-LABEL: @neg_mod
anatofuz
parents:
diff changeset
151 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
152 ; CHECK: call void @store
anatofuz
parents:
diff changeset
153 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
154 entry:
anatofuz
parents:
diff changeset
155 br label %loop
anatofuz
parents:
diff changeset
156
anatofuz
parents:
diff changeset
157 loop:
anatofuz
parents:
diff changeset
158 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
159 call void @store(i32 0, ptr %loc)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
160 store i32 %iv, ptr %loc
150
anatofuz
parents:
diff changeset
161 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
162 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
163 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 exit:
anatofuz
parents:
diff changeset
166 ret void
anatofuz
parents:
diff changeset
167 }
anatofuz
parents:
diff changeset
168
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
169 define void @neg_ref(ptr %loc) {
150
anatofuz
parents:
diff changeset
170 ; CHECK-LABEL: @neg_ref
anatofuz
parents:
diff changeset
171 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
172 ; CHECK: call void @store
anatofuz
parents:
diff changeset
173 ; CHECK-LABEL: exit1:
anatofuz
parents:
diff changeset
174 entry:
anatofuz
parents:
diff changeset
175 br label %loop
anatofuz
parents:
diff changeset
176
anatofuz
parents:
diff changeset
177 loop:
anatofuz
parents:
diff changeset
178 %iv = phi i32 [0, %entry], [%iv.next, %backedge]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
179 call void @store(i32 0, ptr %loc)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
180 %v = load i32, ptr %loc
150
anatofuz
parents:
diff changeset
181 %earlycnd = icmp eq i32 %v, 198
anatofuz
parents:
diff changeset
182 br i1 %earlycnd, label %exit1, label %backedge
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
183
150
anatofuz
parents:
diff changeset
184 backedge:
anatofuz
parents:
diff changeset
185 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
186 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
187 br i1 %cmp, label %loop, label %exit2
anatofuz
parents:
diff changeset
188
anatofuz
parents:
diff changeset
189 exit1:
anatofuz
parents:
diff changeset
190 ret void
anatofuz
parents:
diff changeset
191 exit2:
anatofuz
parents:
diff changeset
192 ret void
anatofuz
parents:
diff changeset
193 }
anatofuz
parents:
diff changeset
194
anatofuz
parents:
diff changeset
195 declare void @modref()
anatofuz
parents:
diff changeset
196
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
197 define void @neg_modref(ptr %loc) {
150
anatofuz
parents:
diff changeset
198 ; CHECK-LABEL: @neg_modref
anatofuz
parents:
diff changeset
199 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
200 ; CHECK: call void @store
anatofuz
parents:
diff changeset
201 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
202 entry:
anatofuz
parents:
diff changeset
203 br label %loop
anatofuz
parents:
diff changeset
204
anatofuz
parents:
diff changeset
205 loop:
anatofuz
parents:
diff changeset
206 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
207 call void @store(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
208 call void @modref()
anatofuz
parents:
diff changeset
209 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
210 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
211 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
212
anatofuz
parents:
diff changeset
213 exit:
anatofuz
parents:
diff changeset
214 ret void
anatofuz
parents:
diff changeset
215 }
anatofuz
parents:
diff changeset
216
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
217 define void @neg_fence(ptr %loc) {
150
anatofuz
parents:
diff changeset
218 ; CHECK-LABEL: @neg_fence
anatofuz
parents:
diff changeset
219 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
220 ; CHECK: call void @store
anatofuz
parents:
diff changeset
221 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
222 entry:
anatofuz
parents:
diff changeset
223 br label %loop
anatofuz
parents:
diff changeset
224
anatofuz
parents:
diff changeset
225 loop:
anatofuz
parents:
diff changeset
226 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
227 call void @store(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
228 fence seq_cst
anatofuz
parents:
diff changeset
229 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
230 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
231 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
232
anatofuz
parents:
diff changeset
233 exit:
anatofuz
parents:
diff changeset
234 ret void
anatofuz
parents:
diff changeset
235 }
anatofuz
parents:
diff changeset
236
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
237 declare void @not_nounwind(i32 %v, ptr %p) writeonly argmemonly
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
238 declare void @not_argmemonly(i32 %v, ptr %p) writeonly nounwind
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
239 declare void @not_writeonly(i32 %v, ptr %p) argmemonly nounwind
150
anatofuz
parents:
diff changeset
240
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
241 define void @neg_not_nounwind(ptr %loc) {
150
anatofuz
parents:
diff changeset
242 ; CHECK-LABEL: @neg_not_nounwind
anatofuz
parents:
diff changeset
243 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
244 ; CHECK: call void @not_nounwind
anatofuz
parents:
diff changeset
245 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
246 entry:
anatofuz
parents:
diff changeset
247 br label %loop
anatofuz
parents:
diff changeset
248
anatofuz
parents:
diff changeset
249 loop:
anatofuz
parents:
diff changeset
250 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
251 call void @not_nounwind(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
252 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
253 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
254 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
255
anatofuz
parents:
diff changeset
256 exit:
anatofuz
parents:
diff changeset
257 ret void
anatofuz
parents:
diff changeset
258 }
anatofuz
parents:
diff changeset
259
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
260 define void @neg_not_argmemonly(ptr %loc) {
150
anatofuz
parents:
diff changeset
261 ; CHECK-LABEL: @neg_not_argmemonly
anatofuz
parents:
diff changeset
262 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
263 ; CHECK: call void @not_argmemonly
anatofuz
parents:
diff changeset
264 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
265 entry:
anatofuz
parents:
diff changeset
266 br label %loop
anatofuz
parents:
diff changeset
267
anatofuz
parents:
diff changeset
268 loop:
anatofuz
parents:
diff changeset
269 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
270 call void @not_argmemonly(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
271 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
272 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
273 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
274
anatofuz
parents:
diff changeset
275 exit:
anatofuz
parents:
diff changeset
276 ret void
anatofuz
parents:
diff changeset
277 }
anatofuz
parents:
diff changeset
278
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
279 define void @neg_not_writeonly(ptr %loc) {
150
anatofuz
parents:
diff changeset
280 ; CHECK-LABEL: @neg_not_writeonly
anatofuz
parents:
diff changeset
281 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
282 ; CHECK: call void @not_writeonly
anatofuz
parents:
diff changeset
283 ; CHECK-LABEL: exit:
anatofuz
parents:
diff changeset
284 entry:
anatofuz
parents:
diff changeset
285 br label %loop
anatofuz
parents:
diff changeset
286
anatofuz
parents:
diff changeset
287 loop:
anatofuz
parents:
diff changeset
288 %iv = phi i32 [0, %entry], [%iv.next, %loop]
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
289 call void @not_writeonly(i32 0, ptr %loc)
150
anatofuz
parents:
diff changeset
290 %iv.next = add i32 %iv, 1
anatofuz
parents:
diff changeset
291 %cmp = icmp slt i32 %iv, 200
anatofuz
parents:
diff changeset
292 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
293
anatofuz
parents:
diff changeset
294 exit:
anatofuz
parents:
diff changeset
295 ret void
anatofuz
parents:
diff changeset
296 }
anatofuz
parents:
diff changeset
297