Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / mubuf-legalize-operands-non-ptr-intrinsics.ll
blobb5ee6689f8dc395112a1fc0fda375bd5a058eeec
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=GFX9_W64
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=GFX1010_W32
4 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=GFX1010_W64
5 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32,-wavefrontsize64 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=GFX1100_W32
6 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=GFX1100_W64
7 ; RUN: llc -O0 -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -verify-machine-dom-info -o - %s | FileCheck %s --check-prefix=W64-O0
9 ; Test that we correctly legalize VGPR Rsrc operands in MUBUF instructions.
10 ; Uses the old forms of the buffer intrinsics that don't take pointer arguments.
12 define float @mubuf_vgpr(<4 x i32> %i, i32 %c) #0 {
13 ; GFX9_W64-LABEL: mubuf_vgpr:
14 ; GFX9_W64:       ; %bb.0:
15 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16 ; GFX9_W64-NEXT:    s_mov_b64 s[6:7], exec
17 ; GFX9_W64-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
18 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s8, v0
19 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s9, v1
20 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s10, v2
21 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s11, v3
22 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
23 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
24 ; GFX9_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
25 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
26 ; GFX9_W64-NEXT:    s_nop 0
27 ; GFX9_W64-NEXT:    buffer_load_format_x v5, v4, s[8:11], 0 idxen
28 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
29 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr4
30 ; GFX9_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
31 ; GFX9_W64-NEXT:    s_cbranch_execnz .LBB0_1
32 ; GFX9_W64-NEXT:  ; %bb.2:
33 ; GFX9_W64-NEXT:    s_mov_b64 exec, s[6:7]
34 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0)
35 ; GFX9_W64-NEXT:    v_mov_b32_e32 v0, v5
36 ; GFX9_W64-NEXT:    s_setpc_b64 s[30:31]
38 ; GFX1010_W32-LABEL: mubuf_vgpr:
39 ; GFX1010_W32:       ; %bb.0:
40 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41 ; GFX1010_W32-NEXT:    s_mov_b32 s5, exec_lo
42 ; GFX1010_W32-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
43 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s8, v0
44 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s9, v1
45 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s10, v2
46 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s11, v3
47 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
48 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
49 ; GFX1010_W32-NEXT:    s_and_b32 s4, vcc_lo, s4
50 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s4, s4
51 ; GFX1010_W32-NEXT:    buffer_load_format_x v5, v4, s[8:11], 0 idxen
52 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
53 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr4
54 ; GFX1010_W32-NEXT:    s_waitcnt_depctr 0xffe3
55 ; GFX1010_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
56 ; GFX1010_W32-NEXT:    s_cbranch_execnz .LBB0_1
57 ; GFX1010_W32-NEXT:  ; %bb.2:
58 ; GFX1010_W32-NEXT:    s_mov_b32 exec_lo, s5
59 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0)
60 ; GFX1010_W32-NEXT:    v_mov_b32_e32 v0, v5
61 ; GFX1010_W32-NEXT:    s_setpc_b64 s[30:31]
63 ; GFX1010_W64-LABEL: mubuf_vgpr:
64 ; GFX1010_W64:       ; %bb.0:
65 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
66 ; GFX1010_W64-NEXT:    s_mov_b64 s[6:7], exec
67 ; GFX1010_W64-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
68 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s8, v0
69 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s9, v1
70 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s10, v2
71 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s11, v3
72 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
73 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
74 ; GFX1010_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
75 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
76 ; GFX1010_W64-NEXT:    buffer_load_format_x v5, v4, s[8:11], 0 idxen
77 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
78 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr4
79 ; GFX1010_W64-NEXT:    s_waitcnt_depctr 0xffe3
80 ; GFX1010_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
81 ; GFX1010_W64-NEXT:    s_cbranch_execnz .LBB0_1
82 ; GFX1010_W64-NEXT:  ; %bb.2:
83 ; GFX1010_W64-NEXT:    s_mov_b64 exec, s[6:7]
84 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0)
85 ; GFX1010_W64-NEXT:    v_mov_b32_e32 v0, v5
86 ; GFX1010_W64-NEXT:    s_setpc_b64 s[30:31]
88 ; GFX1100_W32-LABEL: mubuf_vgpr:
89 ; GFX1100_W32:       ; %bb.0:
90 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91 ; GFX1100_W32-NEXT:    s_mov_b32 s1, exec_lo
92 ; GFX1100_W32-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
93 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s4, v0
94 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s5, v1
95 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s6, v2
96 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s7, v3
97 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
98 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
99 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
100 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
101 ; GFX1100_W32-NEXT:    s_and_b32 s0, vcc_lo, s0
102 ; GFX1100_W32-NEXT:    s_and_saveexec_b32 s0, s0
103 ; GFX1100_W32-NEXT:    buffer_load_format_x v5, v4, s[4:7], 0 idxen
104 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
105 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr4
106 ; GFX1100_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
107 ; GFX1100_W32-NEXT:    s_cbranch_execnz .LBB0_1
108 ; GFX1100_W32-NEXT:  ; %bb.2:
109 ; GFX1100_W32-NEXT:    s_mov_b32 exec_lo, s1
110 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0)
111 ; GFX1100_W32-NEXT:    v_mov_b32_e32 v0, v5
112 ; GFX1100_W32-NEXT:    s_setpc_b64 s[30:31]
114 ; GFX1100_W64-LABEL: mubuf_vgpr:
115 ; GFX1100_W64:       ; %bb.0:
116 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GFX1100_W64-NEXT:    s_mov_b64 s[2:3], exec
118 ; GFX1100_W64-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
119 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s4, v0
120 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s5, v1
121 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s6, v2
122 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s7, v3
123 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
124 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
125 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
126 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
127 ; GFX1100_W64-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
128 ; GFX1100_W64-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
129 ; GFX1100_W64-NEXT:    buffer_load_format_x v5, v4, s[4:7], 0 idxen
130 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
131 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr4
132 ; GFX1100_W64-NEXT:    s_xor_b64 exec, exec, s[0:1]
133 ; GFX1100_W64-NEXT:    s_cbranch_execnz .LBB0_1
134 ; GFX1100_W64-NEXT:  ; %bb.2:
135 ; GFX1100_W64-NEXT:    s_mov_b64 exec, s[2:3]
136 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0)
137 ; GFX1100_W64-NEXT:    v_mov_b32_e32 v0, v5
138 ; GFX1100_W64-NEXT:    s_setpc_b64 s[30:31]
140 ; W64-O0-LABEL: mubuf_vgpr:
141 ; W64-O0:       ; %bb.0:
142 ; W64-O0-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
143 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
144 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill
145 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill
146 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
147 ; W64-O0-NEXT:    ; implicit-def: $vgpr5 : SGPR spill to VGPR lane
148 ; W64-O0-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill
149 ; W64-O0-NEXT:    v_mov_b32_e32 v5, v3
150 ; W64-O0-NEXT:    v_mov_b32_e32 v6, v2
151 ; W64-O0-NEXT:    v_mov_b32_e32 v7, v1
152 ; W64-O0-NEXT:    v_mov_b32_e32 v1, v0
153 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
154 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
155 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
156 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
157 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
158 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
159 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
160 ; W64-O0-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2_vgpr3_vgpr4 killed $exec
161 ; W64-O0-NEXT:    v_mov_b32_e32 v2, v7
162 ; W64-O0-NEXT:    v_mov_b32_e32 v3, v6
163 ; W64-O0-NEXT:    v_mov_b32_e32 v4, v5
164 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
165 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
166 ; W64-O0-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill
167 ; W64-O0-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill
168 ; W64-O0-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill
169 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5_sgpr6_sgpr7
170 ; W64-O0-NEXT:    s_mov_b32 s4, 0
171 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 0
172 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
173 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 1
174 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 2
175 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
176 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
177 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
178 ; W64-O0-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=1
179 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
180 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
181 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
182 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
183 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload
184 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload
185 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload
186 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
187 ; W64-O0-NEXT:    v_readfirstlane_b32 s8, v1
188 ; W64-O0-NEXT:    v_readfirstlane_b32 s12, v2
189 ; W64-O0-NEXT:    s_mov_b32 s4, s8
190 ; W64-O0-NEXT:    s_mov_b32 s5, s12
191 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[1:2]
192 ; W64-O0-NEXT:    v_readfirstlane_b32 s7, v3
193 ; W64-O0-NEXT:    v_readfirstlane_b32 s6, v4
194 ; W64-O0-NEXT:    s_mov_b32 s10, s7
195 ; W64-O0-NEXT:    s_mov_b32 s11, s6
196 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], v[3:4]
197 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[10:11]
198 ; W64-O0-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
199 ; W64-O0-NEXT:    s_mov_b32 s9, s12
200 ; W64-O0-NEXT:    s_mov_b32 s10, s7
201 ; W64-O0-NEXT:    s_mov_b32 s11, s6
202 ; W64-O0-NEXT:    v_writelane_b32 v0, s8, 3
203 ; W64-O0-NEXT:    v_writelane_b32 v0, s9, 4
204 ; W64-O0-NEXT:    v_writelane_b32 v0, s10, 5
205 ; W64-O0-NEXT:    v_writelane_b32 v0, s11, 6
206 ; W64-O0-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
207 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 7
208 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 8
209 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
210 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
211 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
212 ; W64-O0-NEXT:  ; %bb.2: ; in Loop: Header=BB0_1 Depth=1
213 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
214 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
215 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
216 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
217 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 7
218 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 8
219 ; W64-O0-NEXT:    v_readlane_b32 s8, v1, 3
220 ; W64-O0-NEXT:    v_readlane_b32 s9, v1, 4
221 ; W64-O0-NEXT:    v_readlane_b32 s10, v1, 5
222 ; W64-O0-NEXT:    v_readlane_b32 s11, v1, 6
223 ; W64-O0-NEXT:    v_readlane_b32 s6, v1, 0
224 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload
225 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
226 ; W64-O0-NEXT:    s_nop 2
227 ; W64-O0-NEXT:    buffer_load_format_x v0, v0, s[8:11], s6 idxen
228 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
229 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill
230 ; W64-O0-NEXT:    s_xor_b64 exec, exec, s[4:5]
231 ; W64-O0-NEXT:    s_cbranch_execnz .LBB0_1
232 ; W64-O0-NEXT:  ; %bb.3:
233 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
234 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
235 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
236 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
237 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 1
238 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 2
239 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
240 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload
241 ; W64-O0-NEXT:    ; kill: killed $vgpr1
242 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
243 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
244 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload
245 ; W64-O0-NEXT:    s_nop 0
246 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload
247 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
248 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
249 ; W64-O0-NEXT:    s_setpc_b64 s[30:31]
250   %call = call float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32> %i, i32 %c, i32 0, i32 0, i32 0) #1
251   ret float %call
256 ; FIXME: redundant s_mov
258 define void @mubuf_vgpr_adjacent_in_block(<4 x i32> %i, <4 x i32> %j, i32 %c, ptr addrspace(1) %out0, ptr addrspace(1) %out1) #0 {
259 ; GFX9_W64-LABEL: mubuf_vgpr_adjacent_in_block:
260 ; GFX9_W64:       ; %bb.0: ; %entry
261 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262 ; GFX9_W64-NEXT:    s_mov_b64 s[6:7], exec
263 ; GFX9_W64-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
264 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s8, v0
265 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s9, v1
266 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s10, v2
267 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s11, v3
268 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
269 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
270 ; GFX9_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
271 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
272 ; GFX9_W64-NEXT:    s_nop 0
273 ; GFX9_W64-NEXT:    buffer_load_format_x v13, v8, s[8:11], 0 idxen
274 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
275 ; GFX9_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
276 ; GFX9_W64-NEXT:    s_cbranch_execnz .LBB1_1
277 ; GFX9_W64-NEXT:  ; %bb.2:
278 ; GFX9_W64-NEXT:    s_mov_b64 exec, s[6:7]
279 ; GFX9_W64-NEXT:    s_mov_b64 s[6:7], exec
280 ; GFX9_W64-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
281 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s8, v4
282 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s9, v5
283 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s10, v6
284 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s11, v7
285 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[4:5]
286 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[6:7]
287 ; GFX9_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
288 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
289 ; GFX9_W64-NEXT:    s_nop 0
290 ; GFX9_W64-NEXT:    buffer_load_format_x v0, v8, s[8:11], 0 idxen
291 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
292 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr8
293 ; GFX9_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
294 ; GFX9_W64-NEXT:    s_cbranch_execnz .LBB1_3
295 ; GFX9_W64-NEXT:  ; %bb.4:
296 ; GFX9_W64-NEXT:    s_mov_b64 exec, s[6:7]
297 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(1)
298 ; GFX9_W64-NEXT:    global_store_dword v[9:10], v13, off
299 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0)
300 ; GFX9_W64-NEXT:    global_store_dword v[11:12], v0, off
301 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0)
302 ; GFX9_W64-NEXT:    s_setpc_b64 s[30:31]
304 ; GFX1010_W32-LABEL: mubuf_vgpr_adjacent_in_block:
305 ; GFX1010_W32:       ; %bb.0: ; %entry
306 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307 ; GFX1010_W32-NEXT:    s_mov_b32 s5, exec_lo
308 ; GFX1010_W32-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
309 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s8, v0
310 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s9, v1
311 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s10, v2
312 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s11, v3
313 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
314 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
315 ; GFX1010_W32-NEXT:    s_and_b32 s4, vcc_lo, s4
316 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s4, s4
317 ; GFX1010_W32-NEXT:    buffer_load_format_x v13, v8, s[8:11], 0 idxen
318 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
319 ; GFX1010_W32-NEXT:    s_waitcnt_depctr 0xffe3
320 ; GFX1010_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
321 ; GFX1010_W32-NEXT:    s_cbranch_execnz .LBB1_1
322 ; GFX1010_W32-NEXT:  ; %bb.2:
323 ; GFX1010_W32-NEXT:    s_mov_b32 exec_lo, s5
324 ; GFX1010_W32-NEXT:    s_mov_b32 s5, exec_lo
325 ; GFX1010_W32-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
326 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s8, v4
327 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s9, v5
328 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s10, v6
329 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s11, v7
330 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[4:5]
331 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[6:7]
332 ; GFX1010_W32-NEXT:    s_and_b32 s4, vcc_lo, s4
333 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s4, s4
334 ; GFX1010_W32-NEXT:    buffer_load_format_x v0, v8, s[8:11], 0 idxen
335 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
336 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr8
337 ; GFX1010_W32-NEXT:    s_waitcnt_depctr 0xffe3
338 ; GFX1010_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
339 ; GFX1010_W32-NEXT:    s_cbranch_execnz .LBB1_3
340 ; GFX1010_W32-NEXT:  ; %bb.4:
341 ; GFX1010_W32-NEXT:    s_mov_b32 exec_lo, s5
342 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(1)
343 ; GFX1010_W32-NEXT:    global_store_dword v[9:10], v13, off
344 ; GFX1010_W32-NEXT:    s_waitcnt_vscnt null, 0x0
345 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0)
346 ; GFX1010_W32-NEXT:    global_store_dword v[11:12], v0, off
347 ; GFX1010_W32-NEXT:    s_waitcnt_vscnt null, 0x0
348 ; GFX1010_W32-NEXT:    s_setpc_b64 s[30:31]
350 ; GFX1010_W64-LABEL: mubuf_vgpr_adjacent_in_block:
351 ; GFX1010_W64:       ; %bb.0: ; %entry
352 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
353 ; GFX1010_W64-NEXT:    s_mov_b64 s[6:7], exec
354 ; GFX1010_W64-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
355 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s8, v0
356 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s9, v1
357 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s10, v2
358 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s11, v3
359 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
360 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
361 ; GFX1010_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
362 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
363 ; GFX1010_W64-NEXT:    buffer_load_format_x v13, v8, s[8:11], 0 idxen
364 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
365 ; GFX1010_W64-NEXT:    s_waitcnt_depctr 0xffe3
366 ; GFX1010_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
367 ; GFX1010_W64-NEXT:    s_cbranch_execnz .LBB1_1
368 ; GFX1010_W64-NEXT:  ; %bb.2:
369 ; GFX1010_W64-NEXT:    s_mov_b64 exec, s[6:7]
370 ; GFX1010_W64-NEXT:    s_mov_b64 s[6:7], exec
371 ; GFX1010_W64-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
372 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s8, v4
373 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s9, v5
374 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s10, v6
375 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s11, v7
376 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[4:5]
377 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[6:7]
378 ; GFX1010_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
379 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
380 ; GFX1010_W64-NEXT:    buffer_load_format_x v0, v8, s[8:11], 0 idxen
381 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
382 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr8
383 ; GFX1010_W64-NEXT:    s_waitcnt_depctr 0xffe3
384 ; GFX1010_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
385 ; GFX1010_W64-NEXT:    s_cbranch_execnz .LBB1_3
386 ; GFX1010_W64-NEXT:  ; %bb.4:
387 ; GFX1010_W64-NEXT:    s_mov_b64 exec, s[6:7]
388 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(1)
389 ; GFX1010_W64-NEXT:    global_store_dword v[9:10], v13, off
390 ; GFX1010_W64-NEXT:    s_waitcnt_vscnt null, 0x0
391 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0)
392 ; GFX1010_W64-NEXT:    global_store_dword v[11:12], v0, off
393 ; GFX1010_W64-NEXT:    s_waitcnt_vscnt null, 0x0
394 ; GFX1010_W64-NEXT:    s_setpc_b64 s[30:31]
396 ; GFX1100_W32-LABEL: mubuf_vgpr_adjacent_in_block:
397 ; GFX1100_W32:       ; %bb.0: ; %entry
398 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
399 ; GFX1100_W32-NEXT:    s_mov_b32 s1, exec_lo
400 ; GFX1100_W32-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
401 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s4, v0
402 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s5, v1
403 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s6, v2
404 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s7, v3
405 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
406 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
407 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
408 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
409 ; GFX1100_W32-NEXT:    s_and_b32 s0, vcc_lo, s0
410 ; GFX1100_W32-NEXT:    s_and_saveexec_b32 s0, s0
411 ; GFX1100_W32-NEXT:    buffer_load_format_x v13, v8, s[4:7], 0 idxen
412 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
413 ; GFX1100_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
414 ; GFX1100_W32-NEXT:    s_cbranch_execnz .LBB1_1
415 ; GFX1100_W32-NEXT:  ; %bb.2:
416 ; GFX1100_W32-NEXT:    s_mov_b32 exec_lo, s1
417 ; GFX1100_W32-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
418 ; GFX1100_W32-NEXT:    s_mov_b32 s1, exec_lo
419 ; GFX1100_W32-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
420 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s4, v4
421 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s5, v5
422 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s6, v6
423 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s7, v7
424 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
425 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[4:5]
426 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[6:7]
427 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
428 ; GFX1100_W32-NEXT:    s_and_b32 s0, vcc_lo, s0
429 ; GFX1100_W32-NEXT:    s_and_saveexec_b32 s0, s0
430 ; GFX1100_W32-NEXT:    buffer_load_format_x v0, v8, s[4:7], 0 idxen
431 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
432 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr8
433 ; GFX1100_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
434 ; GFX1100_W32-NEXT:    s_cbranch_execnz .LBB1_3
435 ; GFX1100_W32-NEXT:  ; %bb.4:
436 ; GFX1100_W32-NEXT:    s_mov_b32 exec_lo, s1
437 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(1)
438 ; GFX1100_W32-NEXT:    global_store_b32 v[9:10], v13, off dlc
439 ; GFX1100_W32-NEXT:    s_waitcnt_vscnt null, 0x0
440 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0)
441 ; GFX1100_W32-NEXT:    global_store_b32 v[11:12], v0, off dlc
442 ; GFX1100_W32-NEXT:    s_waitcnt_vscnt null, 0x0
443 ; GFX1100_W32-NEXT:    s_setpc_b64 s[30:31]
445 ; GFX1100_W64-LABEL: mubuf_vgpr_adjacent_in_block:
446 ; GFX1100_W64:       ; %bb.0: ; %entry
447 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
448 ; GFX1100_W64-NEXT:    s_mov_b64 s[2:3], exec
449 ; GFX1100_W64-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
450 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s4, v0
451 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s5, v1
452 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s6, v2
453 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s7, v3
454 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
455 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
456 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
457 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
458 ; GFX1100_W64-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
459 ; GFX1100_W64-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
460 ; GFX1100_W64-NEXT:    buffer_load_format_x v13, v8, s[4:7], 0 idxen
461 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
462 ; GFX1100_W64-NEXT:    s_xor_b64 exec, exec, s[0:1]
463 ; GFX1100_W64-NEXT:    s_cbranch_execnz .LBB1_1
464 ; GFX1100_W64-NEXT:  ; %bb.2:
465 ; GFX1100_W64-NEXT:    s_mov_b64 exec, s[2:3]
466 ; GFX1100_W64-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
467 ; GFX1100_W64-NEXT:    s_mov_b64 s[2:3], exec
468 ; GFX1100_W64-NEXT:  .LBB1_3: ; =>This Inner Loop Header: Depth=1
469 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s4, v4
470 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s5, v5
471 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s6, v6
472 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s7, v7
473 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
474 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[4:5]
475 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[6:7]
476 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
477 ; GFX1100_W64-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
478 ; GFX1100_W64-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
479 ; GFX1100_W64-NEXT:    buffer_load_format_x v0, v8, s[4:7], 0 idxen
480 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
481 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr8
482 ; GFX1100_W64-NEXT:    s_xor_b64 exec, exec, s[0:1]
483 ; GFX1100_W64-NEXT:    s_cbranch_execnz .LBB1_3
484 ; GFX1100_W64-NEXT:  ; %bb.4:
485 ; GFX1100_W64-NEXT:    s_mov_b64 exec, s[2:3]
486 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(1)
487 ; GFX1100_W64-NEXT:    global_store_b32 v[9:10], v13, off dlc
488 ; GFX1100_W64-NEXT:    s_waitcnt_vscnt null, 0x0
489 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0)
490 ; GFX1100_W64-NEXT:    global_store_b32 v[11:12], v0, off dlc
491 ; GFX1100_W64-NEXT:    s_waitcnt_vscnt null, 0x0
492 ; GFX1100_W64-NEXT:    s_setpc_b64 s[30:31]
494 ; W64-O0-LABEL: mubuf_vgpr_adjacent_in_block:
495 ; W64-O0:       ; %bb.0: ; %entry
496 ; W64-O0-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
497 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
498 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Spill
499 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:80 ; 4-byte Folded Spill
500 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
501 ; W64-O0-NEXT:    ; implicit-def: $vgpr13 : SGPR spill to VGPR lane
502 ; W64-O0-NEXT:    buffer_store_dword v11, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill
503 ; W64-O0-NEXT:    buffer_store_dword v9, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill
504 ; W64-O0-NEXT:    buffer_store_dword v8, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill
505 ; W64-O0-NEXT:    buffer_store_dword v7, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill
506 ; W64-O0-NEXT:    v_mov_b32_e32 v13, v4
507 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload
508 ; W64-O0-NEXT:    v_mov_b32_e32 v7, v3
509 ; W64-O0-NEXT:    v_mov_b32_e32 v8, v2
510 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload
511 ; W64-O0-NEXT:    v_mov_b32_e32 v9, v1
512 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload
513 ; W64-O0-NEXT:    v_mov_b32_e32 v3, v0
514 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
515 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
516 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
517 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
518 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
519 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
520 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
521 ; W64-O0-NEXT:    ; kill: def $vgpr13 killed $vgpr13 def $vgpr13_vgpr14_vgpr15_vgpr16 killed $exec
522 ; W64-O0-NEXT:    v_mov_b32_e32 v14, v5
523 ; W64-O0-NEXT:    v_mov_b32_e32 v15, v6
524 ; W64-O0-NEXT:    s_waitcnt vmcnt(3)
525 ; W64-O0-NEXT:    v_mov_b32_e32 v16, v4
526 ; W64-O0-NEXT:    buffer_store_dword v13, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill
527 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
528 ; W64-O0-NEXT:    buffer_store_dword v14, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill
529 ; W64-O0-NEXT:    buffer_store_dword v15, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill
530 ; W64-O0-NEXT:    buffer_store_dword v16, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill
531 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
532 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
533 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
534 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
535 ; W64-O0-NEXT:    ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4_vgpr5_vgpr6 killed $exec
536 ; W64-O0-NEXT:    v_mov_b32_e32 v4, v9
537 ; W64-O0-NEXT:    v_mov_b32_e32 v5, v8
538 ; W64-O0-NEXT:    v_mov_b32_e32 v6, v7
539 ; W64-O0-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill
540 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
541 ; W64-O0-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill
542 ; W64-O0-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill
543 ; W64-O0-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill
544 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
545 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
546 ; W64-O0-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec
547 ; W64-O0-NEXT:    v_mov_b32_e32 v3, v12
548 ; W64-O0-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill
549 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
550 ; W64-O0-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill
551 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
552 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
553 ; W64-O0-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec
554 ; W64-O0-NEXT:    v_mov_b32_e32 v2, v10
555 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
556 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
557 ; W64-O0-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill
558 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5
559 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5
560 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5_sgpr6_sgpr7
561 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5_sgpr6_sgpr7
562 ; W64-O0-NEXT:    s_mov_b32 s4, 0
563 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 0
564 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
565 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 1
566 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 2
567 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
568 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
569 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
570 ; W64-O0-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1
571 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
572 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
573 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
574 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload
575 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload
576 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload
577 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload
578 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
579 ; W64-O0-NEXT:    v_readfirstlane_b32 s8, v1
580 ; W64-O0-NEXT:    v_readfirstlane_b32 s12, v2
581 ; W64-O0-NEXT:    s_mov_b32 s4, s8
582 ; W64-O0-NEXT:    s_mov_b32 s5, s12
583 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[1:2]
584 ; W64-O0-NEXT:    v_readfirstlane_b32 s7, v3
585 ; W64-O0-NEXT:    v_readfirstlane_b32 s6, v4
586 ; W64-O0-NEXT:    s_mov_b32 s10, s7
587 ; W64-O0-NEXT:    s_mov_b32 s11, s6
588 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], v[3:4]
589 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[10:11]
590 ; W64-O0-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
591 ; W64-O0-NEXT:    s_mov_b32 s9, s12
592 ; W64-O0-NEXT:    s_mov_b32 s10, s7
593 ; W64-O0-NEXT:    s_mov_b32 s11, s6
594 ; W64-O0-NEXT:    v_writelane_b32 v0, s8, 3
595 ; W64-O0-NEXT:    v_writelane_b32 v0, s9, 4
596 ; W64-O0-NEXT:    v_writelane_b32 v0, s10, 5
597 ; W64-O0-NEXT:    v_writelane_b32 v0, s11, 6
598 ; W64-O0-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
599 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 7
600 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 8
601 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
602 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
603 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
604 ; W64-O0-NEXT:  ; %bb.2: ; in Loop: Header=BB1_1 Depth=1
605 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
606 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
607 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
608 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
609 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 7
610 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 8
611 ; W64-O0-NEXT:    v_readlane_b32 s8, v1, 3
612 ; W64-O0-NEXT:    v_readlane_b32 s9, v1, 4
613 ; W64-O0-NEXT:    v_readlane_b32 s10, v1, 5
614 ; W64-O0-NEXT:    v_readlane_b32 s11, v1, 6
615 ; W64-O0-NEXT:    v_readlane_b32 s6, v1, 0
616 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload
617 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
618 ; W64-O0-NEXT:    s_nop 2
619 ; W64-O0-NEXT:    buffer_load_format_x v0, v0, s[8:11], s6 idxen
620 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
621 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill
622 ; W64-O0-NEXT:    s_xor_b64 exec, exec, s[4:5]
623 ; W64-O0-NEXT:    s_cbranch_execnz .LBB1_1
624 ; W64-O0-NEXT:  ; %bb.3:
625 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
626 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
627 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
628 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
629 ; W64-O0-NEXT:    v_readlane_b32 s4, v0, 1
630 ; W64-O0-NEXT:    v_readlane_b32 s5, v0, 2
631 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
632 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
633 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 9
634 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 10
635 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
636 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
637 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
638 ; W64-O0-NEXT:  .LBB1_4: ; =>This Inner Loop Header: Depth=1
639 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
640 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
641 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
642 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload
643 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload
644 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload
645 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload
646 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
647 ; W64-O0-NEXT:    v_readfirstlane_b32 s8, v1
648 ; W64-O0-NEXT:    v_readfirstlane_b32 s12, v2
649 ; W64-O0-NEXT:    s_mov_b32 s4, s8
650 ; W64-O0-NEXT:    s_mov_b32 s5, s12
651 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[1:2]
652 ; W64-O0-NEXT:    v_readfirstlane_b32 s7, v3
653 ; W64-O0-NEXT:    v_readfirstlane_b32 s6, v4
654 ; W64-O0-NEXT:    s_mov_b32 s10, s7
655 ; W64-O0-NEXT:    s_mov_b32 s11, s6
656 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], v[3:4]
657 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[10:11]
658 ; W64-O0-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
659 ; W64-O0-NEXT:    s_mov_b32 s9, s12
660 ; W64-O0-NEXT:    s_mov_b32 s10, s7
661 ; W64-O0-NEXT:    s_mov_b32 s11, s6
662 ; W64-O0-NEXT:    v_writelane_b32 v0, s8, 11
663 ; W64-O0-NEXT:    v_writelane_b32 v0, s9, 12
664 ; W64-O0-NEXT:    v_writelane_b32 v0, s10, 13
665 ; W64-O0-NEXT:    v_writelane_b32 v0, s11, 14
666 ; W64-O0-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
667 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 15
668 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 16
669 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
670 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
671 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
672 ; W64-O0-NEXT:  ; %bb.5: ; in Loop: Header=BB1_4 Depth=1
673 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
674 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
675 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
676 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
677 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 15
678 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 16
679 ; W64-O0-NEXT:    v_readlane_b32 s8, v1, 11
680 ; W64-O0-NEXT:    v_readlane_b32 s9, v1, 12
681 ; W64-O0-NEXT:    v_readlane_b32 s10, v1, 13
682 ; W64-O0-NEXT:    v_readlane_b32 s11, v1, 14
683 ; W64-O0-NEXT:    v_readlane_b32 s6, v1, 0
684 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload
685 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
686 ; W64-O0-NEXT:    s_nop 2
687 ; W64-O0-NEXT:    buffer_load_format_x v0, v0, s[8:11], s6 idxen
688 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
689 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill
690 ; W64-O0-NEXT:    s_xor_b64 exec, exec, s[4:5]
691 ; W64-O0-NEXT:    s_cbranch_execnz .LBB1_4
692 ; W64-O0-NEXT:  ; %bb.6:
693 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
694 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
695 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
696 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
697 ; W64-O0-NEXT:    v_readlane_b32 s4, v0, 9
698 ; W64-O0-NEXT:    v_readlane_b32 s5, v0, 10
699 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
700 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload
701 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload
702 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload
703 ; W64-O0-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload
704 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
705 ; W64-O0-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload
706 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
707 ; W64-O0-NEXT:    global_store_dword v[4:5], v6, off
708 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
709 ; W64-O0-NEXT:    global_store_dword v[1:2], v3, off
710 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
711 ; W64-O0-NEXT:    ; kill: killed $vgpr0
712 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
713 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Reload
714 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:80 ; 4-byte Folded Reload
715 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
716 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
717 ; W64-O0-NEXT:    s_setpc_b64 s[30:31]
718 entry:
719   %val0 = call float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32> %i, i32 %c, i32 0, i32 0, i32 0) #1
720   %val1 = call float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32> %j, i32 %c, i32 0, i32 0, i32 0) #1
721   store volatile float %val0, ptr addrspace(1) %out0
722   store volatile float %val1, ptr addrspace(1) %out1
723   ret void
726 ; Confirm spills do not occur between the XOR and branch that terminate the
727 ; waterfall loop BBs.
729 define void @mubuf_vgpr_outside_entry(<4 x i32> %i, <4 x i32> %j, i32 %c, ptr addrspace(1) %in, ptr addrspace(1) %out) #0 {
730 ; GFX9_W64-LABEL: mubuf_vgpr_outside_entry:
731 ; GFX9_W64:       ; %bb.0: ; %entry
732 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
733 ; GFX9_W64-NEXT:    ;;#ASMSTART
734 ; GFX9_W64-NEXT:    s_mov_b32 s4, 17
735 ; GFX9_W64-NEXT:    ;;#ASMEND
736 ; GFX9_W64-NEXT:    v_mov_b32_e32 v8, s4
737 ; GFX9_W64-NEXT:    s_mov_b64 s[12:13], exec
738 ; GFX9_W64-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
739 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s8, v0
740 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s9, v1
741 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s10, v2
742 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s11, v3
743 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
744 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e64 s[6:7], s[10:11], v[2:3]
745 ; GFX9_W64-NEXT:    s_and_b64 s[6:7], vcc, s[6:7]
746 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[6:7], s[6:7]
747 ; GFX9_W64-NEXT:    s_nop 0
748 ; GFX9_W64-NEXT:    buffer_load_format_x v9, v8, s[8:11], 0 idxen
749 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
750 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr8
751 ; GFX9_W64-NEXT:    s_xor_b64 exec, exec, s[6:7]
752 ; GFX9_W64-NEXT:    s_cbranch_execnz .LBB2_1
753 ; GFX9_W64-NEXT:  ; %bb.2:
754 ; GFX9_W64-NEXT:    s_mov_b64 exec, s[12:13]
755 ; GFX9_W64-NEXT:    v_and_b32_e32 v0, 0x3ff, v31
756 ; GFX9_W64-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
757 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[6:7], vcc
758 ; GFX9_W64-NEXT:    s_cbranch_execz .LBB2_6
759 ; GFX9_W64-NEXT:  ; %bb.3: ; %bb1
760 ; GFX9_W64-NEXT:    v_mov_b32_e32 v0, s4
761 ; GFX9_W64-NEXT:    s_mov_b64 s[12:13], exec
762 ; GFX9_W64-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1
763 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s8, v4
764 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s9, v5
765 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s10, v6
766 ; GFX9_W64-NEXT:    v_readfirstlane_b32 s11, v7
767 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[4:5]
768 ; GFX9_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[6:7]
769 ; GFX9_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
770 ; GFX9_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
771 ; GFX9_W64-NEXT:    s_nop 0
772 ; GFX9_W64-NEXT:    buffer_load_format_x v9, v0, s[8:11], 0 idxen
773 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
774 ; GFX9_W64-NEXT:    ; implicit-def: $vgpr0
775 ; GFX9_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
776 ; GFX9_W64-NEXT:    s_cbranch_execnz .LBB2_4
777 ; GFX9_W64-NEXT:  ; %bb.5:
778 ; GFX9_W64-NEXT:    s_mov_b64 exec, s[12:13]
779 ; GFX9_W64-NEXT:  .LBB2_6: ; %bb2
780 ; GFX9_W64-NEXT:    s_or_b64 exec, exec, s[6:7]
781 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0)
782 ; GFX9_W64-NEXT:    global_store_dword v[11:12], v9, off
783 ; GFX9_W64-NEXT:    s_waitcnt vmcnt(0)
784 ; GFX9_W64-NEXT:    s_setpc_b64 s[30:31]
786 ; GFX1010_W32-LABEL: mubuf_vgpr_outside_entry:
787 ; GFX1010_W32:       ; %bb.0: ; %entry
788 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
789 ; GFX1010_W32-NEXT:    ;;#ASMSTART
790 ; GFX1010_W32-NEXT:    s_mov_b32 s4, 17
791 ; GFX1010_W32-NEXT:    ;;#ASMEND
792 ; GFX1010_W32-NEXT:    v_mov_b32_e32 v8, s4
793 ; GFX1010_W32-NEXT:    s_mov_b32 s6, exec_lo
794 ; GFX1010_W32-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
795 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s8, v0
796 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s9, v1
797 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s10, v2
798 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s11, v3
799 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
800 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e64 s5, s[10:11], v[2:3]
801 ; GFX1010_W32-NEXT:    s_and_b32 s5, vcc_lo, s5
802 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s5, s5
803 ; GFX1010_W32-NEXT:    buffer_load_format_x v9, v8, s[8:11], 0 idxen
804 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
805 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr8
806 ; GFX1010_W32-NEXT:    s_waitcnt_depctr 0xffe3
807 ; GFX1010_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s5
808 ; GFX1010_W32-NEXT:    s_cbranch_execnz .LBB2_1
809 ; GFX1010_W32-NEXT:  ; %bb.2:
810 ; GFX1010_W32-NEXT:    s_mov_b32 exec_lo, s6
811 ; GFX1010_W32-NEXT:    v_and_b32_e32 v0, 0x3ff, v31
812 ; GFX1010_W32-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
813 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s5, vcc_lo
814 ; GFX1010_W32-NEXT:    s_cbranch_execz .LBB2_6
815 ; GFX1010_W32-NEXT:  ; %bb.3: ; %bb1
816 ; GFX1010_W32-NEXT:    v_mov_b32_e32 v0, s4
817 ; GFX1010_W32-NEXT:    s_mov_b32 s6, exec_lo
818 ; GFX1010_W32-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1
819 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s8, v4
820 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s9, v5
821 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s10, v6
822 ; GFX1010_W32-NEXT:    v_readfirstlane_b32 s11, v7
823 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[4:5]
824 ; GFX1010_W32-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[6:7]
825 ; GFX1010_W32-NEXT:    s_and_b32 s4, vcc_lo, s4
826 ; GFX1010_W32-NEXT:    s_and_saveexec_b32 s4, s4
827 ; GFX1010_W32-NEXT:    buffer_load_format_x v9, v0, s[8:11], 0 idxen
828 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
829 ; GFX1010_W32-NEXT:    ; implicit-def: $vgpr0
830 ; GFX1010_W32-NEXT:    s_waitcnt_depctr 0xffe3
831 ; GFX1010_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
832 ; GFX1010_W32-NEXT:    s_cbranch_execnz .LBB2_4
833 ; GFX1010_W32-NEXT:  ; %bb.5:
834 ; GFX1010_W32-NEXT:    s_mov_b32 exec_lo, s6
835 ; GFX1010_W32-NEXT:  .LBB2_6: ; %bb2
836 ; GFX1010_W32-NEXT:    s_or_b32 exec_lo, exec_lo, s5
837 ; GFX1010_W32-NEXT:    s_waitcnt vmcnt(0)
838 ; GFX1010_W32-NEXT:    global_store_dword v[11:12], v9, off
839 ; GFX1010_W32-NEXT:    s_waitcnt_vscnt null, 0x0
840 ; GFX1010_W32-NEXT:    s_setpc_b64 s[30:31]
842 ; GFX1010_W64-LABEL: mubuf_vgpr_outside_entry:
843 ; GFX1010_W64:       ; %bb.0: ; %entry
844 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
845 ; GFX1010_W64-NEXT:    ;;#ASMSTART
846 ; GFX1010_W64-NEXT:    s_mov_b32 s4, 17
847 ; GFX1010_W64-NEXT:    ;;#ASMEND
848 ; GFX1010_W64-NEXT:    v_mov_b32_e32 v8, s4
849 ; GFX1010_W64-NEXT:    s_mov_b64 s[12:13], exec
850 ; GFX1010_W64-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
851 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s8, v0
852 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s9, v1
853 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s10, v2
854 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s11, v3
855 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
856 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e64 s[6:7], s[10:11], v[2:3]
857 ; GFX1010_W64-NEXT:    s_and_b64 s[6:7], vcc, s[6:7]
858 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[6:7], s[6:7]
859 ; GFX1010_W64-NEXT:    buffer_load_format_x v9, v8, s[8:11], 0 idxen
860 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
861 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr8
862 ; GFX1010_W64-NEXT:    s_waitcnt_depctr 0xffe3
863 ; GFX1010_W64-NEXT:    s_xor_b64 exec, exec, s[6:7]
864 ; GFX1010_W64-NEXT:    s_cbranch_execnz .LBB2_1
865 ; GFX1010_W64-NEXT:  ; %bb.2:
866 ; GFX1010_W64-NEXT:    s_mov_b64 exec, s[12:13]
867 ; GFX1010_W64-NEXT:    v_and_b32_e32 v0, 0x3ff, v31
868 ; GFX1010_W64-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
869 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[6:7], vcc
870 ; GFX1010_W64-NEXT:    s_cbranch_execz .LBB2_6
871 ; GFX1010_W64-NEXT:  ; %bb.3: ; %bb1
872 ; GFX1010_W64-NEXT:    v_mov_b32_e32 v0, s4
873 ; GFX1010_W64-NEXT:    s_mov_b64 s[12:13], exec
874 ; GFX1010_W64-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1
875 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s8, v4
876 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s9, v5
877 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s10, v6
878 ; GFX1010_W64-NEXT:    v_readfirstlane_b32 s11, v7
879 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[4:5]
880 ; GFX1010_W64-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[6:7]
881 ; GFX1010_W64-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
882 ; GFX1010_W64-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
883 ; GFX1010_W64-NEXT:    buffer_load_format_x v9, v0, s[8:11], 0 idxen
884 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
885 ; GFX1010_W64-NEXT:    ; implicit-def: $vgpr0
886 ; GFX1010_W64-NEXT:    s_waitcnt_depctr 0xffe3
887 ; GFX1010_W64-NEXT:    s_xor_b64 exec, exec, s[4:5]
888 ; GFX1010_W64-NEXT:    s_cbranch_execnz .LBB2_4
889 ; GFX1010_W64-NEXT:  ; %bb.5:
890 ; GFX1010_W64-NEXT:    s_mov_b64 exec, s[12:13]
891 ; GFX1010_W64-NEXT:  .LBB2_6: ; %bb2
892 ; GFX1010_W64-NEXT:    s_or_b64 exec, exec, s[6:7]
893 ; GFX1010_W64-NEXT:    s_waitcnt vmcnt(0)
894 ; GFX1010_W64-NEXT:    global_store_dword v[11:12], v9, off
895 ; GFX1010_W64-NEXT:    s_waitcnt_vscnt null, 0x0
896 ; GFX1010_W64-NEXT:    s_setpc_b64 s[30:31]
898 ; GFX1100_W32-LABEL: mubuf_vgpr_outside_entry:
899 ; GFX1100_W32:       ; %bb.0: ; %entry
900 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
901 ; GFX1100_W32-NEXT:    ;;#ASMSTART
902 ; GFX1100_W32-NEXT:    s_mov_b32 s4, 17
903 ; GFX1100_W32-NEXT:    ;;#ASMEND
904 ; GFX1100_W32-NEXT:    v_mov_b32_e32 v8, s4
905 ; GFX1100_W32-NEXT:    s_mov_b32 s1, exec_lo
906 ; GFX1100_W32-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
907 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s8, v0
908 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s9, v1
909 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s10, v2
910 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s11, v3
911 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
912 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
913 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e64 s0, s[10:11], v[2:3]
914 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
915 ; GFX1100_W32-NEXT:    s_and_b32 s0, vcc_lo, s0
916 ; GFX1100_W32-NEXT:    s_and_saveexec_b32 s0, s0
917 ; GFX1100_W32-NEXT:    buffer_load_format_x v9, v8, s[8:11], 0 idxen
918 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
919 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr8
920 ; GFX1100_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
921 ; GFX1100_W32-NEXT:    s_cbranch_execnz .LBB2_1
922 ; GFX1100_W32-NEXT:  ; %bb.2:
923 ; GFX1100_W32-NEXT:    s_mov_b32 exec_lo, s1
924 ; GFX1100_W32-NEXT:    v_and_b32_e32 v0, 0x3ff, v31
925 ; GFX1100_W32-NEXT:    s_mov_b32 s1, exec_lo
926 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1)
927 ; GFX1100_W32-NEXT:    v_cmpx_eq_u32_e32 0, v0
928 ; GFX1100_W32-NEXT:    s_cbranch_execz .LBB2_6
929 ; GFX1100_W32-NEXT:  ; %bb.3: ; %bb1
930 ; GFX1100_W32-NEXT:    v_mov_b32_e32 v0, s4
931 ; GFX1100_W32-NEXT:    s_mov_b32 s2, exec_lo
932 ; GFX1100_W32-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1
933 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s4, v4
934 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s5, v5
935 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s6, v6
936 ; GFX1100_W32-NEXT:    v_readfirstlane_b32 s7, v7
937 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
938 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[4:5]
939 ; GFX1100_W32-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[6:7]
940 ; GFX1100_W32-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
941 ; GFX1100_W32-NEXT:    s_and_b32 s0, vcc_lo, s0
942 ; GFX1100_W32-NEXT:    s_and_saveexec_b32 s0, s0
943 ; GFX1100_W32-NEXT:    buffer_load_format_x v9, v0, s[4:7], 0 idxen
944 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
945 ; GFX1100_W32-NEXT:    ; implicit-def: $vgpr0
946 ; GFX1100_W32-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
947 ; GFX1100_W32-NEXT:    s_cbranch_execnz .LBB2_4
948 ; GFX1100_W32-NEXT:  ; %bb.5:
949 ; GFX1100_W32-NEXT:    s_mov_b32 exec_lo, s2
950 ; GFX1100_W32-NEXT:  .LBB2_6: ; %bb2
951 ; GFX1100_W32-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
952 ; GFX1100_W32-NEXT:    s_or_b32 exec_lo, exec_lo, s1
953 ; GFX1100_W32-NEXT:    s_waitcnt vmcnt(0)
954 ; GFX1100_W32-NEXT:    global_store_b32 v[11:12], v9, off dlc
955 ; GFX1100_W32-NEXT:    s_waitcnt_vscnt null, 0x0
956 ; GFX1100_W32-NEXT:    s_setpc_b64 s[30:31]
958 ; GFX1100_W64-LABEL: mubuf_vgpr_outside_entry:
959 ; GFX1100_W64:       ; %bb.0: ; %entry
960 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
961 ; GFX1100_W64-NEXT:    ;;#ASMSTART
962 ; GFX1100_W64-NEXT:    s_mov_b32 s4, 17
963 ; GFX1100_W64-NEXT:    ;;#ASMEND
964 ; GFX1100_W64-NEXT:    v_mov_b32_e32 v8, s4
965 ; GFX1100_W64-NEXT:    s_mov_b64 s[2:3], exec
966 ; GFX1100_W64-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
967 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s8, v0
968 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s9, v1
969 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s10, v2
970 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s11, v3
971 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
972 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
973 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[10:11], v[2:3]
974 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
975 ; GFX1100_W64-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
976 ; GFX1100_W64-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
977 ; GFX1100_W64-NEXT:    buffer_load_format_x v9, v8, s[8:11], 0 idxen
978 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
979 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr8
980 ; GFX1100_W64-NEXT:    s_xor_b64 exec, exec, s[0:1]
981 ; GFX1100_W64-NEXT:    s_cbranch_execnz .LBB2_1
982 ; GFX1100_W64-NEXT:  ; %bb.2:
983 ; GFX1100_W64-NEXT:    s_mov_b64 exec, s[2:3]
984 ; GFX1100_W64-NEXT:    v_and_b32_e32 v0, 0x3ff, v31
985 ; GFX1100_W64-NEXT:    s_mov_b64 s[2:3], exec
986 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1)
987 ; GFX1100_W64-NEXT:    v_cmpx_eq_u32_e32 0, v0
988 ; GFX1100_W64-NEXT:    s_cbranch_execz .LBB2_6
989 ; GFX1100_W64-NEXT:  ; %bb.3: ; %bb1
990 ; GFX1100_W64-NEXT:    v_mov_b32_e32 v0, s4
991 ; GFX1100_W64-NEXT:    s_mov_b64 s[8:9], exec
992 ; GFX1100_W64-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1
993 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s4, v4
994 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s5, v5
995 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s6, v6
996 ; GFX1100_W64-NEXT:    v_readfirstlane_b32 s7, v7
997 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
998 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[4:5]
999 ; GFX1100_W64-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[6:7]
1000 ; GFX1100_W64-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1001 ; GFX1100_W64-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
1002 ; GFX1100_W64-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
1003 ; GFX1100_W64-NEXT:    buffer_load_format_x v9, v0, s[4:7], 0 idxen
1004 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7
1005 ; GFX1100_W64-NEXT:    ; implicit-def: $vgpr0
1006 ; GFX1100_W64-NEXT:    s_xor_b64 exec, exec, s[0:1]
1007 ; GFX1100_W64-NEXT:    s_cbranch_execnz .LBB2_4
1008 ; GFX1100_W64-NEXT:  ; %bb.5:
1009 ; GFX1100_W64-NEXT:    s_mov_b64 exec, s[8:9]
1010 ; GFX1100_W64-NEXT:  .LBB2_6: ; %bb2
1011 ; GFX1100_W64-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1012 ; GFX1100_W64-NEXT:    s_or_b64 exec, exec, s[2:3]
1013 ; GFX1100_W64-NEXT:    s_waitcnt vmcnt(0)
1014 ; GFX1100_W64-NEXT:    global_store_b32 v[11:12], v9, off dlc
1015 ; GFX1100_W64-NEXT:    s_waitcnt_vscnt null, 0x0
1016 ; GFX1100_W64-NEXT:    s_setpc_b64 s[30:31]
1018 ; W64-O0-LABEL: mubuf_vgpr_outside_entry:
1019 ; W64-O0:       ; %bb.0: ; %entry
1020 ; W64-O0-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1021 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1022 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Spill
1023 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:80 ; 4-byte Folded Spill
1024 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
1025 ; W64-O0-NEXT:    ; implicit-def: $vgpr8 : SGPR spill to VGPR lane
1026 ; W64-O0-NEXT:    buffer_store_dword v31, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill
1027 ; W64-O0-NEXT:    buffer_store_dword v11, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill
1028 ; W64-O0-NEXT:    v_mov_b32_e32 v8, v6
1029 ; W64-O0-NEXT:    v_mov_b32_e32 v9, v5
1030 ; W64-O0-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload
1031 ; W64-O0-NEXT:    s_nop 0
1032 ; W64-O0-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill
1033 ; W64-O0-NEXT:    v_mov_b32_e32 v10, v3
1034 ; W64-O0-NEXT:    v_mov_b32_e32 v11, v2
1035 ; W64-O0-NEXT:    v_mov_b32_e32 v13, v1
1036 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload
1037 ; W64-O0-NEXT:    v_mov_b32_e32 v6, v0
1038 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1039 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1040 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1041 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1042 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1043 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1044 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1045 ; W64-O0-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2_vgpr3_vgpr4 killed $exec
1046 ; W64-O0-NEXT:    v_mov_b32_e32 v2, v9
1047 ; W64-O0-NEXT:    v_mov_b32_e32 v3, v8
1048 ; W64-O0-NEXT:    v_mov_b32_e32 v4, v7
1049 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1050 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1051 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1052 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1053 ; W64-O0-NEXT:    ; kill: def $vgpr6 killed $vgpr6 def $vgpr6_vgpr7_vgpr8_vgpr9 killed $exec
1054 ; W64-O0-NEXT:    v_mov_b32_e32 v7, v13
1055 ; W64-O0-NEXT:    v_mov_b32_e32 v8, v11
1056 ; W64-O0-NEXT:    v_mov_b32_e32 v9, v10
1057 ; W64-O0-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill
1058 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1059 ; W64-O0-NEXT:    buffer_store_dword v7, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill
1060 ; W64-O0-NEXT:    buffer_store_dword v8, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill
1061 ; W64-O0-NEXT:    buffer_store_dword v9, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill
1062 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1063 ; W64-O0-NEXT:    ; implicit-def: $sgpr4
1064 ; W64-O0-NEXT:    ; kill: def $vgpr5 killed $vgpr5 def $vgpr5_vgpr6 killed $exec
1065 ; W64-O0-NEXT:    v_mov_b32_e32 v6, v12
1066 ; W64-O0-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill
1067 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1068 ; W64-O0-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill
1069 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill
1070 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1071 ; W64-O0-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill
1072 ; W64-O0-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill
1073 ; W64-O0-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill
1074 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5_sgpr6_sgpr7
1075 ; W64-O0-NEXT:    ;;#ASMSTART
1076 ; W64-O0-NEXT:    s_mov_b32 s4, 17
1077 ; W64-O0-NEXT:    ;;#ASMEND
1078 ; W64-O0-NEXT:    s_mov_b32 s5, s4
1079 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 0
1080 ; W64-O0-NEXT:    s_mov_b32 s5, 0
1081 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 1
1082 ; W64-O0-NEXT:    v_mov_b32_e32 v1, s4
1083 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
1084 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
1085 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 2
1086 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 3
1087 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1088 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
1089 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1090 ; W64-O0-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
1091 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1092 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1093 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1094 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload
1095 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload
1096 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload
1097 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload
1098 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1099 ; W64-O0-NEXT:    v_readfirstlane_b32 s8, v1
1100 ; W64-O0-NEXT:    v_readfirstlane_b32 s12, v2
1101 ; W64-O0-NEXT:    s_mov_b32 s4, s8
1102 ; W64-O0-NEXT:    s_mov_b32 s5, s12
1103 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[1:2]
1104 ; W64-O0-NEXT:    v_readfirstlane_b32 s7, v3
1105 ; W64-O0-NEXT:    v_readfirstlane_b32 s6, v4
1106 ; W64-O0-NEXT:    s_mov_b32 s10, s7
1107 ; W64-O0-NEXT:    s_mov_b32 s11, s6
1108 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], v[3:4]
1109 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[10:11]
1110 ; W64-O0-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
1111 ; W64-O0-NEXT:    s_mov_b32 s9, s12
1112 ; W64-O0-NEXT:    s_mov_b32 s10, s7
1113 ; W64-O0-NEXT:    s_mov_b32 s11, s6
1114 ; W64-O0-NEXT:    v_writelane_b32 v0, s8, 4
1115 ; W64-O0-NEXT:    v_writelane_b32 v0, s9, 5
1116 ; W64-O0-NEXT:    v_writelane_b32 v0, s10, 6
1117 ; W64-O0-NEXT:    v_writelane_b32 v0, s11, 7
1118 ; W64-O0-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
1119 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 8
1120 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 9
1121 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1122 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
1123 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1124 ; W64-O0-NEXT:  ; %bb.2: ; in Loop: Header=BB2_1 Depth=1
1125 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1126 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
1127 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1128 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1129 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 8
1130 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 9
1131 ; W64-O0-NEXT:    v_readlane_b32 s8, v1, 4
1132 ; W64-O0-NEXT:    v_readlane_b32 s9, v1, 5
1133 ; W64-O0-NEXT:    v_readlane_b32 s10, v1, 6
1134 ; W64-O0-NEXT:    v_readlane_b32 s11, v1, 7
1135 ; W64-O0-NEXT:    v_readlane_b32 s6, v1, 1
1136 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
1137 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1138 ; W64-O0-NEXT:    s_nop 2
1139 ; W64-O0-NEXT:    buffer_load_format_x v0, v0, s[8:11], s6 idxen
1140 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1141 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill
1142 ; W64-O0-NEXT:    s_xor_b64 exec, exec, s[4:5]
1143 ; W64-O0-NEXT:    s_cbranch_execnz .LBB2_1
1144 ; W64-O0-NEXT:  ; %bb.3:
1145 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1146 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1147 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1148 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1149 ; W64-O0-NEXT:    v_readlane_b32 s6, v0, 2
1150 ; W64-O0-NEXT:    v_readlane_b32 s7, v0, 3
1151 ; W64-O0-NEXT:    s_mov_b64 exec, s[6:7]
1152 ; W64-O0-NEXT:    v_readlane_b32 s4, v0, 1
1153 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload
1154 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload
1155 ; W64-O0-NEXT:    s_mov_b32 s5, 0x3ff
1156 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1157 ; W64-O0-NEXT:    v_and_b32_e64 v2, v2, s5
1158 ; W64-O0-NEXT:    v_cmp_eq_u32_e64 s[6:7], v2, s4
1159 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill
1160 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
1161 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 10
1162 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 11
1163 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1164 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
1165 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1166 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[6:7]
1167 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
1168 ; W64-O0-NEXT:    s_cbranch_execz .LBB2_8
1169 ; W64-O0-NEXT:  ; %bb.4: ; %bb1
1170 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1171 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1172 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1173 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1174 ; W64-O0-NEXT:    v_readlane_b32 s4, v0, 0
1175 ; W64-O0-NEXT:    s_mov_b32 s5, 0
1176 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 12
1177 ; W64-O0-NEXT:    v_mov_b32_e32 v1, s4
1178 ; W64-O0-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill
1179 ; W64-O0-NEXT:    ; implicit-def: $sgpr4_sgpr5_sgpr6_sgpr7
1180 ; W64-O0-NEXT:    s_mov_b64 s[4:5], exec
1181 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 13
1182 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 14
1183 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1184 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
1185 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1186 ; W64-O0-NEXT:  .LBB2_5: ; =>This Inner Loop Header: Depth=1
1187 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1188 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1189 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1190 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload
1191 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload
1192 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload
1193 ; W64-O0-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload
1194 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1195 ; W64-O0-NEXT:    v_readfirstlane_b32 s8, v1
1196 ; W64-O0-NEXT:    v_readfirstlane_b32 s12, v2
1197 ; W64-O0-NEXT:    s_mov_b32 s4, s8
1198 ; W64-O0-NEXT:    s_mov_b32 s5, s12
1199 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[4:5], v[1:2]
1200 ; W64-O0-NEXT:    v_readfirstlane_b32 s7, v3
1201 ; W64-O0-NEXT:    v_readfirstlane_b32 s6, v4
1202 ; W64-O0-NEXT:    s_mov_b32 s10, s7
1203 ; W64-O0-NEXT:    s_mov_b32 s11, s6
1204 ; W64-O0-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], v[3:4]
1205 ; W64-O0-NEXT:    s_and_b64 s[4:5], s[4:5], s[10:11]
1206 ; W64-O0-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11
1207 ; W64-O0-NEXT:    s_mov_b32 s9, s12
1208 ; W64-O0-NEXT:    s_mov_b32 s10, s7
1209 ; W64-O0-NEXT:    s_mov_b32 s11, s6
1210 ; W64-O0-NEXT:    v_writelane_b32 v0, s8, 15
1211 ; W64-O0-NEXT:    v_writelane_b32 v0, s9, 16
1212 ; W64-O0-NEXT:    v_writelane_b32 v0, s10, 17
1213 ; W64-O0-NEXT:    v_writelane_b32 v0, s11, 18
1214 ; W64-O0-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
1215 ; W64-O0-NEXT:    v_writelane_b32 v0, s4, 19
1216 ; W64-O0-NEXT:    v_writelane_b32 v0, s5, 20
1217 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1218 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
1219 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1220 ; W64-O0-NEXT:  ; %bb.6: ; in Loop: Header=BB2_5 Depth=1
1221 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1222 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
1223 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1224 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1225 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 19
1226 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 20
1227 ; W64-O0-NEXT:    v_readlane_b32 s8, v1, 15
1228 ; W64-O0-NEXT:    v_readlane_b32 s9, v1, 16
1229 ; W64-O0-NEXT:    v_readlane_b32 s10, v1, 17
1230 ; W64-O0-NEXT:    v_readlane_b32 s11, v1, 18
1231 ; W64-O0-NEXT:    v_readlane_b32 s6, v1, 12
1232 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload
1233 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1234 ; W64-O0-NEXT:    s_nop 2
1235 ; W64-O0-NEXT:    buffer_load_format_x v0, v0, s[8:11], s6 idxen
1236 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1237 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill
1238 ; W64-O0-NEXT:    s_xor_b64 exec, exec, s[4:5]
1239 ; W64-O0-NEXT:    s_cbranch_execnz .LBB2_5
1240 ; W64-O0-NEXT:  ; %bb.7:
1241 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1242 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 ; 4-byte Folded Reload
1243 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1244 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1245 ; W64-O0-NEXT:    v_readlane_b32 s4, v1, 13
1246 ; W64-O0-NEXT:    v_readlane_b32 s5, v1, 14
1247 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
1248 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload
1249 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1250 ; W64-O0-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill
1251 ; W64-O0-NEXT:  .LBB2_8: ; %bb2
1252 ; W64-O0-NEXT:    s_or_saveexec_b64 s[16:17], -1
1253 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
1254 ; W64-O0-NEXT:    s_mov_b64 exec, s[16:17]
1255 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1256 ; W64-O0-NEXT:    v_readlane_b32 s4, v0, 10
1257 ; W64-O0-NEXT:    v_readlane_b32 s5, v0, 11
1258 ; W64-O0-NEXT:    s_or_b64 exec, exec, s[4:5]
1259 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload
1260 ; W64-O0-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload
1261 ; W64-O0-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload
1262 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1263 ; W64-O0-NEXT:    global_store_dword v[1:2], v3, off
1264 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1265 ; W64-O0-NEXT:    ; kill: killed $vgpr0
1266 ; W64-O0-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1267 ; W64-O0-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Reload
1268 ; W64-O0-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:80 ; 4-byte Folded Reload
1269 ; W64-O0-NEXT:    s_mov_b64 exec, s[4:5]
1270 ; W64-O0-NEXT:    s_waitcnt vmcnt(0)
1271 ; W64-O0-NEXT:    s_setpc_b64 s[30:31]
1272 entry:
1273   %live.out.reg = call i32 asm sideeffect "s_mov_b32 $0, 17", "={s4}" ()
1274   %val0 = call float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32> %i, i32 %live.out.reg, i32 0, i32 0, i32 0) #1
1275   %idx = call i32 @llvm.amdgcn.workitem.id.x() #1
1276   %cmp = icmp eq i32 %idx, 0
1277   br i1 %cmp, label %bb1, label %bb2
1279 bb1:
1280   %val1 = call float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32> %j, i32 %live.out.reg, i32 0, i32 0, i32 0) #1
1281   br label %bb2
1283 bb2:
1284   %val = phi float [ %val0, %entry ], [ %val1, %bb1 ]
1285   store volatile float %val, ptr addrspace(1) %out
1286   ret void
1289 declare i32 @llvm.amdgcn.workitem.id.x() #1
1290 declare float @llvm.amdgcn.struct.buffer.load.format.f32(<4 x i32>, i32, i32, i32, i32 immarg) #1
1292 attributes #0 = { nounwind }
1293 attributes #1 = { nounwind readonly }