[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / offset-split-flat.ll
blobea1e784fe58e2e8ccedaa706f4db74ef988f7aa2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX9,GFX9-SDAG %s
3 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-SDAG %s
4 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG %s
5 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX9,GFX9-GISEL %s
6 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-GISEL %s
7 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s
9 ; Test splitting flat instruction offsets into the low and high bits
10 ; when the offset doesn't fit in the offset field.
12 define i8 @flat_inst_valu_offset_1(ptr %p) {
13 ; GFX9-LABEL: flat_inst_valu_offset_1:
14 ; GFX9:       ; %bb.0:
15 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:1
17 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
18 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
20 ; GFX10-LABEL: flat_inst_valu_offset_1:
21 ; GFX10:       ; %bb.0:
22 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23 ; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, 1
24 ; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
25 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1]
26 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
27 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29 ; GFX11-LABEL: flat_inst_valu_offset_1:
30 ; GFX11:       ; %bb.0:
31 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:1
33 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
34 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
35   %gep = getelementptr i8, ptr %p, i64 1
36   %load = load i8, ptr %gep, align 4
37   ret i8 %load
40 define i8 @flat_inst_valu_offset_11bit_max(ptr %p) {
41 ; GFX9-LABEL: flat_inst_valu_offset_11bit_max:
42 ; GFX9:       ; %bb.0:
43 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:2047
45 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
46 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
48 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_11bit_max:
49 ; GFX10-SDAG:       ; %bb.0:
50 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x7ff, v0
52 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
53 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
54 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
55 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
57 ; GFX11-LABEL: flat_inst_valu_offset_11bit_max:
58 ; GFX11:       ; %bb.0:
59 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:2047
61 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
62 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
64 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_11bit_max:
65 ; GFX10-GISEL:       ; %bb.0:
66 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
67 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0x7ff
68 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
69 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
70 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
71 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
72 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
73 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
74 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
75   %gep = getelementptr i8, ptr %p, i64 2047
76   %load = load i8, ptr %gep, align 4
77   ret i8 %load
80 define i8 @flat_inst_valu_offset_12bit_max(ptr %p) {
81 ; GFX9-LABEL: flat_inst_valu_offset_12bit_max:
82 ; GFX9:       ; %bb.0:
83 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
84 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
85 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
86 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
88 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_12bit_max:
89 ; GFX10-SDAG:       ; %bb.0:
90 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, v0
92 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
93 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
94 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
95 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
97 ; GFX11-LABEL: flat_inst_valu_offset_12bit_max:
98 ; GFX11:       ; %bb.0:
99 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
101 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
102 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
104 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_12bit_max:
105 ; GFX10-GISEL:       ; %bb.0:
106 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
107 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0xfff
108 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
109 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
110 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
111 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
112 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
113 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
114 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
115   %gep = getelementptr i8, ptr %p, i64 4095
116   %load = load i8, ptr %gep, align 4
117   ret i8 %load
120 define i8 @flat_inst_valu_offset_13bit_max(ptr %p) {
121 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_13bit_max:
122 ; GFX9-SDAG:       ; %bb.0:
123 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
124 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
125 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
126 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
127 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
128 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
130 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_13bit_max:
131 ; GFX10-SDAG:       ; %bb.0:
132 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
133 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, v0
134 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
135 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
136 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
137 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
139 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_13bit_max:
140 ; GFX11-SDAG:       ; %bb.0:
141 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
142 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
143 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
144 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
145 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
146 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
148 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_13bit_max:
149 ; GFX9-GISEL:       ; %bb.0:
150 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
151 ; GFX9-GISEL-NEXT:    s_mov_b64 s[4:5], 0x1fff
152 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
153 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
154 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
155 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
156 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
157 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
158 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
160 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_13bit_max:
161 ; GFX10-GISEL:       ; %bb.0:
162 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
163 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0x1fff
164 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
165 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
166 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
167 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
168 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
169 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
170 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
172 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_13bit_max:
173 ; GFX11-GISEL:       ; %bb.0:
174 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
175 ; GFX11-GISEL-NEXT:    s_mov_b64 s[0:1], 0x1fff
176 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
177 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
178 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
179 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
180 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
181 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
182 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
183 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
184   %gep = getelementptr i8, ptr %p, i64 8191
185   %load = load i8, ptr %gep, align 4
186   ret i8 %load
189 define i8 @flat_inst_valu_offset_neg_11bit_max(ptr %p) {
190 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_neg_11bit_max:
191 ; GFX9-SDAG:       ; %bb.0:
192 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
193 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
194 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
195 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
196 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
197 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
199 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_neg_11bit_max:
200 ; GFX10-SDAG:       ; %bb.0:
201 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
202 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff800, v0
203 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
204 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
205 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
206 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
208 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_neg_11bit_max:
209 ; GFX11-SDAG:       ; %bb.0:
210 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
211 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff800, v0
212 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
213 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
214 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
215 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
217 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_neg_11bit_max:
218 ; GFX9-GISEL:       ; %bb.0:
219 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
220 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xf800
221 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
222 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
223 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
224 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
225 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
226 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
227 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
228 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
230 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_neg_11bit_max:
231 ; GFX10-GISEL:       ; %bb.0:
232 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
233 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xf800
234 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
235 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
236 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
237 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
238 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
239 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
240 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
241 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
243 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_neg_11bit_max:
244 ; GFX11-GISEL:       ; %bb.0:
245 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
246 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xf800
247 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
248 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
249 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
250 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
251 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
252 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
253 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
254 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
255 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
256   %gep = getelementptr i8, ptr %p, i64 -2048
257   %load = load i8, ptr %gep, align 4
258   ret i8 %load
261 define i8 @flat_inst_valu_offset_neg_12bit_max(ptr %p) {
262 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_neg_12bit_max:
263 ; GFX9-SDAG:       ; %bb.0:
264 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
265 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff000, v0
266 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
267 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
268 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
269 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
271 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_neg_12bit_max:
272 ; GFX10-SDAG:       ; %bb.0:
273 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
274 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff000, v0
275 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
276 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
277 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
278 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
280 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_neg_12bit_max:
281 ; GFX11-SDAG:       ; %bb.0:
282 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
283 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff000, v0
284 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
285 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
286 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
287 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
289 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_neg_12bit_max:
290 ; GFX9-GISEL:       ; %bb.0:
291 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
292 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xf000
293 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
294 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
295 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
296 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
297 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
298 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
299 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
300 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
302 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_neg_12bit_max:
303 ; GFX10-GISEL:       ; %bb.0:
304 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
305 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xf000
306 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
307 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
308 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
309 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
310 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
311 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
312 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
313 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
315 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_neg_12bit_max:
316 ; GFX11-GISEL:       ; %bb.0:
317 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
318 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xf000
319 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
320 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
321 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
322 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
323 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
324 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
325 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
326 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
327 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
328   %gep = getelementptr i8, ptr %p, i64 -4096
329   %load = load i8, ptr %gep, align 4
330   ret i8 %load
333 define i8 @flat_inst_valu_offset_neg_13bit_max(ptr %p) {
334 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_neg_13bit_max:
335 ; GFX9-SDAG:       ; %bb.0:
336 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
337 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffe000, v0
338 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
339 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
340 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
341 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
343 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_neg_13bit_max:
344 ; GFX10-SDAG:       ; %bb.0:
345 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
346 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffe000, v0
347 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
348 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
349 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
350 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
352 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_neg_13bit_max:
353 ; GFX11-SDAG:       ; %bb.0:
354 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
355 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffe000, v0
356 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
357 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
358 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
359 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
361 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_neg_13bit_max:
362 ; GFX9-GISEL:       ; %bb.0:
363 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
364 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xe000
365 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
366 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
367 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
368 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
369 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
370 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
371 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
372 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
374 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_neg_13bit_max:
375 ; GFX10-GISEL:       ; %bb.0:
376 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
377 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xe000
378 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
379 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
380 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
381 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
382 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
383 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
384 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
385 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
387 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_neg_13bit_max:
388 ; GFX11-GISEL:       ; %bb.0:
389 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
390 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xe000
391 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
392 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
393 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
394 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
395 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
396 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
397 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
398 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
399 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
400   %gep = getelementptr i8, ptr %p, i64 -8192
401   %load = load i8, ptr %gep, align 4
402   ret i8 %load
405 define i8 @flat_inst_valu_offset_2x_11bit_max(ptr %p) {
406 ; GFX9-LABEL: flat_inst_valu_offset_2x_11bit_max:
407 ; GFX9:       ; %bb.0:
408 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
410 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
411 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
413 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_11bit_max:
414 ; GFX10-SDAG:       ; %bb.0:
415 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
416 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, v0
417 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
418 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
419 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
420 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
422 ; GFX11-LABEL: flat_inst_valu_offset_2x_11bit_max:
423 ; GFX11:       ; %bb.0:
424 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
425 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
426 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
427 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
429 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_11bit_max:
430 ; GFX10-GISEL:       ; %bb.0:
431 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
432 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0xfff
433 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
434 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
435 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
436 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
437 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
438 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
439 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
440   %gep = getelementptr i8, ptr %p, i64 4095
441   %load = load i8, ptr %gep, align 4
442   ret i8 %load
445 define i8 @flat_inst_valu_offset_2x_12bit_max(ptr %p) {
446 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_2x_12bit_max:
447 ; GFX9-SDAG:       ; %bb.0:
448 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
449 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
450 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
451 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
452 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
453 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
455 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_12bit_max:
456 ; GFX10-SDAG:       ; %bb.0:
457 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
458 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, v0
459 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
460 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
461 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
462 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
464 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_2x_12bit_max:
465 ; GFX11-SDAG:       ; %bb.0:
466 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
467 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
468 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
469 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
470 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
471 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
473 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_2x_12bit_max:
474 ; GFX9-GISEL:       ; %bb.0:
475 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
476 ; GFX9-GISEL-NEXT:    s_mov_b64 s[4:5], 0x1fff
477 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
478 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
479 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
480 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
481 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
482 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
483 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
485 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_12bit_max:
486 ; GFX10-GISEL:       ; %bb.0:
487 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
488 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0x1fff
489 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
490 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
491 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
492 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
493 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
494 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
495 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
497 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_2x_12bit_max:
498 ; GFX11-GISEL:       ; %bb.0:
499 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
500 ; GFX11-GISEL-NEXT:    s_mov_b64 s[0:1], 0x1fff
501 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
502 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
503 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
504 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
505 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
506 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
507 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
508 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
509   %gep = getelementptr i8, ptr %p, i64 8191
510   %load = load i8, ptr %gep, align 4
511   ret i8 %load
514 define i8 @flat_inst_valu_offset_2x_13bit_max(ptr %p) {
515 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_2x_13bit_max:
516 ; GFX9-SDAG:       ; %bb.0:
517 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
518 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x3000, v0
519 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
520 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
521 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
522 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
524 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_13bit_max:
525 ; GFX10-SDAG:       ; %bb.0:
526 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
527 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x3fff, v0
528 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
529 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
530 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
531 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
533 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_2x_13bit_max:
534 ; GFX11-SDAG:       ; %bb.0:
535 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
536 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x3000, v0
537 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo
538 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
539 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
540 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
542 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_2x_13bit_max:
543 ; GFX9-GISEL:       ; %bb.0:
544 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
545 ; GFX9-GISEL-NEXT:    s_mov_b64 s[4:5], 0x3fff
546 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
547 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
548 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
549 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
550 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
551 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
552 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
554 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_13bit_max:
555 ; GFX10-GISEL:       ; %bb.0:
556 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
557 ; GFX10-GISEL-NEXT:    s_mov_b64 s[4:5], 0x3fff
558 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
559 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
560 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
561 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
562 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
563 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
564 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
566 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_2x_13bit_max:
567 ; GFX11-GISEL:       ; %bb.0:
568 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
569 ; GFX11-GISEL-NEXT:    s_mov_b64 s[0:1], 0x3fff
570 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
571 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
572 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
573 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
574 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
575 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
576 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
577 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
578   %gep = getelementptr i8, ptr %p, i64 16383
579   %load = load i8, ptr %gep, align 4
580   ret i8 %load
583 define i8 @flat_inst_valu_offset_2x_neg_11bit_max(ptr %p) {
584 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
585 ; GFX9-SDAG:       ; %bb.0:
586 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
587 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff000, v0
588 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
589 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
590 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
591 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
593 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
594 ; GFX10-SDAG:       ; %bb.0:
595 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
596 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff000, v0
597 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
598 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
599 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
600 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
602 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
603 ; GFX11-SDAG:       ; %bb.0:
604 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
605 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfffff000, v0
606 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
607 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
608 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
609 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
611 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
612 ; GFX9-GISEL:       ; %bb.0:
613 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
614 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xf000
615 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
616 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
617 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
618 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
619 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
620 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
621 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
622 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
624 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
625 ; GFX10-GISEL:       ; %bb.0:
626 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
627 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xf000
628 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
629 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
630 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
631 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
632 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
633 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
634 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
635 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
637 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_2x_neg_11bit_max:
638 ; GFX11-GISEL:       ; %bb.0:
639 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
640 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xf000
641 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
642 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
643 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
644 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
645 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
646 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
647 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
648 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
649 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
650   %gep = getelementptr i8, ptr %p, i64 -4096
651   %load = load i8, ptr %gep, align 4
652   ret i8 %load
655 define i8 @flat_inst_valu_offset_2x_neg_12bit_max(ptr %p) {
656 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
657 ; GFX9-SDAG:       ; %bb.0:
658 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
659 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffe000, v0
660 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
661 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
662 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
663 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
665 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
666 ; GFX10-SDAG:       ; %bb.0:
667 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
668 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffe000, v0
669 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
670 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
671 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
672 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
674 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
675 ; GFX11-SDAG:       ; %bb.0:
676 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
677 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffe000, v0
678 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
679 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
680 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
681 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
683 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
684 ; GFX9-GISEL:       ; %bb.0:
685 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
686 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xe000
687 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
688 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
689 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
690 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
691 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
692 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
693 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
694 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
696 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
697 ; GFX10-GISEL:       ; %bb.0:
698 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
699 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xe000
700 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
701 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
702 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
703 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
704 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
705 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
706 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
707 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
709 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_2x_neg_12bit_max:
710 ; GFX11-GISEL:       ; %bb.0:
711 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xe000
713 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
714 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
715 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
716 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
717 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
718 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
719 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
720 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
721 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
722   %gep = getelementptr i8, ptr %p, i64 -8192
723   %load = load i8, ptr %gep, align 4
724   ret i8 %load
727 define i8 @flat_inst_valu_offset_2x_neg_13bit_max(ptr %p) {
728 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
729 ; GFX9-SDAG:       ; %bb.0:
730 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
731 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffc000, v0
732 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
733 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
734 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
735 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
737 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
738 ; GFX10-SDAG:       ; %bb.0:
739 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
740 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffc000, v0
741 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
742 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
743 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
744 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
746 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
747 ; GFX11-SDAG:       ; %bb.0:
748 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
749 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xffffc000, v0
750 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, -1, v1, vcc_lo
751 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
752 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
753 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
755 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
756 ; GFX9-GISEL:       ; %bb.0:
757 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
758 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xc000
759 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, -1
760 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
761 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
762 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
763 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
764 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
765 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
766 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
768 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
769 ; GFX10-GISEL:       ; %bb.0:
770 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
771 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xc000
772 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, -1
773 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
774 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
775 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
776 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
777 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
778 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
779 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
781 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_2x_neg_13bit_max:
782 ; GFX11-GISEL:       ; %bb.0:
783 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
784 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xc000
785 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, -1
786 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
787 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
788 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
789 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
790 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
791 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
792 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
793 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
794   %gep = getelementptr i8, ptr %p, i64 -16384
795   %load = load i8, ptr %gep, align 4
796   ret i8 %load
799 ; Fill 11-bit low-bits (1ull << 33) | 2047
800 define i8 @flat_inst_valu_offset_64bit_11bit_split0(ptr %p) {
801 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
802 ; GFX9-SDAG:       ; %bb.0:
803 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
804 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0, v0
805 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
806 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:2047
807 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
808 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
810 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
811 ; GFX10-SDAG:       ; %bb.0:
812 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
813 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x7ff, v0
814 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
815 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
816 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
817 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
819 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
820 ; GFX11-SDAG:       ; %bb.0:
821 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
822 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0, v0
823 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
824 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:2047
825 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
826 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
828 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
829 ; GFX9-GISEL:       ; %bb.0:
830 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
831 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x7ff
832 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
833 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
834 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
835 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
836 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
837 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
838 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
839 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
841 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
842 ; GFX10-GISEL:       ; %bb.0:
843 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
844 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x7ff
845 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
846 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
847 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
848 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
849 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
850 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
851 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
852 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
854 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split0:
855 ; GFX11-GISEL:       ; %bb.0:
856 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
857 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x7ff
858 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
859 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
860 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
861 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
862 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
863 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
864 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
865 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
866 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
867   %gep = getelementptr i8, ptr %p, i64 8589936639
868   %load = load i8, ptr %gep, align 4
869   ret i8 %load
872 ; Fill 11-bit low-bits (1ull << 33) | 2048
873 define i8 @flat_inst_valu_offset_64bit_11bit_split1(ptr %p) {
874 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
875 ; GFX9-SDAG:       ; %bb.0:
876 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
877 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0, v0
878 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
879 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:2048
880 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
881 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
883 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
884 ; GFX10-SDAG:       ; %bb.0:
885 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
886 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x800, v0
887 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
888 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
889 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
890 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
892 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
893 ; GFX11-SDAG:       ; %bb.0:
894 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
895 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0, v0
896 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
897 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:2048
898 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
899 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
901 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
902 ; GFX9-GISEL:       ; %bb.0:
903 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
904 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x800
905 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
906 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
907 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
908 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
909 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
910 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
911 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
912 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
914 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
915 ; GFX10-GISEL:       ; %bb.0:
916 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
917 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x800
918 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
919 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
920 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
921 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
922 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
923 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
924 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
925 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
927 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_split1:
928 ; GFX11-GISEL:       ; %bb.0:
929 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
930 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x800
931 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
932 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
933 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
934 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
935 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
936 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
937 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
938 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
939 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
940   %gep = getelementptr i8, ptr %p, i64 8589936640
941   %load = load i8, ptr %gep, align 4
942   ret i8 %load
945 ; Fill 12-bit low-bits (1ull << 33) | 4095
946 define i8 @flat_inst_valu_offset_64bit_12bit_split0(ptr %p) {
947 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
948 ; GFX9-SDAG:       ; %bb.0:
949 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
950 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0, v0
951 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
952 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
953 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
954 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
956 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
957 ; GFX10-SDAG:       ; %bb.0:
958 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
959 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, v0
960 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
961 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
962 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
963 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
965 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
966 ; GFX11-SDAG:       ; %bb.0:
967 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
968 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0, v0
969 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
970 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
971 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
972 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
974 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
975 ; GFX9-GISEL:       ; %bb.0:
976 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
977 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xfff
978 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
979 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
980 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
981 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
982 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
983 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
984 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
985 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
987 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
988 ; GFX10-GISEL:       ; %bb.0:
989 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
990 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xfff
991 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
992 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
993 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
994 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
995 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
996 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
997 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
998 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1000 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split0:
1001 ; GFX11-GISEL:       ; %bb.0:
1002 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1003 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xfff
1004 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
1005 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1006 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1007 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1008 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1009 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1010 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1011 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1012 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1013   %gep = getelementptr i8, ptr %p, i64 8589938687
1014   %load = load i8, ptr %gep, align 4
1015   ret i8 %load
1018 ; Fill 12-bit low-bits (1ull << 33) | 4096
1019 define i8 @flat_inst_valu_offset_64bit_12bit_split1(ptr %p) {
1020 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1021 ; GFX9-SDAG:       ; %bb.0:
1022 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1023 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
1024 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
1025 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1026 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1027 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1029 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1030 ; GFX10-SDAG:       ; %bb.0:
1031 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1032 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
1033 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1034 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1035 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1036 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1038 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1039 ; GFX11-SDAG:       ; %bb.0:
1040 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1041 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
1042 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1043 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1044 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1045 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1047 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1048 ; GFX9-GISEL:       ; %bb.0:
1049 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1050 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x1000
1051 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
1052 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1053 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1054 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1055 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1056 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1057 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1058 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1060 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1061 ; GFX10-GISEL:       ; %bb.0:
1062 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1063 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x1000
1064 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
1065 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1066 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1067 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1068 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1069 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1070 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1071 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1073 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_split1:
1074 ; GFX11-GISEL:       ; %bb.0:
1075 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1076 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x1000
1077 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
1078 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1079 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1080 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1081 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1082 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1083 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1084 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1085 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1086   %gep = getelementptr i8, ptr %p, i64 8589938688
1087   %load = load i8, ptr %gep, align 4
1088   ret i8 %load
1091 ; Fill 13-bit low-bits (1ull << 33) | 8191
1092 define i8 @flat_inst_valu_offset_64bit_13bit_split0(ptr %p) {
1093 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1094 ; GFX9-SDAG:       ; %bb.0:
1095 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1096 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
1097 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
1098 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095
1099 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1100 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1102 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1103 ; GFX10-SDAG:       ; %bb.0:
1104 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1105 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, v0
1106 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1107 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1108 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1109 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1111 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1112 ; GFX11-SDAG:       ; %bb.0:
1113 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1114 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
1115 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1116 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095
1117 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1118 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1120 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1121 ; GFX9-GISEL:       ; %bb.0:
1122 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1123 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x1fff
1124 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
1125 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1126 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1127 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1128 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1129 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1130 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1131 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1133 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1134 ; GFX10-GISEL:       ; %bb.0:
1135 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1136 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x1fff
1137 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
1138 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1139 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1140 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1141 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1142 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1143 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1144 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1146 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split0:
1147 ; GFX11-GISEL:       ; %bb.0:
1148 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1149 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x1fff
1150 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
1151 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1152 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1153 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1154 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1155 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1156 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1157 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1158 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1159   %gep = getelementptr i8, ptr %p, i64 8589942783
1160   %load = load i8, ptr %gep, align 4
1161   ret i8 %load
1164 ; Fill 13-bit low-bits (1ull << 33) | 8192
1165 define i8 @flat_inst_valu_offset_64bit_13bit_split1(ptr %p) {
1166 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1167 ; GFX9-SDAG:       ; %bb.0:
1168 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1169 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x2000, v0
1170 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
1171 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1172 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1173 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1175 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1176 ; GFX10-SDAG:       ; %bb.0:
1177 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1178 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x2000, v0
1179 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1180 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1181 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1182 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1184 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1185 ; GFX11-SDAG:       ; %bb.0:
1186 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1187 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x2000, v0
1188 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 2, v1, vcc_lo
1189 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1190 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1191 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1193 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1194 ; GFX9-GISEL:       ; %bb.0:
1195 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1196 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x2000
1197 ; GFX9-GISEL-NEXT:    s_mov_b32 s5, 2
1198 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1199 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1200 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1201 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1202 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1203 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1204 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1206 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1207 ; GFX10-GISEL:       ; %bb.0:
1208 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1209 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x2000
1210 ; GFX10-GISEL-NEXT:    s_mov_b32 s5, 2
1211 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1212 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1213 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1214 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1215 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1216 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1217 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1219 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_split1:
1220 ; GFX11-GISEL:       ; %bb.0:
1221 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1222 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x2000
1223 ; GFX11-GISEL-NEXT:    s_mov_b32 s1, 2
1224 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1225 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1226 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1227 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1228 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1229 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1230 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1231 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1232   %gep = getelementptr i8, ptr %p, i64 8589942784
1233   %load = load i8, ptr %gep, align 4
1234   ret i8 %load
1237 ; Fill 11-bit low-bits, negative high bits (1ull << 63) | 2047
1238 define i8 @flat_inst_valu_offset_64bit_11bit_neg_high_split0(ptr %p) {
1239 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1240 ; GFX9-SDAG:       ; %bb.0:
1241 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1242 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x7ff, v0
1243 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1244 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1245 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1246 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1247 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1249 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1250 ; GFX10-SDAG:       ; %bb.0:
1251 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1252 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x7ff, v0
1253 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1254 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1255 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1256 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1258 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1259 ; GFX11-SDAG:       ; %bb.0:
1260 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1261 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x7ff, v0
1262 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1263 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1264 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1265 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1267 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1268 ; GFX9-GISEL:       ; %bb.0:
1269 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1270 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x7ff
1271 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1272 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1273 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1274 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1275 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1276 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1277 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1278 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1280 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1281 ; GFX10-GISEL:       ; %bb.0:
1282 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1283 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x7ff
1284 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1285 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1286 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1287 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1288 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1289 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1290 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1291 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1293 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split0:
1294 ; GFX11-GISEL:       ; %bb.0:
1295 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1296 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x7ff
1297 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1298 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1299 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1300 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1301 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1302 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1303 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1304 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1305 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1306   %gep = getelementptr i8, ptr %p, i64 -9223372036854773761
1307   %load = load i8, ptr %gep, align 4
1308   ret i8 %load
1311 ; Fill 11-bit low-bits, negative high bits (1ull << 63) | 2048
1312 define i8 @flat_inst_valu_offset_64bit_11bit_neg_high_split1(ptr %p) {
1313 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1314 ; GFX9-SDAG:       ; %bb.0:
1315 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1316 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x800, v0
1317 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1318 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1319 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1320 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1321 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1323 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1324 ; GFX10-SDAG:       ; %bb.0:
1325 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1326 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x800, v0
1327 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1328 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1329 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1330 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1332 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1333 ; GFX11-SDAG:       ; %bb.0:
1334 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1335 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x800, v0
1336 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1337 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1338 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1339 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1341 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1342 ; GFX9-GISEL:       ; %bb.0:
1343 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1344 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x800
1345 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1346 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1347 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1348 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1349 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1350 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1351 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1352 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1354 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1355 ; GFX10-GISEL:       ; %bb.0:
1356 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1357 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x800
1358 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1359 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1360 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1361 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1362 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1363 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1364 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1365 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1367 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_11bit_neg_high_split1:
1368 ; GFX11-GISEL:       ; %bb.0:
1369 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1370 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x800
1371 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1372 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1373 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1374 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1375 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1376 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1377 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1378 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1379 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1380   %gep = getelementptr i8, ptr %p, i64 -9223372036854773760
1381   %load = load i8, ptr %gep, align 4
1382   ret i8 %load
1385 ; Fill 12-bit low-bits, negative high bits (1ull << 63) | 4095
1386 define i8 @flat_inst_valu_offset_64bit_12bit_neg_high_split0(ptr %p) {
1387 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1388 ; GFX9-SDAG:       ; %bb.0:
1389 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1390 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfff, v0
1391 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1392 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1393 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1394 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1395 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1397 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1398 ; GFX10-SDAG:       ; %bb.0:
1399 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1400 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, v0
1401 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1402 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1403 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1404 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1406 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1407 ; GFX11-SDAG:       ; %bb.0:
1408 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1409 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, v0
1410 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1411 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1412 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1413 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1415 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1416 ; GFX9-GISEL:       ; %bb.0:
1417 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1418 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0xfff
1419 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1420 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1421 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1422 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1423 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1424 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1425 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1426 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1428 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1429 ; GFX10-GISEL:       ; %bb.0:
1430 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1431 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0xfff
1432 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1433 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1434 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1435 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1436 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1437 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1438 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1439 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1441 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split0:
1442 ; GFX11-GISEL:       ; %bb.0:
1443 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1444 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0xfff
1445 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1446 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1447 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1448 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1449 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1450 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1451 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1452 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1453 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1454   %gep = getelementptr i8, ptr %p, i64 -9223372036854771713
1455   %load = load i8, ptr %gep, align 4
1456   ret i8 %load
1459 ; Fill 12-bit low-bits, negative high bits (1ull << 63) | 4096
1460 define i8 @flat_inst_valu_offset_64bit_12bit_neg_high_split1(ptr %p) {
1461 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1462 ; GFX9-SDAG:       ; %bb.0:
1463 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1464 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
1465 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1466 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1467 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1468 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1469 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1471 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1472 ; GFX10-SDAG:       ; %bb.0:
1473 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1474 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
1475 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1476 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1477 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1478 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1480 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1481 ; GFX11-SDAG:       ; %bb.0:
1482 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, v0
1484 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1485 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1486 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1487 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1489 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1490 ; GFX9-GISEL:       ; %bb.0:
1491 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1492 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x1000
1493 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1494 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1495 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1496 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1497 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1498 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1499 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1500 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1502 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1503 ; GFX10-GISEL:       ; %bb.0:
1504 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1505 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x1000
1506 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1507 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1508 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1509 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1510 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1511 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1512 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1513 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1515 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_12bit_neg_high_split1:
1516 ; GFX11-GISEL:       ; %bb.0:
1517 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1518 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x1000
1519 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1520 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1521 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1522 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1523 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1524 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1525 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1526 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1527 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1528   %gep = getelementptr i8, ptr %p, i64 -9223372036854771712
1529   %load = load i8, ptr %gep, align 4
1530   ret i8 %load
1533 ; Fill 13-bit low-bits, negative high bits (1ull << 63) | 8191
1534 define i8 @flat_inst_valu_offset_64bit_13bit_neg_high_split0(ptr %p) {
1535 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1536 ; GFX9-SDAG:       ; %bb.0:
1537 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1538 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1fff, v0
1539 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1540 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1541 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1542 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1543 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1545 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1546 ; GFX10-SDAG:       ; %bb.0:
1547 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1548 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, v0
1549 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1550 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1551 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1552 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1554 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1555 ; GFX11-SDAG:       ; %bb.0:
1556 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1557 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, v0
1558 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1559 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1560 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1561 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1563 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1564 ; GFX9-GISEL:       ; %bb.0:
1565 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1566 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x1fff
1567 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1568 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1569 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1570 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1571 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1572 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1573 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1574 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1576 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1577 ; GFX10-GISEL:       ; %bb.0:
1578 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1579 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x1fff
1580 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1581 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1582 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1583 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1584 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1585 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1586 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1587 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1589 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split0:
1590 ; GFX11-GISEL:       ; %bb.0:
1591 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1592 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x1fff
1593 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1594 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1595 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1596 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1597 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1598 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1599 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1600 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1601 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1602   %gep = getelementptr i8, ptr %p, i64 -9223372036854767617
1603   %load = load i8, ptr %gep, align 4
1604   ret i8 %load
1607 ; Fill 13-bit low-bits, negative high bits (1ull << 63) | 8192
1608 define i8 @flat_inst_valu_offset_64bit_13bit_neg_high_split1(ptr %p) {
1609 ; GFX9-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1610 ; GFX9-SDAG:       ; %bb.0:
1611 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1612 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x2000, v0
1613 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v2, 1
1614 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v2, v1, vcc
1615 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1616 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1617 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
1619 ; GFX10-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1620 ; GFX10-SDAG:       ; %bb.0:
1621 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1622 ; GFX10-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x2000, v0
1623 ; GFX10-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1624 ; GFX10-SDAG-NEXT:    flat_load_ubyte v0, v[0:1]
1625 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1626 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
1628 ; GFX11-SDAG-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1629 ; GFX11-SDAG:       ; %bb.0:
1630 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1631 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x2000, v0
1632 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
1633 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1]
1634 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1635 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
1637 ; GFX9-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1638 ; GFX9-GISEL:       ; %bb.0:
1639 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1640 ; GFX9-GISEL-NEXT:    s_movk_i32 s4, 0x2000
1641 ; GFX9-GISEL-NEXT:    s_brev_b32 s5, 1
1642 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1643 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1644 ; GFX9-GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v2
1645 ; GFX9-GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v3, vcc
1646 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1647 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1648 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
1650 ; GFX10-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1651 ; GFX10-GISEL:       ; %bb.0:
1652 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1653 ; GFX10-GISEL-NEXT:    s_movk_i32 s4, 0x2000
1654 ; GFX10-GISEL-NEXT:    s_brev_b32 s5, 1
1655 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, s4
1656 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, s5
1657 ; GFX10-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1658 ; GFX10-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1659 ; GFX10-GISEL-NEXT:    flat_load_ubyte v0, v[0:1]
1660 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1661 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
1663 ; GFX11-GISEL-LABEL: flat_inst_valu_offset_64bit_13bit_neg_high_split1:
1664 ; GFX11-GISEL:       ; %bb.0:
1665 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1666 ; GFX11-GISEL-NEXT:    s_movk_i32 s0, 0x2000
1667 ; GFX11-GISEL-NEXT:    s_brev_b32 s1, 1
1668 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1669 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
1670 ; GFX11-GISEL-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v2
1671 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1672 ; GFX11-GISEL-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
1673 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1]
1674 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1675 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
1676   %gep = getelementptr i8, ptr %p, i64 -9223372036854767616
1677   %load = load i8, ptr %gep, align 4
1678   ret i8 %load
1681 define amdgpu_kernel void @flat_inst_salu_offset_1(ptr %p) {
1682 ; GFX9-LABEL: flat_inst_salu_offset_1:
1683 ; GFX9:       ; %bb.0:
1684 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1685 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1686 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1687 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1688 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:1 glc
1689 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1690 ; GFX9-NEXT:    flat_store_byte v[0:1], v0
1691 ; GFX9-NEXT:    s_endpgm
1693 ; GFX10-LABEL: flat_inst_salu_offset_1:
1694 ; GFX10:       ; %bb.0:
1695 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1696 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1697 ; GFX10-NEXT:    s_add_u32 s0, s0, 1
1698 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
1699 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1700 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1701 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1702 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1703 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1704 ; GFX10-NEXT:    s_endpgm
1706 ; GFX11-LABEL: flat_inst_salu_offset_1:
1707 ; GFX11:       ; %bb.0:
1708 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1709 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1710 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1711 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:1 glc dlc
1712 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1713 ; GFX11-NEXT:    flat_store_b8 v[0:1], v0
1714 ; GFX11-NEXT:    s_endpgm
1715   %gep = getelementptr i8, ptr %p, i64 1
1716   %load = load volatile i8, ptr %gep, align 1
1717   store i8 %load, ptr undef
1718   ret void
1721 define amdgpu_kernel void @flat_inst_salu_offset_11bit_max(ptr %p) {
1722 ; GFX9-LABEL: flat_inst_salu_offset_11bit_max:
1723 ; GFX9:       ; %bb.0:
1724 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1725 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1726 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1727 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1728 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:2047 glc
1729 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1730 ; GFX9-NEXT:    flat_store_byte v[0:1], v0
1731 ; GFX9-NEXT:    s_endpgm
1733 ; GFX10-LABEL: flat_inst_salu_offset_11bit_max:
1734 ; GFX10:       ; %bb.0:
1735 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1736 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1737 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x7ff
1738 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
1739 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1740 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1741 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1742 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1743 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1744 ; GFX10-NEXT:    s_endpgm
1746 ; GFX11-LABEL: flat_inst_salu_offset_11bit_max:
1747 ; GFX11:       ; %bb.0:
1748 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1749 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1750 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1751 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:2047 glc dlc
1752 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1753 ; GFX11-NEXT:    flat_store_b8 v[0:1], v0
1754 ; GFX11-NEXT:    s_endpgm
1755   %gep = getelementptr i8, ptr %p, i64 2047
1756   %load = load volatile i8, ptr %gep, align 1
1757   store i8 %load, ptr undef
1758   ret void
1761 define amdgpu_kernel void @flat_inst_salu_offset_12bit_max(ptr %p) {
1762 ; GFX9-LABEL: flat_inst_salu_offset_12bit_max:
1763 ; GFX9:       ; %bb.0:
1764 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1765 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1766 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1767 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1768 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
1769 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1770 ; GFX9-NEXT:    flat_store_byte v[0:1], v0
1771 ; GFX9-NEXT:    s_endpgm
1773 ; GFX10-LABEL: flat_inst_salu_offset_12bit_max:
1774 ; GFX10:       ; %bb.0:
1775 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1776 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1777 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfff
1778 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
1779 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1780 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1781 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1782 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1783 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1784 ; GFX10-NEXT:    s_endpgm
1786 ; GFX11-LABEL: flat_inst_salu_offset_12bit_max:
1787 ; GFX11:       ; %bb.0:
1788 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1789 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1790 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1791 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
1792 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1793 ; GFX11-NEXT:    flat_store_b8 v[0:1], v0
1794 ; GFX11-NEXT:    s_endpgm
1795   %gep = getelementptr i8, ptr %p, i64 4095
1796   %load = load volatile i8, ptr %gep, align 1
1797   store i8 %load, ptr undef
1798   ret void
1801 define amdgpu_kernel void @flat_inst_salu_offset_13bit_max(ptr %p) {
1802 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_13bit_max:
1803 ; GFX9-SDAG:       ; %bb.0:
1804 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1805 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1806 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
1807 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
1808 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
1809 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1810 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
1811 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1812 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
1813 ; GFX9-SDAG-NEXT:    s_endpgm
1815 ; GFX10-LABEL: flat_inst_salu_offset_13bit_max:
1816 ; GFX10:       ; %bb.0:
1817 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1818 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1819 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1fff
1820 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
1821 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1822 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1823 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1824 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1825 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1826 ; GFX10-NEXT:    s_endpgm
1828 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_13bit_max:
1829 ; GFX11-SDAG:       ; %bb.0:
1830 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1831 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1832 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x1000, s0
1833 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1834 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 0, s1, s0
1835 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
1836 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1837 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
1838 ; GFX11-SDAG-NEXT:    s_endpgm
1840 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_13bit_max:
1841 ; GFX9-GISEL:       ; %bb.0:
1842 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1843 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1844 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
1845 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0
1846 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
1847 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
1848 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
1849 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1850 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
1851 ; GFX9-GISEL-NEXT:    s_endpgm
1853 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_13bit_max:
1854 ; GFX11-GISEL:       ; %bb.0:
1855 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1856 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1857 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
1858 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0
1859 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1860 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1861 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
1862 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1863 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
1864 ; GFX11-GISEL-NEXT:    s_endpgm
1865   %gep = getelementptr i8, ptr %p, i64 8191
1866   %load = load volatile i8, ptr %gep, align 1
1867   store i8 %load, ptr undef
1868   ret void
1871 define amdgpu_kernel void @flat_inst_salu_offset_neg_11bit_max(ptr %p) {
1872 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_neg_11bit_max:
1873 ; GFX9-SDAG:       ; %bb.0:
1874 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1875 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1876 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
1877 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
1878 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff800, v0
1879 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
1880 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
1881 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1882 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
1883 ; GFX9-SDAG-NEXT:    s_endpgm
1885 ; GFX10-LABEL: flat_inst_salu_offset_neg_11bit_max:
1886 ; GFX10:       ; %bb.0:
1887 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1888 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1889 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfffff800
1890 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
1891 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1892 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1893 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1894 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1895 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1896 ; GFX10-NEXT:    s_endpgm
1898 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_neg_11bit_max:
1899 ; GFX11-SDAG:       ; %bb.0:
1900 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1901 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1902 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xfffff800, s0
1903 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1904 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
1905 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
1906 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1907 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
1908 ; GFX11-SDAG-NEXT:    s_endpgm
1910 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_neg_11bit_max:
1911 ; GFX9-GISEL:       ; %bb.0:
1912 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1913 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1914 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff800
1915 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
1916 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
1917 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
1918 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
1919 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1920 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
1921 ; GFX9-GISEL-NEXT:    s_endpgm
1923 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_neg_11bit_max:
1924 ; GFX11-GISEL:       ; %bb.0:
1925 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1926 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1927 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff800
1928 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
1929 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1930 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1931 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
1932 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1933 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
1934 ; GFX11-GISEL-NEXT:    s_endpgm
1935   %gep = getelementptr i8, ptr %p, i64 -2048
1936   %load = load volatile i8, ptr %gep, align 1
1937   store i8 %load, ptr undef
1938   ret void
1941 define amdgpu_kernel void @flat_inst_salu_offset_neg_12bit_max(ptr %p) {
1942 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_neg_12bit_max:
1943 ; GFX9-SDAG:       ; %bb.0:
1944 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1945 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1946 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
1947 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
1948 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff000, v0
1949 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
1950 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
1951 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1952 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
1953 ; GFX9-SDAG-NEXT:    s_endpgm
1955 ; GFX10-LABEL: flat_inst_salu_offset_neg_12bit_max:
1956 ; GFX10:       ; %bb.0:
1957 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1958 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1959 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfffff000
1960 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
1961 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1962 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1963 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
1964 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1965 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
1966 ; GFX10-NEXT:    s_endpgm
1968 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_neg_12bit_max:
1969 ; GFX11-SDAG:       ; %bb.0:
1970 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1971 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1972 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xfffff000, s0
1973 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1974 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
1975 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
1976 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1977 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
1978 ; GFX11-SDAG-NEXT:    s_endpgm
1980 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_neg_12bit_max:
1981 ; GFX9-GISEL:       ; %bb.0:
1982 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1983 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1984 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff000
1985 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
1986 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
1987 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
1988 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
1989 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1990 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
1991 ; GFX9-GISEL-NEXT:    s_endpgm
1993 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_neg_12bit_max:
1994 ; GFX11-GISEL:       ; %bb.0:
1995 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1996 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1997 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff000
1998 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
1999 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2000 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2001 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2002 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2003 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2004 ; GFX11-GISEL-NEXT:    s_endpgm
2005   %gep = getelementptr i8, ptr %p, i64 -4096
2006   %load = load volatile i8, ptr %gep, align 1
2007   store i8 %load, ptr undef
2008   ret void
2011 define amdgpu_kernel void @flat_inst_salu_offset_neg_13bit_max(ptr %p) {
2012 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_neg_13bit_max:
2013 ; GFX9-SDAG:       ; %bb.0:
2014 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2015 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2016 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2017 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2018 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffe000, v0
2019 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
2020 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2021 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2022 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2023 ; GFX9-SDAG-NEXT:    s_endpgm
2025 ; GFX10-LABEL: flat_inst_salu_offset_neg_13bit_max:
2026 ; GFX10:       ; %bb.0:
2027 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2028 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2029 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xffffe000
2030 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
2031 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2032 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2033 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2034 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2035 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2036 ; GFX10-NEXT:    s_endpgm
2038 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_neg_13bit_max:
2039 ; GFX11-SDAG:       ; %bb.0:
2040 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2041 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2042 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xffffe000, s0
2043 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2044 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
2045 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2046 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2047 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2048 ; GFX11-SDAG-NEXT:    s_endpgm
2050 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_neg_13bit_max:
2051 ; GFX9-GISEL:       ; %bb.0:
2052 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2053 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2054 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffe000
2055 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2056 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2057 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2058 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2059 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2060 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2061 ; GFX9-GISEL-NEXT:    s_endpgm
2063 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_neg_13bit_max:
2064 ; GFX11-GISEL:       ; %bb.0:
2065 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2066 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2067 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffe000
2068 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2069 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2070 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2071 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2072 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2073 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2074 ; GFX11-GISEL-NEXT:    s_endpgm
2075   %gep = getelementptr i8, ptr %p, i64 -8192
2076   %load = load volatile i8, ptr %gep, align 1
2077   store i8 %load, ptr undef
2078   ret void
2081 define amdgpu_kernel void @flat_inst_salu_offset_2x_11bit_max(ptr %p) {
2082 ; GFX9-LABEL: flat_inst_salu_offset_2x_11bit_max:
2083 ; GFX9:       ; %bb.0:
2084 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2085 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2086 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
2087 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
2088 ; GFX9-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
2089 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2090 ; GFX9-NEXT:    flat_store_byte v[0:1], v0
2091 ; GFX9-NEXT:    s_endpgm
2093 ; GFX10-LABEL: flat_inst_salu_offset_2x_11bit_max:
2094 ; GFX10:       ; %bb.0:
2095 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2096 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2097 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfff
2098 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
2099 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2100 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2101 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2102 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2103 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2104 ; GFX10-NEXT:    s_endpgm
2106 ; GFX11-LABEL: flat_inst_salu_offset_2x_11bit_max:
2107 ; GFX11:       ; %bb.0:
2108 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2109 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2110 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2111 ; GFX11-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
2112 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2113 ; GFX11-NEXT:    flat_store_b8 v[0:1], v0
2114 ; GFX11-NEXT:    s_endpgm
2115   %gep = getelementptr i8, ptr %p, i64 4095
2116   %load = load volatile i8, ptr %gep, align 1
2117   store i8 %load, ptr undef
2118   ret void
2121 define amdgpu_kernel void @flat_inst_salu_offset_2x_12bit_max(ptr %p) {
2122 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_2x_12bit_max:
2123 ; GFX9-SDAG:       ; %bb.0:
2124 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2125 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2126 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2127 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2128 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
2129 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
2130 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
2131 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2132 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2133 ; GFX9-SDAG-NEXT:    s_endpgm
2135 ; GFX10-LABEL: flat_inst_salu_offset_2x_12bit_max:
2136 ; GFX10:       ; %bb.0:
2137 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2138 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2139 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1fff
2140 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
2141 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2142 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2143 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2144 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2145 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2146 ; GFX10-NEXT:    s_endpgm
2148 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_2x_12bit_max:
2149 ; GFX11-SDAG:       ; %bb.0:
2150 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2151 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2152 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x1000, s0
2153 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2154 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 0, s1, s0
2155 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
2156 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2157 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2158 ; GFX11-SDAG-NEXT:    s_endpgm
2160 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_2x_12bit_max:
2161 ; GFX9-GISEL:       ; %bb.0:
2162 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2163 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2164 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
2165 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0
2166 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2167 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2168 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2169 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2170 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2171 ; GFX9-GISEL-NEXT:    s_endpgm
2173 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_2x_12bit_max:
2174 ; GFX11-GISEL:       ; %bb.0:
2175 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2176 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2177 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
2178 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0
2179 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2180 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2181 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2182 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2183 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2184 ; GFX11-GISEL-NEXT:    s_endpgm
2185   %gep = getelementptr i8, ptr %p, i64 8191
2186   %load = load volatile i8, ptr %gep, align 1
2187   store i8 %load, ptr undef
2188   ret void
2191 define amdgpu_kernel void @flat_inst_salu_offset_2x_13bit_max(ptr %p) {
2192 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_2x_13bit_max:
2193 ; GFX9-SDAG:       ; %bb.0:
2194 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2195 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2196 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2197 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2198 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x3000, v0
2199 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
2200 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
2201 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2202 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2203 ; GFX9-SDAG-NEXT:    s_endpgm
2205 ; GFX10-LABEL: flat_inst_salu_offset_2x_13bit_max:
2206 ; GFX10:       ; %bb.0:
2207 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2208 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2209 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x3fff
2210 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0
2211 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2212 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2213 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2214 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2215 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2216 ; GFX10-NEXT:    s_endpgm
2218 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_2x_13bit_max:
2219 ; GFX11-SDAG:       ; %bb.0:
2220 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2221 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2222 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x3000, s0
2223 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2224 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 0, s1, s0
2225 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
2226 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2227 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2228 ; GFX11-SDAG-NEXT:    s_endpgm
2230 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_2x_13bit_max:
2231 ; GFX9-GISEL:       ; %bb.0:
2232 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2233 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2234 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x3fff
2235 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0
2236 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2237 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2238 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2239 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2240 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2241 ; GFX9-GISEL-NEXT:    s_endpgm
2243 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_2x_13bit_max:
2244 ; GFX11-GISEL:       ; %bb.0:
2245 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2246 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2247 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x3fff
2248 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0
2249 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2250 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2251 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2252 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2253 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2254 ; GFX11-GISEL-NEXT:    s_endpgm
2255   %gep = getelementptr i8, ptr %p, i64 16383
2256   %load = load volatile i8, ptr %gep, align 1
2257   store i8 %load, ptr undef
2258   ret void
2261 define amdgpu_kernel void @flat_inst_salu_offset_2x_neg_11bit_max(ptr %p) {
2262 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_2x_neg_11bit_max:
2263 ; GFX9-SDAG:       ; %bb.0:
2264 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2265 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2266 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2267 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2268 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfffff000, v0
2269 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
2270 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2271 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2272 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2273 ; GFX9-SDAG-NEXT:    s_endpgm
2275 ; GFX10-LABEL: flat_inst_salu_offset_2x_neg_11bit_max:
2276 ; GFX10:       ; %bb.0:
2277 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2278 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2279 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfffff000
2280 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
2281 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2282 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2283 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2284 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2285 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2286 ; GFX10-NEXT:    s_endpgm
2288 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_2x_neg_11bit_max:
2289 ; GFX11-SDAG:       ; %bb.0:
2290 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2291 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2292 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xfffff000, s0
2293 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2294 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
2295 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2296 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2297 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2298 ; GFX11-SDAG-NEXT:    s_endpgm
2300 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_2x_neg_11bit_max:
2301 ; GFX9-GISEL:       ; %bb.0:
2302 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2303 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2304 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff000
2305 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2306 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2307 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2308 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2309 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2310 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2311 ; GFX9-GISEL-NEXT:    s_endpgm
2313 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_2x_neg_11bit_max:
2314 ; GFX11-GISEL:       ; %bb.0:
2315 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2316 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2317 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xfffff000
2318 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2319 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2320 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2321 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2322 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2323 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2324 ; GFX11-GISEL-NEXT:    s_endpgm
2325   %gep = getelementptr i8, ptr %p, i64 -4096
2326   %load = load volatile i8, ptr %gep, align 1
2327   store i8 %load, ptr undef
2328   ret void
2331 define amdgpu_kernel void @flat_inst_salu_offset_2x_neg_12bit_max(ptr %p) {
2332 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_2x_neg_12bit_max:
2333 ; GFX9-SDAG:       ; %bb.0:
2334 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2335 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2336 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2337 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2338 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffe000, v0
2339 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
2340 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2341 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2342 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2343 ; GFX9-SDAG-NEXT:    s_endpgm
2345 ; GFX10-LABEL: flat_inst_salu_offset_2x_neg_12bit_max:
2346 ; GFX10:       ; %bb.0:
2347 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2348 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2349 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xffffe000
2350 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
2351 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2352 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2353 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2354 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2355 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2356 ; GFX10-NEXT:    s_endpgm
2358 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_2x_neg_12bit_max:
2359 ; GFX11-SDAG:       ; %bb.0:
2360 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2361 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2362 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xffffe000, s0
2363 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2364 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
2365 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2366 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2367 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2368 ; GFX11-SDAG-NEXT:    s_endpgm
2370 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_2x_neg_12bit_max:
2371 ; GFX9-GISEL:       ; %bb.0:
2372 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2373 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2374 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffe000
2375 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2376 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2377 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2378 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2379 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2380 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2381 ; GFX9-GISEL-NEXT:    s_endpgm
2383 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_2x_neg_12bit_max:
2384 ; GFX11-GISEL:       ; %bb.0:
2385 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2386 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2387 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffe000
2388 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2389 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2390 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2391 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2392 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2393 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2394 ; GFX11-GISEL-NEXT:    s_endpgm
2395   %gep = getelementptr i8, ptr %p, i64 -8192
2396   %load = load volatile i8, ptr %gep, align 1
2397   store i8 %load, ptr undef
2398   ret void
2401 define amdgpu_kernel void @flat_inst_salu_offset_2x_neg_13bit_max(ptr %p) {
2402 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_2x_neg_13bit_max:
2403 ; GFX9-SDAG:       ; %bb.0:
2404 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2405 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2406 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2407 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2408 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xffffc000, v0
2409 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, -1, v1, vcc
2410 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2411 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2412 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2413 ; GFX9-SDAG-NEXT:    s_endpgm
2415 ; GFX10-LABEL: flat_inst_salu_offset_2x_neg_13bit_max:
2416 ; GFX10:       ; %bb.0:
2417 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2418 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2419 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xffffc000
2420 ; GFX10-NEXT:    s_addc_u32 s1, s1, -1
2421 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2422 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2423 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2424 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2425 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2426 ; GFX10-NEXT:    s_endpgm
2428 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_2x_neg_13bit_max:
2429 ; GFX11-SDAG:       ; %bb.0:
2430 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2431 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2432 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0xffffc000, s0
2433 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2434 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, -1, s1, s0
2435 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2436 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2437 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2438 ; GFX11-SDAG-NEXT:    s_endpgm
2440 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_2x_neg_13bit_max:
2441 ; GFX9-GISEL:       ; %bb.0:
2442 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2443 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2444 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffc000
2445 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2446 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2447 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2448 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2449 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2450 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2451 ; GFX9-GISEL-NEXT:    s_endpgm
2453 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_2x_neg_13bit_max:
2454 ; GFX11-GISEL:       ; %bb.0:
2455 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2456 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2457 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xffffc000
2458 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, -1
2459 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2460 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2461 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2462 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2463 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2464 ; GFX11-GISEL-NEXT:    s_endpgm
2465   %gep = getelementptr i8, ptr %p, i64 -16384
2466   %load = load volatile i8, ptr %gep, align 1
2467   store i8 %load, ptr undef
2468   ret void
2471 ; Fill 11-bit low-bits (1ull << 33) | 2047
2472 define amdgpu_kernel void @flat_inst_salu_offset_64bit_11bit_split0(ptr %p) {
2473 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_split0:
2474 ; GFX9-SDAG:       ; %bb.0:
2475 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2476 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2477 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2478 ; GFX9-SDAG-NEXT:    v_add_co_u32_e64 v0, vcc, 0, s0
2479 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2480 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:2047 glc
2481 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2482 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2483 ; GFX9-SDAG-NEXT:    s_endpgm
2485 ; GFX10-LABEL: flat_inst_salu_offset_64bit_11bit_split0:
2486 ; GFX10:       ; %bb.0:
2487 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2488 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2489 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x7ff
2490 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2491 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2492 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2493 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2494 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2495 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2496 ; GFX10-NEXT:    s_endpgm
2498 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_split0:
2499 ; GFX11-SDAG:       ; %bb.0:
2500 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2501 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2502 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0, s0
2503 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2504 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2505 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:2047 glc dlc
2506 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2507 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2508 ; GFX11-SDAG-NEXT:    s_endpgm
2510 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_split0:
2511 ; GFX9-GISEL:       ; %bb.0:
2512 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2513 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2514 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x7ff
2515 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2516 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2517 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2518 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2519 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2520 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2521 ; GFX9-GISEL-NEXT:    s_endpgm
2523 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_split0:
2524 ; GFX11-GISEL:       ; %bb.0:
2525 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2526 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2527 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x7ff
2528 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2529 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2530 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2531 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2532 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2533 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2534 ; GFX11-GISEL-NEXT:    s_endpgm
2535   %gep = getelementptr i8, ptr %p, i64 8589936639
2536   %load = load volatile i8, ptr %gep, align 1
2537   store i8 %load, ptr undef
2538   ret void
2541 ; Fill 11-bit low-bits (1ull << 33) | 2048
2542 define amdgpu_kernel void @flat_inst_salu_offset_64bit_11bit_split1(ptr %p) {
2543 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_split1:
2544 ; GFX9-SDAG:       ; %bb.0:
2545 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2546 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2547 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2548 ; GFX9-SDAG-NEXT:    v_add_co_u32_e64 v0, vcc, 0, s0
2549 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2550 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:2048 glc
2551 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2552 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2553 ; GFX9-SDAG-NEXT:    s_endpgm
2555 ; GFX10-LABEL: flat_inst_salu_offset_64bit_11bit_split1:
2556 ; GFX10:       ; %bb.0:
2557 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2558 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2559 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x800
2560 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2561 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2562 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2563 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2564 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2565 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2566 ; GFX10-NEXT:    s_endpgm
2568 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_split1:
2569 ; GFX11-SDAG:       ; %bb.0:
2570 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2571 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2572 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0, s0
2573 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2574 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2575 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:2048 glc dlc
2576 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2577 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2578 ; GFX11-SDAG-NEXT:    s_endpgm
2580 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_split1:
2581 ; GFX9-GISEL:       ; %bb.0:
2582 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2583 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2584 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x800
2585 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2586 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2587 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2588 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2589 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2590 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2591 ; GFX9-GISEL-NEXT:    s_endpgm
2593 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_split1:
2594 ; GFX11-GISEL:       ; %bb.0:
2595 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2596 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2597 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x800
2598 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2599 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2600 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2601 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2602 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2603 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2604 ; GFX11-GISEL-NEXT:    s_endpgm
2605   %gep = getelementptr i8, ptr %p, i64 8589936640
2606   %load = load volatile i8, ptr %gep, align 1
2607   store i8 %load, ptr undef
2608   ret void
2611 ; Fill 12-bit low-bits (1ull << 33) | 4095
2612 define amdgpu_kernel void @flat_inst_salu_offset_64bit_12bit_split0(ptr %p) {
2613 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_split0:
2614 ; GFX9-SDAG:       ; %bb.0:
2615 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2616 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2617 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2618 ; GFX9-SDAG-NEXT:    v_add_co_u32_e64 v0, vcc, 0, s0
2619 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2620 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
2621 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2622 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2623 ; GFX9-SDAG-NEXT:    s_endpgm
2625 ; GFX10-LABEL: flat_inst_salu_offset_64bit_12bit_split0:
2626 ; GFX10:       ; %bb.0:
2627 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2628 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2629 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfff
2630 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2631 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2632 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2633 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2634 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2635 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2636 ; GFX10-NEXT:    s_endpgm
2638 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_split0:
2639 ; GFX11-SDAG:       ; %bb.0:
2640 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2641 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2642 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0, s0
2643 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2644 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2645 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
2646 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2647 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2648 ; GFX11-SDAG-NEXT:    s_endpgm
2650 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_split0:
2651 ; GFX9-GISEL:       ; %bb.0:
2652 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2653 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2654 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xfff
2655 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2656 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2657 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2658 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2659 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2660 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2661 ; GFX9-GISEL-NEXT:    s_endpgm
2663 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_split0:
2664 ; GFX11-GISEL:       ; %bb.0:
2665 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2666 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2667 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xfff
2668 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2669 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2670 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2671 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2672 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2673 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2674 ; GFX11-GISEL-NEXT:    s_endpgm
2675   %gep = getelementptr i8, ptr %p, i64 8589938687
2676   %load = load volatile i8, ptr %gep, align 1
2677   store i8 %load, ptr undef
2678   ret void
2681 ; Fill 12-bit low-bits (1ull << 33) | 4096
2682 define amdgpu_kernel void @flat_inst_salu_offset_64bit_12bit_split1(ptr %p) {
2683 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_split1:
2684 ; GFX9-SDAG:       ; %bb.0:
2685 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2686 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2687 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2688 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2689 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
2690 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2691 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2692 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2693 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2694 ; GFX9-SDAG-NEXT:    s_endpgm
2696 ; GFX10-LABEL: flat_inst_salu_offset_64bit_12bit_split1:
2697 ; GFX10:       ; %bb.0:
2698 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2699 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2700 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1000
2701 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2702 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2703 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2704 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2705 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2706 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2707 ; GFX10-NEXT:    s_endpgm
2709 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_split1:
2710 ; GFX11-SDAG:       ; %bb.0:
2711 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2712 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2713 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x1000, s0
2714 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2715 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2716 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2717 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2718 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2719 ; GFX11-SDAG-NEXT:    s_endpgm
2721 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_split1:
2722 ; GFX9-GISEL:       ; %bb.0:
2723 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2724 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2725 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1000
2726 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2727 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2728 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2729 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2730 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2731 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2732 ; GFX9-GISEL-NEXT:    s_endpgm
2734 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_split1:
2735 ; GFX11-GISEL:       ; %bb.0:
2736 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2737 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2738 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1000
2739 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2740 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2741 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2742 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2743 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2744 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2745 ; GFX11-GISEL-NEXT:    s_endpgm
2746   %gep = getelementptr i8, ptr %p, i64 8589938688
2747   %load = load volatile i8, ptr %gep, align 1
2748   store i8 %load, ptr undef
2749   ret void
2752 ; Fill 13-bit low-bits (1ull << 33) | 8191
2753 define amdgpu_kernel void @flat_inst_salu_offset_64bit_13bit_split0(ptr %p) {
2754 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_split0:
2755 ; GFX9-SDAG:       ; %bb.0:
2756 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2757 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2758 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2759 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2760 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
2761 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2762 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] offset:4095 glc
2763 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2764 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2765 ; GFX9-SDAG-NEXT:    s_endpgm
2767 ; GFX10-LABEL: flat_inst_salu_offset_64bit_13bit_split0:
2768 ; GFX10:       ; %bb.0:
2769 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2770 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2771 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1fff
2772 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2773 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2774 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2775 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2776 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2777 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2778 ; GFX10-NEXT:    s_endpgm
2780 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_split0:
2781 ; GFX11-SDAG:       ; %bb.0:
2782 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2783 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2784 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x1000, s0
2785 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2786 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2787 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] offset:4095 glc dlc
2788 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2789 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2790 ; GFX11-SDAG-NEXT:    s_endpgm
2792 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_split0:
2793 ; GFX9-GISEL:       ; %bb.0:
2794 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2795 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2796 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
2797 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2798 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2799 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2800 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2801 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2802 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2803 ; GFX9-GISEL-NEXT:    s_endpgm
2805 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_split0:
2806 ; GFX11-GISEL:       ; %bb.0:
2807 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2808 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2809 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
2810 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2811 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2812 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2813 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2814 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2815 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2816 ; GFX11-GISEL-NEXT:    s_endpgm
2817   %gep = getelementptr i8, ptr %p, i64 8589942783
2818   %load = load volatile i8, ptr %gep, align 1
2819   store i8 %load, ptr undef
2820   ret void
2823 ; Fill 13-bit low-bits (1ull << 33) | 8192
2824 define amdgpu_kernel void @flat_inst_salu_offset_64bit_13bit_split1(ptr %p) {
2825 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_split1:
2826 ; GFX9-SDAG:       ; %bb.0:
2827 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2828 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2829 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2830 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2831 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x2000, v0
2832 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 2, v1, vcc
2833 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2834 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2835 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2836 ; GFX9-SDAG-NEXT:    s_endpgm
2838 ; GFX10-LABEL: flat_inst_salu_offset_64bit_13bit_split1:
2839 ; GFX10:       ; %bb.0:
2840 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2841 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2842 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x2000
2843 ; GFX10-NEXT:    s_addc_u32 s1, s1, 2
2844 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2845 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2846 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2847 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2848 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2849 ; GFX10-NEXT:    s_endpgm
2851 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_split1:
2852 ; GFX11-SDAG:       ; %bb.0:
2853 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2854 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2855 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, s0, 0x2000, s0
2856 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2857 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e64 v1, null, 2, s1, s0
2858 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2859 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2860 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2861 ; GFX11-SDAG-NEXT:    s_endpgm
2863 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_split1:
2864 ; GFX9-GISEL:       ; %bb.0:
2865 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2866 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2867 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x2000
2868 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2869 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2870 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2871 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2872 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2873 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2874 ; GFX9-GISEL-NEXT:    s_endpgm
2876 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_split1:
2877 ; GFX11-GISEL:       ; %bb.0:
2878 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2879 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2880 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x2000
2881 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 2
2882 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2883 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2884 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2885 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2886 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2887 ; GFX11-GISEL-NEXT:    s_endpgm
2888   %gep = getelementptr i8, ptr %p, i64 8589942784
2889   %load = load volatile i8, ptr %gep, align 1
2890   store i8 %load, ptr undef
2891   ret void
2894 ; Fill 11-bit low-bits, negative high bits (1ull << 63) | 2047
2895 define amdgpu_kernel void @flat_inst_salu_offset_64bit_11bit_neg_high_split0(ptr %p) {
2896 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split0:
2897 ; GFX9-SDAG:       ; %bb.0:
2898 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2899 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
2900 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2901 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2902 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
2903 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x7ff, v0
2904 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
2905 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2906 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2907 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2908 ; GFX9-SDAG-NEXT:    s_endpgm
2910 ; GFX10-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split0:
2911 ; GFX10:       ; %bb.0:
2912 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2913 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2914 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x7ff
2915 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
2916 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2917 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2918 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2919 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2920 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2921 ; GFX10-NEXT:    s_endpgm
2923 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split0:
2924 ; GFX11-SDAG:       ; %bb.0:
2925 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2926 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2927 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
2928 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x7ff, s0
2929 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2930 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
2931 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2932 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2933 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
2934 ; GFX11-SDAG-NEXT:    s_endpgm
2936 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split0:
2937 ; GFX9-GISEL:       ; %bb.0:
2938 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2939 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2940 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x7ff
2941 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
2942 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
2943 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
2944 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
2945 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2946 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
2947 ; GFX9-GISEL-NEXT:    s_endpgm
2949 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split0:
2950 ; GFX11-GISEL:       ; %bb.0:
2951 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2952 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2953 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x7ff
2954 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
2955 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2956 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
2957 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
2958 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2959 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
2960 ; GFX11-GISEL-NEXT:    s_endpgm
2961   %gep = getelementptr i8, ptr %p, i64 -9223372036854773761
2962   %load = load volatile i8, ptr %gep, align 1
2963   store i8 %load, ptr undef
2964   ret void
2967 ; Fill 11-bit low-bits, negative high bits (1ull << 63) | 2048
2968 define amdgpu_kernel void @flat_inst_salu_offset_64bit_11bit_neg_high_split1(ptr %p) {
2969 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split1:
2970 ; GFX9-SDAG:       ; %bb.0:
2971 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2972 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
2973 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2974 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
2975 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
2976 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x800, v0
2977 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
2978 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
2979 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2980 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
2981 ; GFX9-SDAG-NEXT:    s_endpgm
2983 ; GFX10-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split1:
2984 ; GFX10:       ; %bb.0:
2985 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2986 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2987 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x800
2988 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
2989 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2990 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2991 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
2992 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
2993 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
2994 ; GFX10-NEXT:    s_endpgm
2996 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split1:
2997 ; GFX11-SDAG:       ; %bb.0:
2998 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2999 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3000 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
3001 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x800, s0
3002 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3003 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
3004 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3005 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3006 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
3007 ; GFX11-SDAG-NEXT:    s_endpgm
3009 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split1:
3010 ; GFX9-GISEL:       ; %bb.0:
3011 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3012 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3013 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x800
3014 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3015 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
3016 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
3017 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
3018 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3019 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
3020 ; GFX9-GISEL-NEXT:    s_endpgm
3022 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_11bit_neg_high_split1:
3023 ; GFX11-GISEL:       ; %bb.0:
3024 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3025 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3026 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x800
3027 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3028 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3029 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
3030 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3031 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3032 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
3033 ; GFX11-GISEL-NEXT:    s_endpgm
3034   %gep = getelementptr i8, ptr %p, i64 -9223372036854773760
3035   %load = load volatile i8, ptr %gep, align 1
3036   store i8 %load, ptr undef
3037   ret void
3040 ; Fill 12-bit low-bits, negative high bits (1ull << 63) | 4095
3041 define amdgpu_kernel void @flat_inst_salu_offset_64bit_12bit_neg_high_split0(ptr %p) {
3042 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split0:
3043 ; GFX9-SDAG:       ; %bb.0:
3044 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3045 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
3046 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3047 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
3048 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
3049 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0xfff, v0
3050 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
3051 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
3052 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3053 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
3054 ; GFX9-SDAG-NEXT:    s_endpgm
3056 ; GFX10-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split0:
3057 ; GFX10:       ; %bb.0:
3058 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3059 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3060 ; GFX10-NEXT:    s_add_u32 s0, s0, 0xfff
3061 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
3062 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
3063 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
3064 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
3065 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3066 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
3067 ; GFX10-NEXT:    s_endpgm
3069 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split0:
3070 ; GFX11-SDAG:       ; %bb.0:
3071 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3072 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3073 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
3074 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0xfff, s0
3075 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3076 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
3077 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3078 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3079 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
3080 ; GFX11-SDAG-NEXT:    s_endpgm
3082 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split0:
3083 ; GFX9-GISEL:       ; %bb.0:
3084 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3085 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3086 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0xfff
3087 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3088 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
3089 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
3090 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
3091 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3092 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
3093 ; GFX9-GISEL-NEXT:    s_endpgm
3095 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split0:
3096 ; GFX11-GISEL:       ; %bb.0:
3097 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3098 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3099 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0xfff
3100 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3101 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3102 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
3103 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3104 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3105 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
3106 ; GFX11-GISEL-NEXT:    s_endpgm
3107   %gep = getelementptr i8, ptr %p, i64 -9223372036854771713
3108   %load = load volatile i8, ptr %gep, align 1
3109   store i8 %load, ptr undef
3110   ret void
3113 ; Fill 12-bit low-bits, negative high bits (1ull << 63) | 4096
3114 define amdgpu_kernel void @flat_inst_salu_offset_64bit_12bit_neg_high_split1(ptr %p) {
3115 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split1:
3116 ; GFX9-SDAG:       ; %bb.0:
3117 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3118 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
3119 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3120 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
3121 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
3122 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1000, v0
3123 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
3124 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
3125 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3126 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
3127 ; GFX9-SDAG-NEXT:    s_endpgm
3129 ; GFX10-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split1:
3130 ; GFX10:       ; %bb.0:
3131 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3132 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3133 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1000
3134 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
3135 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
3136 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
3137 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
3138 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3139 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
3140 ; GFX10-NEXT:    s_endpgm
3142 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split1:
3143 ; GFX11-SDAG:       ; %bb.0:
3144 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3145 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3146 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
3147 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1000, s0
3148 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3149 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
3150 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3151 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3152 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
3153 ; GFX11-SDAG-NEXT:    s_endpgm
3155 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split1:
3156 ; GFX9-GISEL:       ; %bb.0:
3157 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3158 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3159 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1000
3160 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3161 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
3162 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
3163 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
3164 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3165 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
3166 ; GFX9-GISEL-NEXT:    s_endpgm
3168 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_12bit_neg_high_split1:
3169 ; GFX11-GISEL:       ; %bb.0:
3170 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3171 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3172 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1000
3173 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3174 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3175 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
3176 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3177 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3178 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
3179 ; GFX11-GISEL-NEXT:    s_endpgm
3180   %gep = getelementptr i8, ptr %p, i64 -9223372036854771712
3181   %load = load volatile i8, ptr %gep, align 1
3182   store i8 %load, ptr undef
3183   ret void
3186 ; Fill 13-bit low-bits, negative high bits (1ull << 63) | 8191
3187 define amdgpu_kernel void @flat_inst_salu_offset_64bit_13bit_neg_high_split0(ptr %p) {
3188 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split0:
3189 ; GFX9-SDAG:       ; %bb.0:
3190 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3191 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
3192 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3193 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
3194 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
3195 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x1fff, v0
3196 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
3197 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
3198 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3199 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
3200 ; GFX9-SDAG-NEXT:    s_endpgm
3202 ; GFX10-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split0:
3203 ; GFX10:       ; %bb.0:
3204 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3205 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3206 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x1fff
3207 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
3208 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
3209 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
3210 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
3211 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3212 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
3213 ; GFX10-NEXT:    s_endpgm
3215 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split0:
3216 ; GFX11-SDAG:       ; %bb.0:
3217 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3218 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3219 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
3220 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x1fff, s0
3221 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3222 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
3223 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3224 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3225 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
3226 ; GFX11-SDAG-NEXT:    s_endpgm
3228 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split0:
3229 ; GFX9-GISEL:       ; %bb.0:
3230 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3231 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3232 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
3233 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3234 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
3235 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
3236 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
3237 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3238 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
3239 ; GFX9-GISEL-NEXT:    s_endpgm
3241 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split0:
3242 ; GFX11-GISEL:       ; %bb.0:
3243 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3244 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3245 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x1fff
3246 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3247 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3248 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
3249 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3250 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3251 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
3252 ; GFX11-GISEL-NEXT:    s_endpgm
3253   %gep = getelementptr i8, ptr %p, i64 -9223372036854767617
3254   %load = load volatile i8, ptr %gep, align 1
3255   store i8 %load, ptr undef
3256   ret void
3259 ; Fill 13-bit low-bits, negative high bits (1ull << 63) | 8192
3260 define amdgpu_kernel void @flat_inst_salu_offset_64bit_13bit_neg_high_split1(ptr %p) {
3261 ; GFX9-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split1:
3262 ; GFX9-SDAG:       ; %bb.0:
3263 ; GFX9-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3264 ; GFX9-SDAG-NEXT:    v_bfrev_b32_e32 v1, 1
3265 ; GFX9-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3266 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, s0
3267 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, s1
3268 ; GFX9-SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 0x2000, v0
3269 ; GFX9-SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, v1, v2, vcc
3270 ; GFX9-SDAG-NEXT:    flat_load_ubyte v0, v[0:1] glc
3271 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3272 ; GFX9-SDAG-NEXT:    flat_store_byte v[0:1], v0
3273 ; GFX9-SDAG-NEXT:    s_endpgm
3275 ; GFX10-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split1:
3276 ; GFX10:       ; %bb.0:
3277 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3278 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3279 ; GFX10-NEXT:    s_add_u32 s0, s0, 0x2000
3280 ; GFX10-NEXT:    s_addc_u32 s1, s1, 0x80000000
3281 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
3282 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
3283 ; GFX10-NEXT:    flat_load_ubyte v0, v[0:1] glc dlc
3284 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3285 ; GFX10-NEXT:    flat_store_byte v[0:1], v0
3286 ; GFX10-NEXT:    s_endpgm
3288 ; GFX11-SDAG-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split1:
3289 ; GFX11-SDAG:       ; %bb.0:
3290 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3291 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3292 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s1
3293 ; GFX11-SDAG-NEXT:    v_add_co_u32 v0, vcc_lo, 0x2000, s0
3294 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3295 ; GFX11-SDAG-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0x80000000, v1, vcc_lo
3296 ; GFX11-SDAG-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3297 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3298 ; GFX11-SDAG-NEXT:    flat_store_b8 v[0:1], v0
3299 ; GFX11-SDAG-NEXT:    s_endpgm
3301 ; GFX9-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split1:
3302 ; GFX9-GISEL:       ; %bb.0:
3303 ; GFX9-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
3304 ; GFX9-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3305 ; GFX9-GISEL-NEXT:    s_add_u32 s0, s0, 0x2000
3306 ; GFX9-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3307 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, s0
3308 ; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, s1
3309 ; GFX9-GISEL-NEXT:    flat_load_ubyte v0, v[0:1] glc
3310 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3311 ; GFX9-GISEL-NEXT:    flat_store_byte v[0:1], v0
3312 ; GFX9-GISEL-NEXT:    s_endpgm
3314 ; GFX11-GISEL-LABEL: flat_inst_salu_offset_64bit_13bit_neg_high_split1:
3315 ; GFX11-GISEL:       ; %bb.0:
3316 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
3317 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3318 ; GFX11-GISEL-NEXT:    s_add_u32 s0, s0, 0x2000
3319 ; GFX11-GISEL-NEXT:    s_addc_u32 s1, s1, 0x80000000
3320 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3321 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
3322 ; GFX11-GISEL-NEXT:    flat_load_u8 v0, v[0:1] glc dlc
3323 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
3324 ; GFX11-GISEL-NEXT:    flat_store_b8 v[0:1], v0
3325 ; GFX11-GISEL-NEXT:    s_endpgm
3326   %gep = getelementptr i8, ptr %p, i64 -9223372036854767616
3327   %load = load volatile i8, ptr %gep, align 1
3328   store i8 %load, ptr undef
3329   ret void