1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9 %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX1010 %s
4 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX10,GFX1030 %s
6 define void @uniform_br_no_metadata(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef inreg %flag) {
7 ; GFX9-LABEL: uniform_br_no_metadata:
8 ; GFX9: ; %bb.0: ; %entry
9 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10 ; GFX9-NEXT: s_cmp_lt_i32 s23, 1
11 ; GFX9-NEXT: s_cbranch_scc1 .LBB0_2
12 ; GFX9-NEXT: ; %bb.1: ; %if.then
13 ; GFX9-NEXT: s_mov_b32 s7, s20
14 ; GFX9-NEXT: s_mov_b32 s6, s19
15 ; GFX9-NEXT: s_mov_b32 s5, s18
16 ; GFX9-NEXT: s_mov_b32 s4, s17
17 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
18 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
19 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
20 ; GFX9-NEXT: .LBB0_2: ; %if.end
21 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22 ; GFX9-NEXT: s_setpc_b64 s[30:31]
24 ; GFX10-LABEL: uniform_br_no_metadata:
25 ; GFX10: ; %bb.0: ; %entry
26 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27 ; GFX10-NEXT: s_cmp_lt_i32 s23, 1
28 ; GFX10-NEXT: s_cbranch_scc1 .LBB0_2
29 ; GFX10-NEXT: ; %bb.1: ; %if.then
30 ; GFX10-NEXT: v_mov_b32_e32 v0, s16
31 ; GFX10-NEXT: v_mov_b32_e32 v1, s21
32 ; GFX10-NEXT: s_mov_b32 s7, s20
33 ; GFX10-NEXT: s_mov_b32 s6, s19
34 ; GFX10-NEXT: s_mov_b32 s5, s18
35 ; GFX10-NEXT: s_mov_b32 s4, s17
36 ; GFX10-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
37 ; GFX10-NEXT: .LBB0_2: ; %if.end
38 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39 ; GFX10-NEXT: s_setpc_b64 s[30:31]
41 %cmp = icmp sgt i32 %flag, 0
42 br i1 %cmp, label %if.then, label %if.end
45 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
49 call void @llvm.amdgcn.s.waitcnt(i32 0)
53 define void @uniform_br_unprofitable(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef inreg %flag) {
54 ; GFX9-LABEL: uniform_br_unprofitable:
55 ; GFX9: ; %bb.0: ; %entry
56 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
57 ; GFX9-NEXT: s_cmp_lt_i32 s23, 1
58 ; GFX9-NEXT: s_cbranch_scc1 .LBB1_2
59 ; GFX9-NEXT: ; %bb.1: ; %if.then
60 ; GFX9-NEXT: s_mov_b32 s7, s20
61 ; GFX9-NEXT: s_mov_b32 s6, s19
62 ; GFX9-NEXT: s_mov_b32 s5, s18
63 ; GFX9-NEXT: s_mov_b32 s4, s17
64 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
65 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
66 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
67 ; GFX9-NEXT: .LBB1_2: ; %if.end
68 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
69 ; GFX9-NEXT: s_setpc_b64 s[30:31]
71 ; GFX10-LABEL: uniform_br_unprofitable:
72 ; GFX10: ; %bb.0: ; %entry
73 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74 ; GFX10-NEXT: s_cmp_lt_i32 s23, 1
75 ; GFX10-NEXT: s_cbranch_scc1 .LBB1_2
76 ; GFX10-NEXT: ; %bb.1: ; %if.then
77 ; GFX10-NEXT: v_mov_b32_e32 v0, s16
78 ; GFX10-NEXT: v_mov_b32_e32 v1, s21
79 ; GFX10-NEXT: s_mov_b32 s7, s20
80 ; GFX10-NEXT: s_mov_b32 s6, s19
81 ; GFX10-NEXT: s_mov_b32 s5, s18
82 ; GFX10-NEXT: s_mov_b32 s4, s17
83 ; GFX10-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
84 ; GFX10-NEXT: .LBB1_2: ; %if.end
85 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
86 ; GFX10-NEXT: s_setpc_b64 s[30:31]
88 %cmp = icmp sgt i32 %flag, 0
89 br i1 %cmp, label %if.then, label %if.end, !prof !0
92 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
96 call void @llvm.amdgcn.s.waitcnt(i32 0)
100 define void @uniform_br_profitable(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef inreg %flag) {
101 ; GFX9-LABEL: uniform_br_profitable:
102 ; GFX9: ; %bb.0: ; %entry
103 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
104 ; GFX9-NEXT: s_cmp_lt_i32 s23, 1
105 ; GFX9-NEXT: s_cbranch_scc1 .LBB2_2
106 ; GFX9-NEXT: ; %bb.1: ; %if.then
107 ; GFX9-NEXT: s_mov_b32 s7, s20
108 ; GFX9-NEXT: s_mov_b32 s6, s19
109 ; GFX9-NEXT: s_mov_b32 s5, s18
110 ; GFX9-NEXT: s_mov_b32 s4, s17
111 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
112 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
113 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
114 ; GFX9-NEXT: .LBB2_2: ; %if.end
115 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
116 ; GFX9-NEXT: s_setpc_b64 s[30:31]
118 ; GFX10-LABEL: uniform_br_profitable:
119 ; GFX10: ; %bb.0: ; %entry
120 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
121 ; GFX10-NEXT: s_cmp_lt_i32 s23, 1
122 ; GFX10-NEXT: s_cbranch_scc1 .LBB2_2
123 ; GFX10-NEXT: ; %bb.1: ; %if.then
124 ; GFX10-NEXT: v_mov_b32_e32 v0, s16
125 ; GFX10-NEXT: v_mov_b32_e32 v1, s21
126 ; GFX10-NEXT: s_mov_b32 s7, s20
127 ; GFX10-NEXT: s_mov_b32 s6, s19
128 ; GFX10-NEXT: s_mov_b32 s5, s18
129 ; GFX10-NEXT: s_mov_b32 s4, s17
130 ; GFX10-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
131 ; GFX10-NEXT: .LBB2_2: ; %if.end
132 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
133 ; GFX10-NEXT: s_setpc_b64 s[30:31]
135 %cmp = icmp sgt i32 %flag, 0
136 br i1 %cmp, label %if.then, label %if.end, !prof !1
139 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
143 call void @llvm.amdgcn.s.waitcnt(i32 0)
147 define void @divergent_br_no_metadata(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef %flag) {
148 ; GFX9-LABEL: divergent_br_no_metadata:
149 ; GFX9: ; %bb.0: ; %entry
150 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
151 ; GFX9-NEXT: v_cmp_lt_i32_e32 vcc, 0, v0
152 ; GFX9-NEXT: s_and_saveexec_b64 s[8:9], vcc
153 ; GFX9-NEXT: s_cbranch_execz .LBB3_2
154 ; GFX9-NEXT: ; %bb.1: ; %if.then
155 ; GFX9-NEXT: s_mov_b32 s7, s20
156 ; GFX9-NEXT: s_mov_b32 s6, s19
157 ; GFX9-NEXT: s_mov_b32 s5, s18
158 ; GFX9-NEXT: s_mov_b32 s4, s17
159 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
160 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
161 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
162 ; GFX9-NEXT: .LBB3_2: ; %if.end
163 ; GFX9-NEXT: s_or_b64 exec, exec, s[8:9]
164 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
165 ; GFX9-NEXT: s_setpc_b64 s[30:31]
167 ; GFX1010-LABEL: divergent_br_no_metadata:
168 ; GFX1010: ; %bb.0: ; %entry
169 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
170 ; GFX1010-NEXT: v_cmp_lt_i32_e32 vcc_lo, 0, v0
171 ; GFX1010-NEXT: s_and_saveexec_b32 s8, vcc_lo
172 ; GFX1010-NEXT: s_cbranch_execz .LBB3_2
173 ; GFX1010-NEXT: ; %bb.1: ; %if.then
174 ; GFX1010-NEXT: v_mov_b32_e32 v0, s16
175 ; GFX1010-NEXT: v_mov_b32_e32 v1, s21
176 ; GFX1010-NEXT: s_mov_b32 s7, s20
177 ; GFX1010-NEXT: s_mov_b32 s6, s19
178 ; GFX1010-NEXT: s_mov_b32 s5, s18
179 ; GFX1010-NEXT: s_mov_b32 s4, s17
180 ; GFX1010-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
181 ; GFX1010-NEXT: .LBB3_2: ; %if.end
182 ; GFX1010-NEXT: s_waitcnt_depctr 0xffe3
183 ; GFX1010-NEXT: s_or_b32 exec_lo, exec_lo, s8
184 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
185 ; GFX1010-NEXT: s_setpc_b64 s[30:31]
187 ; GFX1030-LABEL: divergent_br_no_metadata:
188 ; GFX1030: ; %bb.0: ; %entry
189 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
190 ; GFX1030-NEXT: s_mov_b32 s8, exec_lo
191 ; GFX1030-NEXT: v_cmpx_lt_i32_e32 0, v0
192 ; GFX1030-NEXT: s_cbranch_execz .LBB3_2
193 ; GFX1030-NEXT: ; %bb.1: ; %if.then
194 ; GFX1030-NEXT: v_mov_b32_e32 v0, s16
195 ; GFX1030-NEXT: v_mov_b32_e32 v1, s21
196 ; GFX1030-NEXT: s_mov_b32 s7, s20
197 ; GFX1030-NEXT: s_mov_b32 s6, s19
198 ; GFX1030-NEXT: s_mov_b32 s5, s18
199 ; GFX1030-NEXT: s_mov_b32 s4, s17
200 ; GFX1030-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
201 ; GFX1030-NEXT: .LBB3_2: ; %if.end
202 ; GFX1030-NEXT: s_or_b32 exec_lo, exec_lo, s8
203 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
204 ; GFX1030-NEXT: s_setpc_b64 s[30:31]
206 %cmp = icmp sgt i32 %flag, 0
207 br i1 %cmp, label %if.then, label %if.end
210 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
214 call void @llvm.amdgcn.s.waitcnt(i32 0)
218 define void @divergent_br_unprofitable(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef %flag) {
219 ; GFX9-LABEL: divergent_br_unprofitable:
220 ; GFX9: ; %bb.0: ; %entry
221 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
222 ; GFX9-NEXT: v_cmp_lt_i32_e32 vcc, 0, v0
223 ; GFX9-NEXT: s_and_saveexec_b64 s[8:9], vcc
224 ; GFX9-NEXT: s_cbranch_execz .LBB4_2
225 ; GFX9-NEXT: ; %bb.1: ; %if.then
226 ; GFX9-NEXT: s_mov_b32 s7, s20
227 ; GFX9-NEXT: s_mov_b32 s6, s19
228 ; GFX9-NEXT: s_mov_b32 s5, s18
229 ; GFX9-NEXT: s_mov_b32 s4, s17
230 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
231 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
232 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
233 ; GFX9-NEXT: .LBB4_2: ; %if.end
234 ; GFX9-NEXT: s_or_b64 exec, exec, s[8:9]
235 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
236 ; GFX9-NEXT: s_setpc_b64 s[30:31]
238 ; GFX1010-LABEL: divergent_br_unprofitable:
239 ; GFX1010: ; %bb.0: ; %entry
240 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
241 ; GFX1010-NEXT: v_cmp_lt_i32_e32 vcc_lo, 0, v0
242 ; GFX1010-NEXT: s_and_saveexec_b32 s8, vcc_lo
243 ; GFX1010-NEXT: s_cbranch_execz .LBB4_2
244 ; GFX1010-NEXT: ; %bb.1: ; %if.then
245 ; GFX1010-NEXT: v_mov_b32_e32 v0, s16
246 ; GFX1010-NEXT: v_mov_b32_e32 v1, s21
247 ; GFX1010-NEXT: s_mov_b32 s7, s20
248 ; GFX1010-NEXT: s_mov_b32 s6, s19
249 ; GFX1010-NEXT: s_mov_b32 s5, s18
250 ; GFX1010-NEXT: s_mov_b32 s4, s17
251 ; GFX1010-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
252 ; GFX1010-NEXT: .LBB4_2: ; %if.end
253 ; GFX1010-NEXT: s_waitcnt_depctr 0xffe3
254 ; GFX1010-NEXT: s_or_b32 exec_lo, exec_lo, s8
255 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
256 ; GFX1010-NEXT: s_setpc_b64 s[30:31]
258 ; GFX1030-LABEL: divergent_br_unprofitable:
259 ; GFX1030: ; %bb.0: ; %entry
260 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
261 ; GFX1030-NEXT: s_mov_b32 s8, exec_lo
262 ; GFX1030-NEXT: v_cmpx_lt_i32_e32 0, v0
263 ; GFX1030-NEXT: s_cbranch_execz .LBB4_2
264 ; GFX1030-NEXT: ; %bb.1: ; %if.then
265 ; GFX1030-NEXT: v_mov_b32_e32 v0, s16
266 ; GFX1030-NEXT: v_mov_b32_e32 v1, s21
267 ; GFX1030-NEXT: s_mov_b32 s7, s20
268 ; GFX1030-NEXT: s_mov_b32 s6, s19
269 ; GFX1030-NEXT: s_mov_b32 s5, s18
270 ; GFX1030-NEXT: s_mov_b32 s4, s17
271 ; GFX1030-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
272 ; GFX1030-NEXT: .LBB4_2: ; %if.end
273 ; GFX1030-NEXT: s_or_b32 exec_lo, exec_lo, s8
274 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
275 ; GFX1030-NEXT: s_setpc_b64 s[30:31]
277 %cmp = icmp sgt i32 %flag, 0
278 br i1 %cmp, label %if.then, label %if.end, !prof !0
281 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
285 call void @llvm.amdgcn.s.waitcnt(i32 0)
289 define void @divergent_br_profitable(i32 noundef inreg %value, ptr addrspace(8) nocapture writeonly inreg %res, i32 noundef inreg %v_offset, i32 noundef inreg %0, i32 noundef %flag) {
290 ; GFX9-LABEL: divergent_br_profitable:
291 ; GFX9: ; %bb.0: ; %entry
292 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
293 ; GFX9-NEXT: v_cmp_lt_i32_e32 vcc, 0, v0
294 ; GFX9-NEXT: s_and_saveexec_b64 s[8:9], vcc
295 ; GFX9-NEXT: ; %bb.1: ; %if.then
296 ; GFX9-NEXT: s_mov_b32 s7, s20
297 ; GFX9-NEXT: s_mov_b32 s6, s19
298 ; GFX9-NEXT: s_mov_b32 s5, s18
299 ; GFX9-NEXT: s_mov_b32 s4, s17
300 ; GFX9-NEXT: v_mov_b32_e32 v0, s16
301 ; GFX9-NEXT: v_mov_b32_e32 v1, s21
302 ; GFX9-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
303 ; GFX9-NEXT: ; %bb.2: ; %if.end
304 ; GFX9-NEXT: s_or_b64 exec, exec, s[8:9]
305 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
306 ; GFX9-NEXT: s_setpc_b64 s[30:31]
308 ; GFX1010-LABEL: divergent_br_profitable:
309 ; GFX1010: ; %bb.0: ; %entry
310 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
311 ; GFX1010-NEXT: v_cmp_lt_i32_e32 vcc_lo, 0, v0
312 ; GFX1010-NEXT: s_and_saveexec_b32 s8, vcc_lo
313 ; GFX1010-NEXT: ; %bb.1: ; %if.then
314 ; GFX1010-NEXT: v_mov_b32_e32 v0, s16
315 ; GFX1010-NEXT: v_mov_b32_e32 v1, s21
316 ; GFX1010-NEXT: s_mov_b32 s7, s20
317 ; GFX1010-NEXT: s_mov_b32 s6, s19
318 ; GFX1010-NEXT: s_mov_b32 s5, s18
319 ; GFX1010-NEXT: s_mov_b32 s4, s17
320 ; GFX1010-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
321 ; GFX1010-NEXT: ; %bb.2: ; %if.end
322 ; GFX1010-NEXT: s_waitcnt_depctr 0xffe3
323 ; GFX1010-NEXT: s_or_b32 exec_lo, exec_lo, s8
324 ; GFX1010-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
325 ; GFX1010-NEXT: s_setpc_b64 s[30:31]
327 ; GFX1030-LABEL: divergent_br_profitable:
328 ; GFX1030: ; %bb.0: ; %entry
329 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
330 ; GFX1030-NEXT: s_mov_b32 s8, exec_lo
331 ; GFX1030-NEXT: v_cmpx_lt_i32_e32 0, v0
332 ; GFX1030-NEXT: ; %bb.1: ; %if.then
333 ; GFX1030-NEXT: v_mov_b32_e32 v0, s16
334 ; GFX1030-NEXT: v_mov_b32_e32 v1, s21
335 ; GFX1030-NEXT: s_mov_b32 s7, s20
336 ; GFX1030-NEXT: s_mov_b32 s6, s19
337 ; GFX1030-NEXT: s_mov_b32 s5, s18
338 ; GFX1030-NEXT: s_mov_b32 s4, s17
339 ; GFX1030-NEXT: buffer_store_dword v0, v1, s[4:7], 0 offen
340 ; GFX1030-NEXT: ; %bb.2: ; %if.end
341 ; GFX1030-NEXT: s_or_b32 exec_lo, exec_lo, s8
342 ; GFX1030-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
343 ; GFX1030-NEXT: s_setpc_b64 s[30:31]
345 %cmp = icmp sgt i32 %flag, 0
346 br i1 %cmp, label %if.then, label %if.end, !prof !1
349 tail call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %value, ptr addrspace(8) %res, i32 %v_offset, i32 0, i32 0)
353 call void @llvm.amdgcn.s.waitcnt(i32 0)
357 declare void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32, ptr addrspace(8) nocapture writeonly, i32, i32, i32 immarg)
358 declare void @llvm.amdgcn.s.waitcnt(i32)
360 !0 = !{!"branch_weights", i32 1000, i32 1000}
361 !1 = !{!"branch_weights", i32 2000, i32 1}