Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.sched.group.barrier.gfx11.ll
blob990a4e92170f0191c7ac58cae133c2e3d0faa085
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs -misched-cluster=0 < %s | FileCheck -check-prefix=GCN %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs -misched-cluster=0 -amdgpu-igrouplp-exact-solver-max-branches=250000 < %s | FileCheck -check-prefix=EXACTCUTOFF %s
5 define amdgpu_kernel void @test_sched_group_barrier_pipeline_WMMA_cluster(ptr addrspace(3) noalias %in, ptr addrspace(3) noalias %out) #0 {
6 ; GCN-LABEL: test_sched_group_barrier_pipeline_WMMA_cluster:
7 ; GCN:       ; %bb.0: ; %entry
8 ; GCN-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
9 ; GCN-NEXT:    v_lshlrev_b32_e32 v40, 5, v0
10 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
11 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12 ; GCN-NEXT:    v_add_nc_u32_e32 v32, s0, v40
13 ; GCN-NEXT:    v_dual_mov_b32 v81, s1 :: v_dual_add_nc_u32 v80, s1, v40
14 ; GCN-NEXT:    ds_load_b128 v[4:7], v32 offset:16
15 ; GCN-NEXT:    ds_load_b128 v[12:15], v32 offset:2064
16 ; GCN-NEXT:    ds_load_b128 v[20:23], v32 offset:6160
17 ; GCN-NEXT:    ds_load_b128 v[28:31], v32 offset:12304
18 ; GCN-NEXT:    ds_load_b128 v[36:39], v32 offset:20496
19 ; GCN-NEXT:    ds_load_b128 v[0:3], v32
20 ; GCN-NEXT:    ds_load_b128 v[8:11], v32 offset:2048
21 ; GCN-NEXT:    ds_load_b128 v[16:19], v32 offset:6144
22 ; GCN-NEXT:    ds_load_b128 v[24:27], v32 offset:12288
23 ; GCN-NEXT:    ds_load_b128 v[32:35], v32 offset:20480
24 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(10) SyncID(0)
25 ; GCN-NEXT:    s_waitcnt lgkmcnt(4)
26 ; GCN-NEXT:    v_mov_b32_e32 v47, v7
27 ; GCN-NEXT:    s_waitcnt lgkmcnt(3)
28 ; GCN-NEXT:    v_mov_b32_e32 v55, v15
29 ; GCN-NEXT:    s_waitcnt lgkmcnt(2)
30 ; GCN-NEXT:    v_mov_b32_e32 v63, v23
31 ; GCN-NEXT:    s_waitcnt lgkmcnt(1)
32 ; GCN-NEXT:    v_mov_b32_e32 v71, v31
33 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
34 ; GCN-NEXT:    v_dual_mov_b32 v79, v39 :: v_dual_mov_b32 v46, v6
35 ; GCN-NEXT:    v_dual_mov_b32 v45, v5 :: v_dual_mov_b32 v44, v4
36 ; GCN-NEXT:    v_dual_mov_b32 v43, v3 :: v_dual_mov_b32 v42, v2
37 ; GCN-NEXT:    v_dual_mov_b32 v41, v1 :: v_dual_mov_b32 v40, v0
38 ; GCN-NEXT:    v_dual_mov_b32 v54, v14 :: v_dual_mov_b32 v53, v13
39 ; GCN-NEXT:    v_dual_mov_b32 v52, v12 :: v_dual_mov_b32 v51, v11
40 ; GCN-NEXT:    v_dual_mov_b32 v50, v10 :: v_dual_mov_b32 v49, v9
41 ; GCN-NEXT:    v_mov_b32_e32 v48, v8
42 ; GCN-NEXT:    v_dual_mov_b32 v62, v22 :: v_dual_mov_b32 v61, v21
43 ; GCN-NEXT:    v_dual_mov_b32 v60, v20 :: v_dual_mov_b32 v59, v19
44 ; GCN-NEXT:    v_dual_mov_b32 v58, v18 :: v_dual_mov_b32 v57, v17
45 ; GCN-NEXT:    v_mov_b32_e32 v56, v16
46 ; GCN-NEXT:    v_dual_mov_b32 v70, v30 :: v_dual_mov_b32 v69, v29
47 ; GCN-NEXT:    v_dual_mov_b32 v68, v28 :: v_dual_mov_b32 v67, v27
48 ; GCN-NEXT:    v_dual_mov_b32 v66, v26 :: v_dual_mov_b32 v65, v25
49 ; GCN-NEXT:    v_mov_b32_e32 v64, v24
50 ; GCN-NEXT:    v_dual_mov_b32 v78, v38 :: v_dual_mov_b32 v77, v37
51 ; GCN-NEXT:    v_dual_mov_b32 v76, v36 :: v_dual_mov_b32 v75, v35
52 ; GCN-NEXT:    v_dual_mov_b32 v74, v34 :: v_dual_mov_b32 v73, v33
53 ; GCN-NEXT:    v_mov_b32_e32 v72, v32
54 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[40:47], v[0:7], v[0:7], v[40:47]
55 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[48:55], v[8:15], v[8:15], v[48:55]
56 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[56:63], v[16:23], v[16:23], v[56:63]
57 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[64:71], v[24:31], v[24:31], v[64:71]
58 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[72:79], v[32:39], v[32:39], v[72:79]
59 ; GCN-NEXT:    ds_store_b128 v80, v[44:47] offset:16
60 ; GCN-NEXT:    ds_store_b128 v80, v[40:43]
61 ; GCN-NEXT:    ds_store_b128 v81, v[52:55] offset:2064
62 ; GCN-NEXT:    ds_store_b128 v81, v[48:51] offset:2048
63 ; GCN-NEXT:    ds_store_b128 v81, v[60:63] offset:4112
64 ; GCN-NEXT:    ds_store_b128 v81, v[56:59] offset:4096
65 ; GCN-NEXT:    ds_store_b128 v81, v[68:71] offset:6160
66 ; GCN-NEXT:    ds_store_b128 v81, v[64:67] offset:6144
67 ; GCN-NEXT:    ds_store_b128 v81, v[76:79] offset:8208
68 ; GCN-NEXT:    ds_store_b128 v81, v[72:75] offset:8192
69 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(5) SyncID(0)
70 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(10) SyncID(0)
71 ; GCN-NEXT:    s_endpgm
73 ; EXACTCUTOFF-LABEL: test_sched_group_barrier_pipeline_WMMA_cluster:
74 ; EXACTCUTOFF:       ; %bb.0: ; %entry
75 ; EXACTCUTOFF-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
76 ; EXACTCUTOFF-NEXT:    v_lshlrev_b32_e32 v40, 5, v0
77 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
78 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
79 ; EXACTCUTOFF-NEXT:    v_add_nc_u32_e32 v32, s0, v40
80 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v81, s1 :: v_dual_add_nc_u32 v80, s1, v40
81 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v32 offset:16
82 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[12:15], v32 offset:2064
83 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[20:23], v32 offset:6160
84 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[28:31], v32 offset:12304
85 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[36:39], v32 offset:20496
86 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v32
87 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[8:11], v32 offset:2048
88 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[16:19], v32 offset:6144
89 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[24:27], v32 offset:12288
90 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[32:35], v32 offset:20480
91 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(10) SyncID(0)
92 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(4)
93 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v47, v7
94 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(3)
95 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v55, v15
96 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(2)
97 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v63, v23
98 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(1)
99 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v71, v31
100 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
101 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v79, v39 :: v_dual_mov_b32 v46, v6
102 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v45, v5 :: v_dual_mov_b32 v44, v4
103 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v43, v3 :: v_dual_mov_b32 v42, v2
104 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v41, v1 :: v_dual_mov_b32 v40, v0
105 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v54, v14 :: v_dual_mov_b32 v53, v13
106 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v52, v12 :: v_dual_mov_b32 v51, v11
107 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v50, v10 :: v_dual_mov_b32 v49, v9
108 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v48, v8
109 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v62, v22 :: v_dual_mov_b32 v61, v21
110 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v60, v20 :: v_dual_mov_b32 v59, v19
111 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v58, v18 :: v_dual_mov_b32 v57, v17
112 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v56, v16
113 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v70, v30 :: v_dual_mov_b32 v69, v29
114 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v68, v28 :: v_dual_mov_b32 v67, v27
115 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v66, v26 :: v_dual_mov_b32 v65, v25
116 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v64, v24
117 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v78, v38 :: v_dual_mov_b32 v77, v37
118 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v76, v36 :: v_dual_mov_b32 v75, v35
119 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v74, v34 :: v_dual_mov_b32 v73, v33
120 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v72, v32
121 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[40:47], v[0:7], v[0:7], v[40:47]
122 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[48:55], v[8:15], v[8:15], v[48:55]
123 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[56:63], v[16:23], v[16:23], v[56:63]
124 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[64:71], v[24:31], v[24:31], v[64:71]
125 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[72:79], v[32:39], v[32:39], v[72:79]
126 ; EXACTCUTOFF-NEXT:    ds_store_b128 v80, v[44:47] offset:16
127 ; EXACTCUTOFF-NEXT:    ds_store_b128 v80, v[40:43]
128 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[52:55] offset:2064
129 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[48:51] offset:2048
130 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[60:63] offset:4112
131 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[56:59] offset:4096
132 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[68:71] offset:6160
133 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[64:67] offset:6144
134 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[76:79] offset:8208
135 ; EXACTCUTOFF-NEXT:    ds_store_b128 v81, v[72:75] offset:8192
136 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(5) SyncID(0)
137 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(10) SyncID(0)
138 ; EXACTCUTOFF-NEXT:    s_endpgm
139 entry:
140   %idx = call i32 @llvm.amdgcn.workitem.id.x()
141   %load.0.addr = getelementptr <16 x half>, ptr addrspace(3) %in, i32 %idx
142   %load.0 = load <16 x half>, ptr addrspace(3) %load.0.addr
143   %load.1.addr = getelementptr <16 x half>, ptr addrspace(3) %load.0.addr, i32 64
144   %load.1 = load <16 x half>, ptr addrspace(3) %load.1.addr
145   %load.2.addr = getelementptr <16 x half>, ptr addrspace(3) %load.1.addr, i32 128
146   %load.2 = load <16 x half>, ptr addrspace(3) %load.2.addr
147   %load.3.addr = getelementptr <16 x half>, ptr addrspace(3) %load.2.addr, i32 192
148   %load.3 = load <16 x half>, ptr addrspace(3) %load.3.addr
149   %load.4.addr = getelementptr <16 x half>, ptr addrspace(3) %load.3.addr, i32 256
150   %load.4 = load <16 x half>, ptr addrspace(3) %load.4.addr
151   %mai.0 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.0, <16 x half> %load.0, <16 x half> %load.0, i1 0)
152   %mai.1 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.1, <16 x half> %load.1, <16 x half> %load.1, i1 0)
153   %mai.2 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.2, <16 x half> %load.2, <16 x half> %load.2, i1 0)
154   %mai.3 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.3, <16 x half> %load.3, <16 x half> %load.3, i1 0)
155   %mai.4 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.4, <16 x half> %load.4, <16 x half> %load.4, i1 0)
156   %store.0.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 %idx
157   store <16 x half> %mai.0, ptr addrspace(3) %store.0.addr
158   %store.1.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 64
159   store <16 x half> %mai.1, ptr addrspace(3) %store.1.addr
160   %store.2.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 128
161   store <16 x half> %mai.2, ptr addrspace(3) %store.2.addr
162   %store.3.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 192
163   store <16 x half> %mai.3, ptr addrspace(3) %store.3.addr
164   %store.4.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 256
165   store <16 x half> %mai.4, ptr addrspace(3) %store.4.addr
166   ; 10 DS read
167   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 10, i32 0)
168   ; 5 WMMA
169   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 5, i32 0)
170   ; 10 DS write
171   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 10, i32 0)
172   ret void
175 define amdgpu_kernel void @test_sched_group_barrier_pipeline_WMMA_interleave(ptr addrspace(3) noalias %in, ptr addrspace(3) noalias %out) #0 {
176 ; GCN-LABEL: test_sched_group_barrier_pipeline_WMMA_interleave:
177 ; GCN:       ; %bb.0: ; %entry
178 ; GCN-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
179 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 5, v0
180 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
181 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
182 ; GCN-NEXT:    v_add_nc_u32_e32 v17, s0, v16
183 ; GCN-NEXT:    v_add_nc_u32_e32 v16, s1, v16
184 ; GCN-NEXT:    ds_load_b128 v[4:7], v17 offset:16
185 ; GCN-NEXT:    ds_load_b128 v[0:3], v17
186 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
187 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
188 ; GCN-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
189 ; GCN-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
190 ; GCN-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
191 ; GCN-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
192 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
193 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
194 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
195 ; GCN-NEXT:    ds_store_b128 v16, v[12:15] offset:16
196 ; GCN-NEXT:    ds_store_b128 v16, v[8:11]
197 ; GCN-NEXT:    ds_load_b128 v[4:7], v17 offset:2064
198 ; GCN-NEXT:    ds_load_b128 v[0:3], v17 offset:2048
199 ; GCN-NEXT:    v_mov_b32_e32 v16, s1
200 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
201 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
202 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
203 ; GCN-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
204 ; GCN-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
205 ; GCN-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
206 ; GCN-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
207 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
208 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
209 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
210 ; GCN-NEXT:    ds_store_b128 v16, v[12:15] offset:2064
211 ; GCN-NEXT:    ds_store_b128 v16, v[8:11] offset:2048
212 ; GCN-NEXT:    ds_load_b128 v[4:7], v17 offset:6160
213 ; GCN-NEXT:    ds_load_b128 v[0:3], v17 offset:6144
214 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
215 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
216 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
217 ; GCN-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
218 ; GCN-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
219 ; GCN-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
220 ; GCN-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
221 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
222 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
223 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
224 ; GCN-NEXT:    ds_store_b128 v16, v[12:15] offset:4112
225 ; GCN-NEXT:    ds_store_b128 v16, v[8:11] offset:4096
226 ; GCN-NEXT:    ds_load_b128 v[4:7], v17 offset:12304
227 ; GCN-NEXT:    ds_load_b128 v[0:3], v17 offset:12288
228 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
229 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
230 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
231 ; GCN-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
232 ; GCN-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
233 ; GCN-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
234 ; GCN-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
235 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
236 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
237 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
238 ; GCN-NEXT:    ds_store_b128 v16, v[12:15] offset:6160
239 ; GCN-NEXT:    ds_store_b128 v16, v[8:11] offset:6144
240 ; GCN-NEXT:    ds_load_b128 v[4:7], v17 offset:20496
241 ; GCN-NEXT:    ds_load_b128 v[0:3], v17 offset:20480
242 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
243 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
244 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
245 ; GCN-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
246 ; GCN-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
247 ; GCN-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
248 ; GCN-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
249 ; GCN-NEXT:    s_delay_alu instid0(VALU_DEP_1)
250 ; GCN-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
251 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
252 ; GCN-NEXT:    ds_store_b128 v16, v[12:15] offset:8208
253 ; GCN-NEXT:    ds_store_b128 v16, v[8:11] offset:8192
254 ; GCN-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
255 ; GCN-NEXT:    s_endpgm
257 ; EXACTCUTOFF-LABEL: test_sched_group_barrier_pipeline_WMMA_interleave:
258 ; EXACTCUTOFF:       ; %bb.0: ; %entry
259 ; EXACTCUTOFF-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
260 ; EXACTCUTOFF-NEXT:    v_lshlrev_b32_e32 v16, 5, v0
261 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
262 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
263 ; EXACTCUTOFF-NEXT:    v_add_nc_u32_e32 v17, s0, v16
264 ; EXACTCUTOFF-NEXT:    v_add_nc_u32_e32 v16, s1, v16
265 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v17 offset:16
266 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v17
267 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
268 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
269 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
270 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
271 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
272 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
273 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
274 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
275 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
276 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[12:15] offset:16
277 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[8:11]
278 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v17 offset:2064
279 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v17 offset:2048
280 ; EXACTCUTOFF-NEXT:    v_mov_b32_e32 v16, s1
281 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
282 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
283 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
284 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
285 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
286 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
287 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
288 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
289 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
290 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
291 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[12:15] offset:2064
292 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[8:11] offset:2048
293 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v17 offset:6160
294 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v17 offset:6144
295 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
296 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
297 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
298 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
299 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
300 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
301 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
302 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
303 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
304 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
305 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[12:15] offset:4112
306 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[8:11] offset:4096
307 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v17 offset:12304
308 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v17 offset:12288
309 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
310 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
311 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
312 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
313 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
314 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
315 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
316 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
317 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
318 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
319 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[12:15] offset:6160
320 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[8:11] offset:6144
321 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[4:7], v17 offset:20496
322 ; EXACTCUTOFF-NEXT:    ds_load_b128 v[0:3], v17 offset:20480
323 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
324 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000100) size(2) SyncID(0)
325 ; EXACTCUTOFF-NEXT:    s_waitcnt lgkmcnt(0)
326 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v15, v7 :: v_dual_mov_b32 v14, v6
327 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v13, v5 :: v_dual_mov_b32 v12, v4
328 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v11, v3 :: v_dual_mov_b32 v10, v2
329 ; EXACTCUTOFF-NEXT:    v_dual_mov_b32 v9, v1 :: v_dual_mov_b32 v8, v0
330 ; EXACTCUTOFF-NEXT:    s_delay_alu instid0(VALU_DEP_1)
331 ; EXACTCUTOFF-NEXT:    v_wmma_f16_16x16x16_f16 v[8:15], v[0:7], v[0:7], v[8:15]
332 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000008) size(1) SyncID(0)
333 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[12:15] offset:8208
334 ; EXACTCUTOFF-NEXT:    ds_store_b128 v16, v[8:11] offset:8192
335 ; EXACTCUTOFF-NEXT:    ; sched_group_barrier mask(0x00000200) size(2) SyncID(0)
336 ; EXACTCUTOFF-NEXT:    s_endpgm
337 entry:
338   %idx = call i32 @llvm.amdgcn.workitem.id.x()
339   %load.0.addr = getelementptr <16 x half>, ptr addrspace(3) %in, i32 %idx
340   %load.0 = load <16 x half>, ptr addrspace(3) %load.0.addr
341   %load.1.addr = getelementptr <16 x half>, ptr addrspace(3) %load.0.addr, i32 64
342   %load.1 = load <16 x half>, ptr addrspace(3) %load.1.addr
343   %load.2.addr = getelementptr <16 x half>, ptr addrspace(3) %load.1.addr, i32 128
344   %load.2 = load <16 x half>, ptr addrspace(3) %load.2.addr
345   %load.3.addr = getelementptr <16 x half>, ptr addrspace(3) %load.2.addr, i32 192
346   %load.3 = load <16 x half>, ptr addrspace(3) %load.3.addr
347   %load.4.addr = getelementptr <16 x half>, ptr addrspace(3) %load.3.addr, i32 256
348   %load.4 = load <16 x half>, ptr addrspace(3) %load.4.addr
349   %mai.0 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.0, <16 x half> %load.0, <16 x half> %load.0, i1 0)
350   %mai.1 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.1, <16 x half> %load.1, <16 x half> %load.1, i1 0)
351   %mai.2 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.2, <16 x half> %load.2, <16 x half> %load.2, i1 0)
352   %mai.3 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.3, <16 x half> %load.3, <16 x half> %load.3, i1 0)
353   %mai.4 = call <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half> %load.4, <16 x half> %load.4, <16 x half> %load.4, i1 0)
354   %store.0.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 %idx
355   store <16 x half> %mai.0, ptr addrspace(3) %store.0.addr
356   %store.1.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 64
357   store <16 x half> %mai.1, ptr addrspace(3) %store.1.addr
358   %store.2.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 128
359   store <16 x half> %mai.2, ptr addrspace(3) %store.2.addr
360   %store.3.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 192
361   store <16 x half> %mai.3, ptr addrspace(3) %store.3.addr
362   %store.4.addr = getelementptr <16 x half>, ptr addrspace(3) %out, i32 256
363   store <16 x half> %mai.4, ptr addrspace(3) %store.4.addr
364   ; 2 DS read
365   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 2, i32 0)
366   ; 1 WMMA
367   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
368   ; 2 DS write
369   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 2, i32 0)
370   ; 2 DS read
371   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 2, i32 0)
372   ; 1 WMMA
373   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
374   ; 2 DS write
375   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 2, i32 0)
376   ; 2 DS read
377   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 2, i32 0)
378   ; 1 WMMA
379   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
380   ; 2 DS write
381   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 2, i32 0)
382   ; 2 DS read
383   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 2, i32 0)
384   ; 1 WMMA
385   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
386   ; 2 DS write
387   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 2, i32 0)
388   ; 2 DS read
389   call void @llvm.amdgcn.sched.group.barrier(i32 256, i32 2, i32 0)
390   ; 1 WMMA
391   call void @llvm.amdgcn.sched.group.barrier(i32 8, i32 1, i32 0)
392   ; 2 DS write
393   call void @llvm.amdgcn.sched.group.barrier(i32 512, i32 2, i32 0)
394   ret void
397 declare i32 @llvm.amdgcn.workitem.id.x() #2
398 declare void @llvm.amdgcn.sched.group.barrier(i32, i32, i32) #1
399 declare <16 x half> @llvm.amdgcn.wmma.f16.16x16x16.f16(<16 x half>, <16 x half> , <16 x half>, i1 immarg) #1
401 attributes #0 = { nounwind "amdgpu-flat-work-group-size"="1,32" }
402 attributes #1 = { nounwind }
403 attributes #2 = { nounwind readnone speculatable }