1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s 3# RUN: llc -O0 -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s 4# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s 7# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX12 %s 8 9--- 10 11name: load_private_s32_from_4 12legalized: true 13regBankSelected: true 14tracksRegLiveness: true 15machineFunctionInfo: 16 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 17 stackPtrOffsetReg: $sgpr32 18 19body: | 20 bb.0: 21 liveins: $vgpr0 22 23 ; GFX6-LABEL: name: load_private_s32_from_4 24 ; GFX6: liveins: $vgpr0 25 ; GFX6-NEXT: {{ $}} 26 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 27 ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 28 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 29 ; 30 ; GFX9-LABEL: name: load_private_s32_from_4 31 ; GFX9: liveins: $vgpr0 32 ; GFX9-NEXT: {{ $}} 33 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 34 ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 35 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 36 ; 37 ; GFX11-LABEL: name: load_private_s32_from_4 38 ; GFX11: liveins: $vgpr0 39 ; GFX11-NEXT: {{ $}} 40 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 41 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 42 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 43 ; 44 ; GFX12-LABEL: name: load_private_s32_from_4 45 ; GFX12: liveins: $vgpr0 46 ; GFX12-NEXT: {{ $}} 47 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 48 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 49 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 50 %0:vgpr(p5) = COPY $vgpr0 51 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5) 52 $vgpr0 = COPY %1 53 54... 55 56--- 57 58name: load_private_s32_from_2 59legalized: true 60regBankSelected: true 61tracksRegLiveness: true 62machineFunctionInfo: 63 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 64 stackPtrOffsetReg: $sgpr32 65 66body: | 67 bb.0: 68 liveins: $vgpr0 69 70 ; GFX6-LABEL: name: load_private_s32_from_2 71 ; GFX6: liveins: $vgpr0 72 ; GFX6-NEXT: {{ $}} 73 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 74 ; GFX6-NEXT: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s16), addrspace 5) 75 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]] 76 ; 77 ; GFX9-LABEL: name: load_private_s32_from_2 78 ; GFX9: liveins: $vgpr0 79 ; GFX9-NEXT: {{ $}} 80 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 81 ; GFX9-NEXT: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s16), addrspace 5) 82 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]] 83 ; 84 ; GFX11-LABEL: name: load_private_s32_from_2 85 ; GFX11: liveins: $vgpr0 86 ; GFX11-NEXT: {{ $}} 87 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 88 ; GFX11-NEXT: [[SCRATCH_LOAD_USHORT:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_USHORT [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s16), addrspace 5) 89 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_USHORT]] 90 ; 91 ; GFX12-LABEL: name: load_private_s32_from_2 92 ; GFX12: liveins: $vgpr0 93 ; GFX12-NEXT: {{ $}} 94 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 95 ; GFX12-NEXT: [[SCRATCH_LOAD_USHORT:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_USHORT [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s16), addrspace 5) 96 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_USHORT]] 97 %0:vgpr(p5) = COPY $vgpr0 98 %1:vgpr(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 5) 99 $vgpr0 = COPY %1 100 101... 102 103--- 104 105name: load_private_s32_from_1 106legalized: true 107regBankSelected: true 108tracksRegLiveness: true 109machineFunctionInfo: 110 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 111 stackPtrOffsetReg: $sgpr32 112 113body: | 114 bb.0: 115 liveins: $vgpr0 116 117 ; GFX6-LABEL: name: load_private_s32_from_1 118 ; GFX6: liveins: $vgpr0 119 ; GFX6-NEXT: {{ $}} 120 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 121 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 122 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 123 ; 124 ; GFX9-LABEL: name: load_private_s32_from_1 125 ; GFX9: liveins: $vgpr0 126 ; GFX9-NEXT: {{ $}} 127 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 128 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 129 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 130 ; 131 ; GFX11-LABEL: name: load_private_s32_from_1 132 ; GFX11: liveins: $vgpr0 133 ; GFX11-NEXT: {{ $}} 134 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 135 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 136 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 137 ; 138 ; GFX12-LABEL: name: load_private_s32_from_1 139 ; GFX12: liveins: $vgpr0 140 ; GFX12-NEXT: {{ $}} 141 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 142 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 143 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 144 %0:vgpr(p5) = COPY $vgpr0 145 %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5) 146 $vgpr0 = COPY %1 147 148... 149 150--- 151 152name: load_private_p3_from_4 153legalized: true 154regBankSelected: true 155tracksRegLiveness: true 156machineFunctionInfo: 157 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 158 stackPtrOffsetReg: $sgpr32 159 160body: | 161 bb.0: 162 liveins: $vgpr0 163 164 ; GFX6-LABEL: name: load_private_p3_from_4 165 ; GFX6: liveins: $vgpr0 166 ; GFX6-NEXT: {{ $}} 167 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 168 ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (p3), addrspace 5) 169 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 170 ; 171 ; GFX9-LABEL: name: load_private_p3_from_4 172 ; GFX9: liveins: $vgpr0 173 ; GFX9-NEXT: {{ $}} 174 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 175 ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (p3), addrspace 5) 176 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 177 ; 178 ; GFX11-LABEL: name: load_private_p3_from_4 179 ; GFX11: liveins: $vgpr0 180 ; GFX11-NEXT: {{ $}} 181 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 182 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p3), addrspace 5) 183 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 184 ; 185 ; GFX12-LABEL: name: load_private_p3_from_4 186 ; GFX12: liveins: $vgpr0 187 ; GFX12-NEXT: {{ $}} 188 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 189 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p3), addrspace 5) 190 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 191 %0:vgpr(p5) = COPY $vgpr0 192 %1:vgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 5) 193 $vgpr0 = COPY %1 194 195... 196 197--- 198 199name: load_private_p5_from_4 200legalized: true 201regBankSelected: true 202tracksRegLiveness: true 203machineFunctionInfo: 204 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 205 stackPtrOffsetReg: $sgpr32 206 207body: | 208 bb.0: 209 liveins: $vgpr0 210 211 ; GFX6-LABEL: name: load_private_p5_from_4 212 ; GFX6: liveins: $vgpr0 213 ; GFX6-NEXT: {{ $}} 214 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 215 ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (p5), addrspace 5) 216 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 217 ; 218 ; GFX9-LABEL: name: load_private_p5_from_4 219 ; GFX9: liveins: $vgpr0 220 ; GFX9-NEXT: {{ $}} 221 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 222 ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (p5), addrspace 5) 223 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 224 ; 225 ; GFX11-LABEL: name: load_private_p5_from_4 226 ; GFX11: liveins: $vgpr0 227 ; GFX11-NEXT: {{ $}} 228 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 229 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p5), addrspace 5) 230 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 231 ; 232 ; GFX12-LABEL: name: load_private_p5_from_4 233 ; GFX12: liveins: $vgpr0 234 ; GFX12-NEXT: {{ $}} 235 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 236 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p5), addrspace 5) 237 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 238 %0:vgpr(p5) = COPY $vgpr0 239 %1:vgpr(p5) = G_LOAD %0 :: (load (p5), align 4, addrspace 5) 240 $vgpr0 = COPY %1 241 242... 243 244--- 245 246name: load_private_v2s16 247legalized: true 248regBankSelected: true 249tracksRegLiveness: true 250machineFunctionInfo: 251 isEntryFunction: false 252 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 253 stackPtrOffsetReg: $sgpr32 254 255body: | 256 bb.0: 257 liveins: $vgpr0 258 259 ; GFX6-LABEL: name: load_private_v2s16 260 ; GFX6: liveins: $vgpr0 261 ; GFX6-NEXT: {{ $}} 262 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 263 ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 5) 264 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 265 ; 266 ; GFX9-LABEL: name: load_private_v2s16 267 ; GFX9: liveins: $vgpr0 268 ; GFX9-NEXT: {{ $}} 269 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 270 ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 5) 271 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 272 ; 273 ; GFX11-LABEL: name: load_private_v2s16 274 ; GFX11: liveins: $vgpr0 275 ; GFX11-NEXT: {{ $}} 276 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 277 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (<2 x s16>), addrspace 5) 278 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 279 ; 280 ; GFX12-LABEL: name: load_private_v2s16 281 ; GFX12: liveins: $vgpr0 282 ; GFX12-NEXT: {{ $}} 283 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 284 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (<2 x s16>), addrspace 5) 285 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 286 %0:vgpr(p5) = COPY $vgpr0 287 %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 5) 288 $vgpr0 = COPY %1 289 290... 291 292################################################################################ 293### Stress addressing modes 294################################################################################ 295 296--- 297 298name: load_private_s32_from_1_gep_2047 299legalized: true 300regBankSelected: true 301tracksRegLiveness: true 302machineFunctionInfo: 303 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 304 stackPtrOffsetReg: $sgpr32 305 306body: | 307 bb.0: 308 liveins: $vgpr0 309 310 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047 311 ; GFX6: liveins: $vgpr0 312 ; GFX6-NEXT: {{ $}} 313 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 314 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 315 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 316 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 317 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 318 ; 319 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047 320 ; GFX9: liveins: $vgpr0 321 ; GFX9-NEXT: {{ $}} 322 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 323 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, implicit $exec :: (load (s8), addrspace 5) 324 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 325 ; 326 ; GFX11-LABEL: name: load_private_s32_from_1_gep_2047 327 ; GFX11: liveins: $vgpr0 328 ; GFX11-NEXT: {{ $}} 329 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 330 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 331 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 332 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 333 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 334 ; 335 ; GFX12-LABEL: name: load_private_s32_from_1_gep_2047 336 ; GFX12: liveins: $vgpr0 337 ; GFX12-NEXT: {{ $}} 338 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 339 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 2047, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 340 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 341 %0:vgpr(p5) = COPY $vgpr0 342 %1:vgpr(s32) = G_CONSTANT i32 2047 343 %2:vgpr(p5) = G_PTR_ADD %0, %1 344 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 345 $vgpr0 = COPY %3 346 347... 348 349--- 350 351name: load_private_s32_from_1_gep_2047_known_bits 352legalized: true 353regBankSelected: true 354tracksRegLiveness: true 355machineFunctionInfo: 356 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 357 stackPtrOffsetReg: $sgpr32 358 359body: | 360 bb.0: 361 liveins: $vgpr0 362 363 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047_known_bits 364 ; GFX9: liveins: $vgpr0 365 ; GFX9-NEXT: {{ $}} 366 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 367 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec 368 ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec 369 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_AND_B32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, implicit $exec :: (load (s8), addrspace 5) 370 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 371 ; 372 ; GFX11-LABEL: name: load_private_s32_from_1_gep_2047_known_bits 373 ; GFX11: liveins: $vgpr0 374 ; GFX11-NEXT: {{ $}} 375 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 376 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec 377 ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec 378 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_AND_B32_e64_]], 2047, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 379 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 380 ; 381 ; GFX12-LABEL: name: load_private_s32_from_1_gep_2047_known_bits 382 ; GFX12: liveins: $vgpr0 383 ; GFX12-NEXT: {{ $}} 384 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 385 ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec 386 ; GFX12-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec 387 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_AND_B32_e64_]], 2047, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 388 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 389 %0:vgpr(s32) = COPY $vgpr0 390 %1:vgpr(s32) = G_CONSTANT i32 2147483647 391 %2:vgpr(s32) = G_AND %0, %1 392 %3:vgpr(p5) = G_INTTOPTR %2 393 %4:vgpr(s32) = G_CONSTANT i32 2047 394 %5:vgpr(p5) = G_PTR_ADD %3, %4 395 %6:vgpr(s32) = G_LOAD %5 :: (load (s8), align 1, addrspace 5) 396 $vgpr0 = COPY %6 397 398... 399 400--- 401 402name: load_private_s32_from_1_gep_2048 403legalized: true 404regBankSelected: true 405tracksRegLiveness: true 406machineFunctionInfo: 407 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 408 stackPtrOffsetReg: $sgpr32 409 410body: | 411 bb.0: 412 liveins: $vgpr0 413 414 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2048 415 ; GFX6: liveins: $vgpr0 416 ; GFX6-NEXT: {{ $}} 417 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 418 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec 419 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 420 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 421 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 422 ; 423 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2048 424 ; GFX9: liveins: $vgpr0 425 ; GFX9-NEXT: {{ $}} 426 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 427 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2048, 0, 0, implicit $exec :: (load (s8), addrspace 5) 428 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 429 ; 430 ; GFX11-LABEL: name: load_private_s32_from_1_gep_2048 431 ; GFX11: liveins: $vgpr0 432 ; GFX11-NEXT: {{ $}} 433 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 434 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec 435 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 436 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 437 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 438 ; 439 ; GFX12-LABEL: name: load_private_s32_from_1_gep_2048 440 ; GFX12: liveins: $vgpr0 441 ; GFX12-NEXT: {{ $}} 442 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 443 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 2048, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 444 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 445 %0:vgpr(p5) = COPY $vgpr0 446 %1:vgpr(s32) = G_CONSTANT i32 2048 447 %2:vgpr(p5) = G_PTR_ADD %0, %1 448 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 449 $vgpr0 = COPY %3 450 451... 452 453--- 454 455name: load_private_s32_from_1_gep_m2047 456legalized: true 457regBankSelected: true 458tracksRegLiveness: true 459machineFunctionInfo: 460 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 461 stackPtrOffsetReg: $sgpr32 462 463body: | 464 bb.0: 465 liveins: $vgpr0 466 467 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2047 468 ; GFX6: liveins: $vgpr0 469 ; GFX6-NEXT: {{ $}} 470 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 471 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec 472 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 473 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 474 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 475 ; 476 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2047 477 ; GFX9: liveins: $vgpr0 478 ; GFX9-NEXT: {{ $}} 479 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 480 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec 481 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 482 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 483 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 484 ; 485 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m2047 486 ; GFX11: liveins: $vgpr0 487 ; GFX11-NEXT: {{ $}} 488 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 489 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -2047, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 490 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 491 ; 492 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m2047 493 ; GFX12: liveins: $vgpr0 494 ; GFX12-NEXT: {{ $}} 495 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 496 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -2047, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 497 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 498 %0:vgpr(p5) = COPY $vgpr0 499 %1:vgpr(s32) = G_CONSTANT i32 -2047 500 %2:vgpr(p5) = G_PTR_ADD %0, %1 501 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 502 $vgpr0 = COPY %3 503 504... 505 506--- 507 508name: load_private_s32_from_1_gep_m2048 509legalized: true 510regBankSelected: true 511tracksRegLiveness: true 512machineFunctionInfo: 513 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 514 stackPtrOffsetReg: $sgpr32 515 516body: | 517 bb.0: 518 liveins: $vgpr0 519 520 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2048 521 ; GFX6: liveins: $vgpr0 522 ; GFX6-NEXT: {{ $}} 523 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 524 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec 525 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 526 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 527 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 528 ; 529 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2048 530 ; GFX9: liveins: $vgpr0 531 ; GFX9-NEXT: {{ $}} 532 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 533 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec 534 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 535 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 536 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 537 ; 538 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m2048 539 ; GFX11: liveins: $vgpr0 540 ; GFX11-NEXT: {{ $}} 541 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 542 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -2048, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 543 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 544 ; 545 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m2048 546 ; GFX12: liveins: $vgpr0 547 ; GFX12-NEXT: {{ $}} 548 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 549 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -2048, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 550 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 551 %0:vgpr(p5) = COPY $vgpr0 552 %1:vgpr(s32) = G_CONSTANT i32 -2048 553 %2:vgpr(p5) = G_PTR_ADD %0, %1 554 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 555 $vgpr0 = COPY %3 556 557... 558 559--- 560 561name: load_private_s32_from_1_gep_4095 562legalized: true 563regBankSelected: true 564tracksRegLiveness: true 565machineFunctionInfo: 566 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 567 stackPtrOffsetReg: $sgpr32 568 569body: | 570 bb.0: 571 liveins: $vgpr0 572 573 ; GFX6-LABEL: name: load_private_s32_from_1_gep_4095 574 ; GFX6: liveins: $vgpr0 575 ; GFX6-NEXT: {{ $}} 576 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 577 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 578 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 579 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 580 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 581 ; 582 ; GFX9-LABEL: name: load_private_s32_from_1_gep_4095 583 ; GFX9: liveins: $vgpr0 584 ; GFX9-NEXT: {{ $}} 585 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 586 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 587 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 588 ; 589 ; GFX11-LABEL: name: load_private_s32_from_1_gep_4095 590 ; GFX11: liveins: $vgpr0 591 ; GFX11-NEXT: {{ $}} 592 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 593 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 594 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 595 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 596 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 597 ; 598 ; GFX12-LABEL: name: load_private_s32_from_1_gep_4095 599 ; GFX12: liveins: $vgpr0 600 ; GFX12-NEXT: {{ $}} 601 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 602 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 603 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 604 %0:vgpr(p5) = COPY $vgpr0 605 %1:vgpr(s32) = G_CONSTANT i32 4095 606 %2:vgpr(p5) = G_PTR_ADD %0, %1 607 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 608 $vgpr0 = COPY %3 609 610... 611 612--- 613 614name: load_private_s32_from_1_gep_4096 615legalized: true 616regBankSelected: true 617tracksRegLiveness: true 618machineFunctionInfo: 619 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 620 stackPtrOffsetReg: $sgpr32 621 622body: | 623 bb.0: 624 liveins: $vgpr0 625 626 ; GFX6-LABEL: name: load_private_s32_from_1_gep_4096 627 ; GFX6: liveins: $vgpr0 628 ; GFX6-NEXT: {{ $}} 629 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 630 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 631 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 632 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 633 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 634 ; 635 ; GFX9-LABEL: name: load_private_s32_from_1_gep_4096 636 ; GFX9: liveins: $vgpr0 637 ; GFX9-NEXT: {{ $}} 638 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 639 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 640 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 641 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 642 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 643 ; 644 ; GFX11-LABEL: name: load_private_s32_from_1_gep_4096 645 ; GFX11: liveins: $vgpr0 646 ; GFX11-NEXT: {{ $}} 647 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 648 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 649 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 650 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 651 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 652 ; 653 ; GFX12-LABEL: name: load_private_s32_from_1_gep_4096 654 ; GFX12: liveins: $vgpr0 655 ; GFX12-NEXT: {{ $}} 656 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 657 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 4096, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 658 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 659 %0:vgpr(p5) = COPY $vgpr0 660 %1:vgpr(s32) = G_CONSTANT i32 4096 661 %2:vgpr(p5) = G_PTR_ADD %0, %1 662 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 663 $vgpr0 = COPY %3 664 665... 666 667--- 668 669name: load_private_s32_from_1_gep_m4095 670legalized: true 671regBankSelected: true 672tracksRegLiveness: true 673machineFunctionInfo: 674 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 675 stackPtrOffsetReg: $sgpr32 676 677body: | 678 bb.0: 679 liveins: $vgpr0 680 681 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4095 682 ; GFX6: liveins: $vgpr0 683 ; GFX6-NEXT: {{ $}} 684 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 685 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec 686 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 687 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 688 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 689 ; 690 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4095 691 ; GFX9: liveins: $vgpr0 692 ; GFX9-NEXT: {{ $}} 693 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 694 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec 695 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 696 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 697 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 698 ; 699 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m4095 700 ; GFX11: liveins: $vgpr0 701 ; GFX11-NEXT: {{ $}} 702 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 703 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 704 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 705 ; 706 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m4095 707 ; GFX12: liveins: $vgpr0 708 ; GFX12-NEXT: {{ $}} 709 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 710 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 711 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 712 %0:vgpr(p5) = COPY $vgpr0 713 %1:vgpr(s32) = G_CONSTANT i32 -4095 714 %2:vgpr(p5) = G_PTR_ADD %0, %1 715 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 716 $vgpr0 = COPY %3 717 718... 719 720--- 721 722name: load_private_s32_from_1_gep_m4096 723legalized: true 724regBankSelected: true 725tracksRegLiveness: true 726machineFunctionInfo: 727 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 728 stackPtrOffsetReg: $sgpr32 729 730body: | 731 bb.0: 732 liveins: $vgpr0 733 734 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4096 735 ; GFX6: liveins: $vgpr0 736 ; GFX6-NEXT: {{ $}} 737 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 738 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec 739 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 740 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 741 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 742 ; 743 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4096 744 ; GFX9: liveins: $vgpr0 745 ; GFX9-NEXT: {{ $}} 746 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 747 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec 748 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 749 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 750 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 751 ; 752 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m4096 753 ; GFX11: liveins: $vgpr0 754 ; GFX11-NEXT: {{ $}} 755 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 756 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -4096, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 757 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 758 ; 759 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m4096 760 ; GFX12: liveins: $vgpr0 761 ; GFX12-NEXT: {{ $}} 762 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 763 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -4096, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 764 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 765 %0:vgpr(p5) = COPY $vgpr0 766 %1:vgpr(s32) = G_CONSTANT i32 -4096 767 %2:vgpr(p5) = G_PTR_ADD %0, %1 768 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 769 $vgpr0 = COPY %3 770 771... 772 773--- 774 775name: load_private_s32_from_1_gep_8191 776legalized: true 777regBankSelected: true 778tracksRegLiveness: true 779machineFunctionInfo: 780 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 781 stackPtrOffsetReg: $sgpr32 782 783body: | 784 bb.0: 785 liveins: $vgpr0 786 787 ; GFX6-LABEL: name: load_private_s32_from_1_gep_8191 788 ; GFX6: liveins: $vgpr0 789 ; GFX6-NEXT: {{ $}} 790 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 791 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec 792 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 793 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 794 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 795 ; 796 ; GFX9-LABEL: name: load_private_s32_from_1_gep_8191 797 ; GFX9: liveins: $vgpr0 798 ; GFX9-NEXT: {{ $}} 799 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 800 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec 801 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 802 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 803 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 804 ; 805 ; GFX11-LABEL: name: load_private_s32_from_1_gep_8191 806 ; GFX11: liveins: $vgpr0 807 ; GFX11-NEXT: {{ $}} 808 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 809 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec 810 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 811 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 812 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 813 ; 814 ; GFX12-LABEL: name: load_private_s32_from_1_gep_8191 815 ; GFX12: liveins: $vgpr0 816 ; GFX12-NEXT: {{ $}} 817 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 818 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 8191, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 819 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 820 %0:vgpr(p5) = COPY $vgpr0 821 %1:vgpr(s32) = G_CONSTANT i32 8191 822 %2:vgpr(p5) = G_PTR_ADD %0, %1 823 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 824 $vgpr0 = COPY %3 825 826... 827 828--- 829 830name: load_private_s32_from_1_gep_8192 831legalized: true 832regBankSelected: true 833tracksRegLiveness: true 834machineFunctionInfo: 835 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 836 stackPtrOffsetReg: $sgpr32 837 838body: | 839 bb.0: 840 liveins: $vgpr0 841 842 ; GFX6-LABEL: name: load_private_s32_from_1_gep_8192 843 ; GFX6: liveins: $vgpr0 844 ; GFX6-NEXT: {{ $}} 845 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 846 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec 847 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 848 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 849 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 850 ; 851 ; GFX9-LABEL: name: load_private_s32_from_1_gep_8192 852 ; GFX9: liveins: $vgpr0 853 ; GFX9-NEXT: {{ $}} 854 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 855 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec 856 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 857 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 858 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 859 ; 860 ; GFX11-LABEL: name: load_private_s32_from_1_gep_8192 861 ; GFX11: liveins: $vgpr0 862 ; GFX11-NEXT: {{ $}} 863 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 864 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec 865 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 866 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 867 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 868 ; 869 ; GFX12-LABEL: name: load_private_s32_from_1_gep_8192 870 ; GFX12: liveins: $vgpr0 871 ; GFX12-NEXT: {{ $}} 872 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 873 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 8192, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 874 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 875 %0:vgpr(p5) = COPY $vgpr0 876 %1:vgpr(s32) = G_CONSTANT i32 8192 877 %2:vgpr(p5) = G_PTR_ADD %0, %1 878 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 879 $vgpr0 = COPY %3 880 881... 882 883--- 884 885name: load_private_s32_from_1_gep_m8191 886legalized: true 887regBankSelected: true 888tracksRegLiveness: true 889machineFunctionInfo: 890 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 891 stackPtrOffsetReg: $sgpr32 892 893body: | 894 bb.0: 895 liveins: $vgpr0 896 897 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8191 898 ; GFX6: liveins: $vgpr0 899 ; GFX6-NEXT: {{ $}} 900 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 901 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec 902 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 903 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 904 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 905 ; 906 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8191 907 ; GFX9: liveins: $vgpr0 908 ; GFX9-NEXT: {{ $}} 909 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 910 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec 911 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 912 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 913 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 914 ; 915 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m8191 916 ; GFX11: liveins: $vgpr0 917 ; GFX11-NEXT: {{ $}} 918 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 919 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec 920 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 921 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 922 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 923 ; 924 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m8191 925 ; GFX12: liveins: $vgpr0 926 ; GFX12-NEXT: {{ $}} 927 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 928 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -8191, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 929 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 930 %0:vgpr(p5) = COPY $vgpr0 931 %1:vgpr(s32) = G_CONSTANT i32 -8191 932 %2:vgpr(p5) = G_PTR_ADD %0, %1 933 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 934 $vgpr0 = COPY %3 935 936... 937 938--- 939 940name: load_private_s32_from_1_gep_m8192 941legalized: true 942regBankSelected: true 943tracksRegLiveness: true 944machineFunctionInfo: 945 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 946 stackPtrOffsetReg: $sgpr32 947 948body: | 949 bb.0: 950 liveins: $vgpr0 951 952 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8192 953 ; GFX6: liveins: $vgpr0 954 ; GFX6-NEXT: {{ $}} 955 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 956 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec 957 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 958 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 959 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 960 ; 961 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8192 962 ; GFX9: liveins: $vgpr0 963 ; GFX9-NEXT: {{ $}} 964 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 965 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec 966 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 967 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 968 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 969 ; 970 ; GFX11-LABEL: name: load_private_s32_from_1_gep_m8192 971 ; GFX11: liveins: $vgpr0 972 ; GFX11-NEXT: {{ $}} 973 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 974 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec 975 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 976 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 977 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 978 ; 979 ; GFX12-LABEL: name: load_private_s32_from_1_gep_m8192 980 ; GFX12: liveins: $vgpr0 981 ; GFX12-NEXT: {{ $}} 982 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 983 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -8192, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 984 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 985 %0:vgpr(p5) = COPY $vgpr0 986 %1:vgpr(s32) = G_CONSTANT i32 -8192 987 %2:vgpr(p5) = G_PTR_ADD %0, %1 988 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 989 $vgpr0 = COPY %3 990 991... 992 993--- 994 995name: load_private_s32_from_1_gep_24bit_max 996legalized: true 997regBankSelected: true 998tracksRegLiveness: true 999machineFunctionInfo: 1000 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1001 stackPtrOffsetReg: $sgpr32 1002 1003body: | 1004 bb.0: 1005 liveins: $vgpr0 1006 1007 ; GFX6-LABEL: name: load_private_s32_from_1_gep_24bit_max 1008 ; GFX6: liveins: $vgpr0 1009 ; GFX6-NEXT: {{ $}} 1010 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1011 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8388607, implicit $exec 1012 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1013 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1014 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1015 ; 1016 ; GFX9-LABEL: name: load_private_s32_from_1_gep_24bit_max 1017 ; GFX9: liveins: $vgpr0 1018 ; GFX9-NEXT: {{ $}} 1019 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1020 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8388607, implicit $exec 1021 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1022 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1023 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1024 ; 1025 ; GFX11-LABEL: name: load_private_s32_from_1_gep_24bit_max 1026 ; GFX11: liveins: $vgpr0 1027 ; GFX11-NEXT: {{ $}} 1028 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1029 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8388607, implicit $exec 1030 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1031 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1032 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1033 ; 1034 ; GFX12-LABEL: name: load_private_s32_from_1_gep_24bit_max 1035 ; GFX12: liveins: $vgpr0 1036 ; GFX12-NEXT: {{ $}} 1037 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1038 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 8388607, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1039 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1040 %0:vgpr(p5) = COPY $vgpr0 1041 %1:vgpr(s32) = G_CONSTANT i32 8388607 1042 %2:vgpr(p5) = G_PTR_ADD %0, %1 1043 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1044 $vgpr0 = COPY %3 1045 1046... 1047 1048--- 1049 1050name: load_private_s32_from_1_gep_2x_24bit_max 1051legalized: true 1052regBankSelected: true 1053tracksRegLiveness: true 1054machineFunctionInfo: 1055 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1056 stackPtrOffsetReg: $sgpr32 1057 1058body: | 1059 bb.0: 1060 liveins: $vgpr0 1061 1062 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2x_24bit_max 1063 ; GFX6: liveins: $vgpr0 1064 ; GFX6-NEXT: {{ $}} 1065 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1066 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 16777214, implicit $exec 1067 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1068 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1069 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1070 ; 1071 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2x_24bit_max 1072 ; GFX9: liveins: $vgpr0 1073 ; GFX9-NEXT: {{ $}} 1074 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1075 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 16777214, implicit $exec 1076 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1077 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1078 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1079 ; 1080 ; GFX11-LABEL: name: load_private_s32_from_1_gep_2x_24bit_max 1081 ; GFX11: liveins: $vgpr0 1082 ; GFX11-NEXT: {{ $}} 1083 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1084 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 16777214, implicit $exec 1085 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1086 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1087 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1088 ; 1089 ; GFX12-LABEL: name: load_private_s32_from_1_gep_2x_24bit_max 1090 ; GFX12: liveins: $vgpr0 1091 ; GFX12-NEXT: {{ $}} 1092 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1093 ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 16777214, implicit $exec 1094 ; GFX12-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1095 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1096 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1097 %0:vgpr(p5) = COPY $vgpr0 1098 %1:vgpr(s32) = G_CONSTANT i32 16777214 1099 %2:vgpr(p5) = G_PTR_ADD %0, %1 1100 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1101 $vgpr0 = COPY %3 1102 1103... 1104 1105--- 1106 1107name: load_private_s32_from_1_gep_24bit_min 1108legalized: true 1109regBankSelected: true 1110tracksRegLiveness: true 1111machineFunctionInfo: 1112 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1113 stackPtrOffsetReg: $sgpr32 1114 1115body: | 1116 bb.0: 1117 liveins: $vgpr0 1118 1119 ; GFX6-LABEL: name: load_private_s32_from_1_gep_24bit_min 1120 ; GFX6: liveins: $vgpr0 1121 ; GFX6-NEXT: {{ $}} 1122 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1123 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8388608, implicit $exec 1124 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1125 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1126 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1127 ; 1128 ; GFX9-LABEL: name: load_private_s32_from_1_gep_24bit_min 1129 ; GFX9: liveins: $vgpr0 1130 ; GFX9-NEXT: {{ $}} 1131 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1132 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8388608, implicit $exec 1133 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1134 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1135 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1136 ; 1137 ; GFX11-LABEL: name: load_private_s32_from_1_gep_24bit_min 1138 ; GFX11: liveins: $vgpr0 1139 ; GFX11-NEXT: {{ $}} 1140 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1141 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8388608, implicit $exec 1142 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1143 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1144 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1145 ; 1146 ; GFX12-LABEL: name: load_private_s32_from_1_gep_24bit_min 1147 ; GFX12: liveins: $vgpr0 1148 ; GFX12-NEXT: {{ $}} 1149 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1150 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], -8388608, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1151 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1152 %0:vgpr(p5) = COPY $vgpr0 1153 %1:vgpr(s32) = G_CONSTANT i32 -8388608 1154 %2:vgpr(p5) = G_PTR_ADD %0, %1 1155 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1156 $vgpr0 = COPY %3 1157 1158... 1159 1160--- 1161 1162name: load_private_s32_from_1_gep_2x_24bit_min 1163legalized: true 1164regBankSelected: true 1165tracksRegLiveness: true 1166machineFunctionInfo: 1167 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1168 stackPtrOffsetReg: $sgpr32 1169 1170body: | 1171 bb.0: 1172 liveins: $vgpr0 1173 1174 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2x_24bit_min 1175 ; GFX6: liveins: $vgpr0 1176 ; GFX6-NEXT: {{ $}} 1177 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1178 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -16777215, implicit $exec 1179 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1180 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1181 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1182 ; 1183 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2x_24bit_min 1184 ; GFX9: liveins: $vgpr0 1185 ; GFX9-NEXT: {{ $}} 1186 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1187 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -16777215, implicit $exec 1188 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1189 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1190 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1191 ; 1192 ; GFX11-LABEL: name: load_private_s32_from_1_gep_2x_24bit_min 1193 ; GFX11: liveins: $vgpr0 1194 ; GFX11-NEXT: {{ $}} 1195 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1196 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -16777215, implicit $exec 1197 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1198 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1199 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1200 ; 1201 ; GFX12-LABEL: name: load_private_s32_from_1_gep_2x_24bit_min 1202 ; GFX12: liveins: $vgpr0 1203 ; GFX12-NEXT: {{ $}} 1204 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 1205 ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -16777215, implicit $exec 1206 ; GFX12-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 1207 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1208 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1209 %0:vgpr(p5) = COPY $vgpr0 1210 %1:vgpr(s32) = G_CONSTANT i32 -16777215 1211 %2:vgpr(p5) = G_PTR_ADD %0, %1 1212 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1213 $vgpr0 = COPY %3 1214 1215... 1216 1217--- 1218 1219name: load_private_s32_from_4_constant_0 1220legalized: true 1221regBankSelected: true 1222tracksRegLiveness: true 1223machineFunctionInfo: 1224 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1225 stackPtrOffsetReg: $sgpr32 1226 1227body: | 1228 bb.0: 1229 1230 ; GFX6-LABEL: name: load_private_s32_from_4_constant_0 1231 ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1232 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 1233 ; 1234 ; GFX9-LABEL: name: load_private_s32_from_4_constant_0 1235 ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1236 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 1237 ; 1238 ; GFX11-LABEL: name: load_private_s32_from_4_constant_0 1239 ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 1240 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1241 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 1242 ; 1243 ; GFX12-LABEL: name: load_private_s32_from_4_constant_0 1244 ; GFX12: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 1245 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1246 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 1247 %0:vgpr(p5) = G_CONSTANT i32 0 1248 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5) 1249 $vgpr0 = COPY %1 1250 1251... 1252 1253--- 1254 1255name: load_private_s32_from_4_constant_sgpr_16 1256legalized: true 1257regBankSelected: true 1258tracksRegLiveness: true 1259machineFunctionInfo: 1260 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1261 stackPtrOffsetReg: $sgpr32 1262 1263body: | 1264 bb.0: 1265 1266 ; GFX6-LABEL: name: load_private_s32_from_4_constant_sgpr_16 1267 ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1268 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 1269 ; 1270 ; GFX9-LABEL: name: load_private_s32_from_4_constant_sgpr_16 1271 ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1272 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 1273 ; 1274 ; GFX11-LABEL: name: load_private_s32_from_4_constant_sgpr_16 1275 ; GFX11: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 16 1276 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR [[S_MOV_B32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1277 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]] 1278 ; 1279 ; GFX12-LABEL: name: load_private_s32_from_4_constant_sgpr_16 1280 ; GFX12: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 16 1281 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR [[S_MOV_B32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1282 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]] 1283 %0:sgpr(p5) = G_CONSTANT i32 16 1284 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5) 1285 $vgpr0 = COPY %1 1286 1287... 1288 1289--- 1290 1291name: load_private_s32_from_1_constant_4095 1292legalized: true 1293regBankSelected: true 1294tracksRegLiveness: true 1295machineFunctionInfo: 1296 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1297 stackPtrOffsetReg: $sgpr32 1298 1299body: | 1300 bb.0: 1301 1302 ; GFX6-LABEL: name: load_private_s32_from_1_constant_4095 1303 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1304 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]] 1305 ; 1306 ; GFX9-LABEL: name: load_private_s32_from_1_constant_4095 1307 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1308 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]] 1309 ; 1310 ; GFX11-LABEL: name: load_private_s32_from_1_constant_4095 1311 ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 1312 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1313 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1314 ; 1315 ; GFX12-LABEL: name: load_private_s32_from_1_constant_4095 1316 ; GFX12: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 1317 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1318 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1319 %0:vgpr(p5) = G_CONSTANT i32 4095 1320 %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5) 1321 $vgpr0 = COPY %1 1322 1323... 1324 1325--- 1326 1327name: load_private_s32_from_1_constant_4096 1328legalized: true 1329regBankSelected: true 1330tracksRegLiveness: true 1331machineFunctionInfo: 1332 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1333 stackPtrOffsetReg: $sgpr32 1334 1335body: | 1336 bb.0: 1337 1338 ; GFX6-LABEL: name: load_private_s32_from_1_constant_4096 1339 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1340 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1341 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1342 ; 1343 ; GFX9-LABEL: name: load_private_s32_from_1_constant_4096 1344 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1345 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1346 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1347 ; 1348 ; GFX11-LABEL: name: load_private_s32_from_1_constant_4096 1349 ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1350 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1351 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1352 ; 1353 ; GFX12-LABEL: name: load_private_s32_from_1_constant_4096 1354 ; GFX12: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1355 ; GFX12-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1356 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]] 1357 %0:vgpr(p5) = G_CONSTANT i32 4096 1358 %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5) 1359 $vgpr0 = COPY %1 1360 1361... 1362 1363--- 1364 1365name: load_private_s32_from_fi 1366legalized: true 1367regBankSelected: true 1368tracksRegLiveness: true 1369machineFunctionInfo: 1370 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1371 stackPtrOffsetReg: $sgpr32 1372stack: 1373 - { id: 0, size: 4, alignment: 4 } 1374 1375body: | 1376 bb.0: 1377 1378 ; GFX6-LABEL: name: load_private_s32_from_fi 1379 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1380 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 1381 ; 1382 ; GFX9-LABEL: name: load_private_s32_from_fi 1383 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1384 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 1385 ; 1386 ; GFX11-LABEL: name: load_private_s32_from_fi 1387 ; GFX11: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR %stack.0, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1388 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]] 1389 ; 1390 ; GFX12-LABEL: name: load_private_s32_from_fi 1391 ; GFX12: [[SCRATCH_LOAD_DWORD_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD_SADDR %stack.0, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1392 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]] 1393 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 1394 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5) 1395 $vgpr0 = COPY %1 1396 1397... 1398 1399--- 1400name: load_private_s32_from_1_fi_offset_4095 1401legalized: true 1402regBankSelected: true 1403tracksRegLiveness: true 1404machineFunctionInfo: 1405 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1406 stackPtrOffsetReg: $sgpr32 1407stack: 1408 - { id: 0, size: 4096, alignment: 4 } 1409 1410body: | 1411 bb.0: 1412 1413 ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4095 1414 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1415 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1416 ; 1417 ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4095 1418 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1419 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1420 ; 1421 ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_4095 1422 ; GFX11: [[SCRATCH_LOAD_UBYTE_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SADDR %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1423 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]] 1424 ; 1425 ; GFX12-LABEL: name: load_private_s32_from_1_fi_offset_4095 1426 ; GFX12: [[SCRATCH_LOAD_UBYTE_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SADDR %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1427 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]] 1428 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 1429 %1:vgpr(s32) = G_CONSTANT i32 4095 1430 %2:vgpr(p5) = G_PTR_ADD %0, %1 1431 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1432 $vgpr0 = COPY %3 1433 1434... 1435 1436# Have to hack around the copy of the constant to VGPR 1437--- 1438name: load_private_s32_from_1_fi_offset_sgpr_4095 1439legalized: true 1440regBankSelected: true 1441tracksRegLiveness: true 1442machineFunctionInfo: 1443 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1444 stackPtrOffsetReg: $sgpr32 1445stack: 1446 - { id: 0, size: 4096, alignment: 4 } 1447 1448body: | 1449 bb.0: 1450 1451 ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095 1452 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1453 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1454 ; 1455 ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095 1456 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1457 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1458 ; 1459 ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095 1460 ; GFX11: [[SCRATCH_LOAD_UBYTE_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SADDR %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1461 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]] 1462 ; 1463 ; GFX12-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095 1464 ; GFX12: [[SCRATCH_LOAD_UBYTE_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SADDR %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1465 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]] 1466 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 1467 %1:sgpr(s32) = G_CONSTANT i32 4095 1468 %2:vgpr(s32) = COPY %1 1469 %3:vgpr(p5) = G_PTR_ADD %0, %2 1470 %4:vgpr(s32) = G_LOAD %3 :: (load (s8), align 1, addrspace 5) 1471 $vgpr0 = COPY %4 1472 1473... 1474 1475--- 1476 1477name: load_private_s32_from_1_fi_offset_4096 1478legalized: true 1479regBankSelected: true 1480tracksRegLiveness: true 1481machineFunctionInfo: 1482 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1483 stackPtrOffsetReg: $sgpr32 1484stack: 1485 - { id: 0, size: 8192, alignment: 4 } 1486 1487body: | 1488 bb.0: 1489 1490 ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4096 1491 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec 1492 ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1493 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec 1494 ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1495 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1496 ; 1497 ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4096 1498 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec 1499 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1500 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec 1501 ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5) 1502 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 1503 ; 1504 ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_4096 1505 ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 1506 ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE_SVS:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SVS [[V_MOV_B32_e32_]], %stack.0, 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1507 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SVS]] 1508 ; 1509 ; GFX12-LABEL: name: load_private_s32_from_1_fi_offset_4096 1510 ; GFX12: [[SCRATCH_LOAD_UBYTE_SADDR:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE_SADDR %stack.0, 4096, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5) 1511 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]] 1512 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 1513 %1:vgpr(s32) = G_CONSTANT i32 4096 1514 %2:vgpr(p5) = G_PTR_ADD %0, %1 1515 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5) 1516 $vgpr0 = COPY %3 1517 1518... 1519 1520# Should not fold offset if this is a null dereference. 1521--- 1522 1523name: load_private_s32_from_neg1 1524legalized: true 1525regBankSelected: true 1526tracksRegLiveness: true 1527machineFunctionInfo: 1528 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 1529 stackPtrOffsetReg: $sgpr32 1530 1531body: | 1532 bb.0: 1533 1534 ; GFX6-LABEL: name: load_private_s32_from_neg1 1535 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 1536 ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1537 ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 1538 ; 1539 ; GFX9-LABEL: name: load_private_s32_from_neg1 1540 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 1541 ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, implicit $exec :: (load (s32), addrspace 5) 1542 ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 1543 ; 1544 ; GFX11-LABEL: name: load_private_s32_from_neg1 1545 ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 1546 ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1547 ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 1548 ; 1549 ; GFX12-LABEL: name: load_private_s32_from_neg1 1550 ; GFX12: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 1551 ; GFX12-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5) 1552 ; GFX12-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]] 1553 %0:vgpr(p5) = G_CONSTANT i32 -1 1554 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5) 1555 $vgpr0 = COPY %1 1556 1557... 1558