1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s 3# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 4 5--- 6 7name: load_private_s32_from_4 8legalized: true 9regBankSelected: true 10tracksRegLiveness: true 11machineFunctionInfo: 12 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 13 stackPtrOffsetReg: $sgpr32 14 15body: | 16 bb.0: 17 liveins: $vgpr0 18 19 ; GFX6-LABEL: name: load_private_s32_from_4 20 ; GFX6: liveins: $vgpr0 21 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 22 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 23 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 24 ; GFX9-LABEL: name: load_private_s32_from_4 25 ; GFX9: liveins: $vgpr0 26 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 27 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 28 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 29 %0:vgpr(p5) = COPY $vgpr0 30 %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 31 $vgpr0 = COPY %1 32 33... 34 35--- 36 37name: load_private_s32_from_2 38legalized: true 39regBankSelected: true 40tracksRegLiveness: true 41machineFunctionInfo: 42 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 43 stackPtrOffsetReg: $sgpr32 44 45body: | 46 bb.0: 47 liveins: $vgpr0 48 49 ; GFX6-LABEL: name: load_private_s32_from_2 50 ; GFX6: liveins: $vgpr0 51 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 52 ; GFX6: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 2, addrspace 5) 53 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]] 54 ; GFX9-LABEL: name: load_private_s32_from_2 55 ; GFX9: liveins: $vgpr0 56 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 57 ; GFX9: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 2, addrspace 5) 58 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]] 59 %0:vgpr(p5) = COPY $vgpr0 60 %1:vgpr(s32) = G_LOAD %0 :: (load 2, align 2, addrspace 5) 61 $vgpr0 = COPY %1 62 63... 64 65--- 66 67name: load_private_s32_from_1 68legalized: true 69regBankSelected: true 70tracksRegLiveness: true 71machineFunctionInfo: 72 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 73 stackPtrOffsetReg: $sgpr32 74 75body: | 76 bb.0: 77 liveins: $vgpr0 78 79 ; GFX6-LABEL: name: load_private_s32_from_1 80 ; GFX6: liveins: $vgpr0 81 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 82 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 83 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 84 ; GFX9-LABEL: name: load_private_s32_from_1 85 ; GFX9: liveins: $vgpr0 86 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 87 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 88 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 89 %0:vgpr(p5) = COPY $vgpr0 90 %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5) 91 $vgpr0 = COPY %1 92 93... 94 95--- 96 97name: load_private_p3_from_4 98legalized: true 99regBankSelected: true 100tracksRegLiveness: true 101machineFunctionInfo: 102 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 103 stackPtrOffsetReg: $sgpr32 104 105body: | 106 bb.0: 107 liveins: $vgpr0 108 109 ; GFX6-LABEL: name: load_private_p3_from_4 110 ; GFX6: liveins: $vgpr0 111 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 112 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 113 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 114 ; GFX9-LABEL: name: load_private_p3_from_4 115 ; GFX9: liveins: $vgpr0 116 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 117 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 118 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 119 %0:vgpr(p5) = COPY $vgpr0 120 %1:vgpr(p3) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 121 $vgpr0 = COPY %1 122 123... 124 125--- 126 127name: load_private_p5_from_4 128legalized: true 129regBankSelected: true 130tracksRegLiveness: true 131machineFunctionInfo: 132 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 133 stackPtrOffsetReg: $sgpr32 134 135body: | 136 bb.0: 137 liveins: $vgpr0 138 139 ; GFX6-LABEL: name: load_private_p5_from_4 140 ; GFX6: liveins: $vgpr0 141 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 142 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 143 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 144 ; GFX9-LABEL: name: load_private_p5_from_4 145 ; GFX9: liveins: $vgpr0 146 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 147 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 148 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 149 %0:vgpr(p5) = COPY $vgpr0 150 %1:vgpr(p5) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 151 $vgpr0 = COPY %1 152 153... 154 155--- 156 157name: load_private_v2s16 158legalized: true 159regBankSelected: true 160tracksRegLiveness: true 161machineFunctionInfo: 162 isEntryFunction: false 163 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 164 stackPtrOffsetReg: $sgpr32 165 166body: | 167 bb.0: 168 liveins: $vgpr0 169 170 ; GFX6-LABEL: name: load_private_v2s16 171 ; GFX6: liveins: $vgpr0 172 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 173 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 174 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 175 ; GFX9-LABEL: name: load_private_v2s16 176 ; GFX9: liveins: $vgpr0 177 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 178 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 179 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 180 %0:vgpr(p5) = COPY $vgpr0 181 %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 182 $vgpr0 = COPY %1 183 184... 185 186################################################################################ 187### Stress addressing modes 188################################################################################ 189 190--- 191 192name: load_private_s32_from_1_gep_2047 193legalized: true 194regBankSelected: true 195tracksRegLiveness: true 196machineFunctionInfo: 197 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 198 stackPtrOffsetReg: $sgpr32 199 200body: | 201 bb.0: 202 liveins: $vgpr0 203 204 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047 205 ; GFX6: liveins: $vgpr0 206 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 207 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 208 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 209 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 210 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 211 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047 212 ; GFX9: liveins: $vgpr0 213 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 214 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 215 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 216 %0:vgpr(p5) = COPY $vgpr0 217 %1:vgpr(s32) = G_CONSTANT i32 2047 218 %2:vgpr(p5) = G_PTR_ADD %0, %1 219 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 220 $vgpr0 = COPY %3 221 222... 223 224--- 225 226name: load_private_s32_from_1_gep_2047_known_bits 227legalized: true 228regBankSelected: true 229tracksRegLiveness: true 230machineFunctionInfo: 231 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 232 stackPtrOffsetReg: $sgpr32 233 234body: | 235 bb.0: 236 liveins: $vgpr0 237 238 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047_known_bits 239 ; GFX6: liveins: $vgpr0 240 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 241 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec 242 ; GFX6: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec 243 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_AND_B32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 244 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 245 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047_known_bits 246 ; GFX9: liveins: $vgpr0 247 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 248 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec 249 ; GFX9: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec 250 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_AND_B32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 251 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 252 %0:vgpr(s32) = COPY $vgpr0 253 %1:vgpr(s32) = G_CONSTANT i32 2147483647 254 %2:vgpr(s32) = G_AND %0, %1 255 %3:vgpr(p5) = G_INTTOPTR %2 256 %4:vgpr(s32) = G_CONSTANT i32 2047 257 %5:vgpr(p5) = G_PTR_ADD %3, %4 258 %6:vgpr(s32) = G_LOAD %5 :: (load 1, align 1, addrspace 5) 259 $vgpr0 = COPY %6 260 261... 262 263--- 264 265name: load_private_s32_from_1_gep_2048 266legalized: true 267regBankSelected: true 268tracksRegLiveness: true 269machineFunctionInfo: 270 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 271 stackPtrOffsetReg: $sgpr32 272 273body: | 274 bb.0: 275 liveins: $vgpr0 276 277 ; GFX6-LABEL: name: load_private_s32_from_1_gep_2048 278 ; GFX6: liveins: $vgpr0 279 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 280 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec 281 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 282 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 283 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 284 ; GFX9-LABEL: name: load_private_s32_from_1_gep_2048 285 ; GFX9: liveins: $vgpr0 286 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 287 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2048, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 288 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 289 %0:vgpr(p5) = COPY $vgpr0 290 %1:vgpr(s32) = G_CONSTANT i32 2048 291 %2:vgpr(p5) = G_PTR_ADD %0, %1 292 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 293 $vgpr0 = COPY %3 294 295... 296 297--- 298 299name: load_private_s32_from_1_gep_m2047 300legalized: true 301regBankSelected: true 302tracksRegLiveness: true 303machineFunctionInfo: 304 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 305 stackPtrOffsetReg: $sgpr32 306 307body: | 308 bb.0: 309 liveins: $vgpr0 310 311 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2047 312 ; GFX6: liveins: $vgpr0 313 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 314 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec 315 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 316 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 317 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 318 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2047 319 ; GFX9: liveins: $vgpr0 320 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 321 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec 322 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 323 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 324 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 325 %0:vgpr(p5) = COPY $vgpr0 326 %1:vgpr(s32) = G_CONSTANT i32 -2047 327 %2:vgpr(p5) = G_PTR_ADD %0, %1 328 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 329 $vgpr0 = COPY %3 330 331... 332 333--- 334 335name: load_private_s32_from_1_gep_m2048 336legalized: true 337regBankSelected: true 338tracksRegLiveness: true 339machineFunctionInfo: 340 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 341 stackPtrOffsetReg: $sgpr32 342 343body: | 344 bb.0: 345 liveins: $vgpr0 346 347 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2048 348 ; GFX6: liveins: $vgpr0 349 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 350 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec 351 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 352 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 353 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 354 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2048 355 ; GFX9: liveins: $vgpr0 356 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 357 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec 358 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 359 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 360 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 361 %0:vgpr(p5) = COPY $vgpr0 362 %1:vgpr(s32) = G_CONSTANT i32 -2048 363 %2:vgpr(p5) = G_PTR_ADD %0, %1 364 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 365 $vgpr0 = COPY %3 366 367... 368 369--- 370 371name: load_private_s32_from_1_gep_4095 372legalized: true 373regBankSelected: true 374tracksRegLiveness: true 375machineFunctionInfo: 376 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 377 stackPtrOffsetReg: $sgpr32 378 379body: | 380 bb.0: 381 liveins: $vgpr0 382 383 ; GFX6-LABEL: name: load_private_s32_from_1_gep_4095 384 ; GFX6: liveins: $vgpr0 385 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 386 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 387 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 388 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 389 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 390 ; GFX9-LABEL: name: load_private_s32_from_1_gep_4095 391 ; GFX9: liveins: $vgpr0 392 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 393 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 394 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 395 %0:vgpr(p5) = COPY $vgpr0 396 %1:vgpr(s32) = G_CONSTANT i32 4095 397 %2:vgpr(p5) = G_PTR_ADD %0, %1 398 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 399 $vgpr0 = COPY %3 400 401... 402 403--- 404 405name: load_private_s32_from_1_gep_4096 406legalized: true 407regBankSelected: true 408tracksRegLiveness: true 409machineFunctionInfo: 410 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 411 stackPtrOffsetReg: $sgpr32 412 413body: | 414 bb.0: 415 liveins: $vgpr0 416 417 ; GFX6-LABEL: name: load_private_s32_from_1_gep_4096 418 ; GFX6: liveins: $vgpr0 419 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 420 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 421 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 422 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 423 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 424 ; GFX9-LABEL: name: load_private_s32_from_1_gep_4096 425 ; GFX9: liveins: $vgpr0 426 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 427 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 428 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 429 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 430 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 431 %0:vgpr(p5) = COPY $vgpr0 432 %1:vgpr(s32) = G_CONSTANT i32 4096 433 %2:vgpr(p5) = G_PTR_ADD %0, %1 434 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 435 $vgpr0 = COPY %3 436 437... 438 439--- 440 441name: load_private_s32_from_1_gep_m4095 442legalized: true 443regBankSelected: true 444tracksRegLiveness: true 445machineFunctionInfo: 446 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 447 stackPtrOffsetReg: $sgpr32 448 449body: | 450 bb.0: 451 liveins: $vgpr0 452 453 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4095 454 ; GFX6: liveins: $vgpr0 455 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 456 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec 457 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 458 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 459 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 460 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4095 461 ; GFX9: liveins: $vgpr0 462 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 463 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec 464 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 465 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 466 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 467 %0:vgpr(p5) = COPY $vgpr0 468 %1:vgpr(s32) = G_CONSTANT i32 -4095 469 %2:vgpr(p5) = G_PTR_ADD %0, %1 470 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 471 $vgpr0 = COPY %3 472 473... 474 475--- 476 477name: load_private_s32_from_1_gep_m4096 478legalized: true 479regBankSelected: true 480tracksRegLiveness: true 481machineFunctionInfo: 482 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 483 stackPtrOffsetReg: $sgpr32 484 485body: | 486 bb.0: 487 liveins: $vgpr0 488 489 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4096 490 ; GFX6: liveins: $vgpr0 491 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 492 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec 493 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 494 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 495 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 496 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4096 497 ; GFX9: liveins: $vgpr0 498 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 499 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec 500 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 501 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 502 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 503 %0:vgpr(p5) = COPY $vgpr0 504 %1:vgpr(s32) = G_CONSTANT i32 -4096 505 %2:vgpr(p5) = G_PTR_ADD %0, %1 506 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 507 $vgpr0 = COPY %3 508 509... 510 511--- 512 513name: load_private_s32_from_1_gep_8191 514legalized: true 515regBankSelected: true 516tracksRegLiveness: true 517machineFunctionInfo: 518 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 519 stackPtrOffsetReg: $sgpr32 520 521body: | 522 bb.0: 523 liveins: $vgpr0 524 525 ; GFX6-LABEL: name: load_private_s32_from_1_gep_8191 526 ; GFX6: liveins: $vgpr0 527 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 528 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec 529 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 530 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 531 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 532 ; GFX9-LABEL: name: load_private_s32_from_1_gep_8191 533 ; GFX9: liveins: $vgpr0 534 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 535 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec 536 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 537 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 538 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 539 %0:vgpr(p5) = COPY $vgpr0 540 %1:vgpr(s32) = G_CONSTANT i32 8191 541 %2:vgpr(p5) = G_PTR_ADD %0, %1 542 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 543 $vgpr0 = COPY %3 544 545... 546 547--- 548 549name: load_private_s32_from_1_gep_8192 550legalized: true 551regBankSelected: true 552tracksRegLiveness: true 553machineFunctionInfo: 554 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 555 stackPtrOffsetReg: $sgpr32 556 557body: | 558 bb.0: 559 liveins: $vgpr0 560 561 ; GFX6-LABEL: name: load_private_s32_from_1_gep_8192 562 ; GFX6: liveins: $vgpr0 563 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 564 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec 565 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 566 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 567 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 568 ; GFX9-LABEL: name: load_private_s32_from_1_gep_8192 569 ; GFX9: liveins: $vgpr0 570 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 571 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec 572 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 573 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 574 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 575 %0:vgpr(p5) = COPY $vgpr0 576 %1:vgpr(s32) = G_CONSTANT i32 8192 577 %2:vgpr(p5) = G_PTR_ADD %0, %1 578 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 579 $vgpr0 = COPY %3 580 581... 582 583--- 584 585name: load_private_s32_from_1_gep_m8191 586legalized: true 587regBankSelected: true 588tracksRegLiveness: true 589machineFunctionInfo: 590 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 591 stackPtrOffsetReg: $sgpr32 592 593body: | 594 bb.0: 595 liveins: $vgpr0 596 597 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8191 598 ; GFX6: liveins: $vgpr0 599 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 600 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec 601 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 602 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 603 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 604 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8191 605 ; GFX9: liveins: $vgpr0 606 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 607 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec 608 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 609 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 610 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 611 %0:vgpr(p5) = COPY $vgpr0 612 %1:vgpr(s32) = G_CONSTANT i32 -8191 613 %2:vgpr(p5) = G_PTR_ADD %0, %1 614 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 615 $vgpr0 = COPY %3 616 617... 618 619--- 620 621name: load_private_s32_from_1_gep_m8192 622legalized: true 623regBankSelected: true 624tracksRegLiveness: true 625machineFunctionInfo: 626 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 627 stackPtrOffsetReg: $sgpr32 628 629body: | 630 bb.0: 631 liveins: $vgpr0 632 633 ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8192 634 ; GFX6: liveins: $vgpr0 635 ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 636 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec 637 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 638 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 639 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 640 ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8192 641 ; GFX9: liveins: $vgpr0 642 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 643 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec 644 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 645 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 646 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 647 %0:vgpr(p5) = COPY $vgpr0 648 %1:vgpr(s32) = G_CONSTANT i32 -8192 649 %2:vgpr(p5) = G_PTR_ADD %0, %1 650 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 651 $vgpr0 = COPY %3 652 653... 654 655--- 656 657name: load_private_s32_from_4_constant_0 658legalized: true 659regBankSelected: true 660tracksRegLiveness: true 661machineFunctionInfo: 662 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 663 stackPtrOffsetReg: $sgpr32 664 665body: | 666 bb.0: 667 668 ; GFX6-LABEL: name: load_private_s32_from_4_constant_0 669 ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 670 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 671 ; GFX9-LABEL: name: load_private_s32_from_4_constant_0 672 ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 673 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 674 %0:vgpr(p5) = G_CONSTANT i32 0 675 %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 676 $vgpr0 = COPY %1 677 678... 679 680--- 681 682name: load_private_s32_from_4_constant_sgpr_16 683legalized: true 684regBankSelected: true 685tracksRegLiveness: true 686machineFunctionInfo: 687 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 688 stackPtrOffsetReg: $sgpr32 689 690body: | 691 bb.0: 692 693 ; GFX6-LABEL: name: load_private_s32_from_4_constant_sgpr_16 694 ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 695 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 696 ; GFX9-LABEL: name: load_private_s32_from_4_constant_sgpr_16 697 ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 698 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]] 699 %0:sgpr(p5) = G_CONSTANT i32 16 700 %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 701 $vgpr0 = COPY %1 702 703... 704 705--- 706 707name: load_private_s32_from_1_constant_4095 708legalized: true 709regBankSelected: true 710tracksRegLiveness: true 711machineFunctionInfo: 712 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 713 stackPtrOffsetReg: $sgpr32 714 715body: | 716 bb.0: 717 718 ; GFX6-LABEL: name: load_private_s32_from_1_constant_4095 719 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 720 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]] 721 ; GFX9-LABEL: name: load_private_s32_from_1_constant_4095 722 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 723 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]] 724 %0:vgpr(p5) = G_CONSTANT i32 4095 725 %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5) 726 $vgpr0 = COPY %1 727 728... 729 730--- 731 732name: load_private_s32_from_1_constant_4096 733legalized: true 734regBankSelected: true 735tracksRegLiveness: true 736machineFunctionInfo: 737 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 738 stackPtrOffsetReg: $sgpr32 739 740body: | 741 bb.0: 742 743 ; GFX6-LABEL: name: load_private_s32_from_1_constant_4096 744 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 745 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 746 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 747 ; GFX9-LABEL: name: load_private_s32_from_1_constant_4096 748 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 749 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 750 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 751 %0:vgpr(p5) = G_CONSTANT i32 4096 752 %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5) 753 $vgpr0 = COPY %1 754 755... 756 757--- 758 759name: load_private_s32_from_fi 760legalized: true 761regBankSelected: true 762tracksRegLiveness: true 763machineFunctionInfo: 764 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 765 stackPtrOffsetReg: $sgpr32 766stack: 767 - { id: 0, size: 4, alignment: 4 } 768 769body: | 770 bb.0: 771 772 ; GFX6-LABEL: name: load_private_s32_from_fi 773 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 774 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 775 ; GFX9-LABEL: name: load_private_s32_from_fi 776 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 777 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 778 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 779 %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 780 $vgpr0 = COPY %1 781 782... 783 784--- 785 786name: load_private_s32_from_1_fi_offset_4095 787legalized: true 788regBankSelected: true 789tracksRegLiveness: true 790machineFunctionInfo: 791 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 792 stackPtrOffsetReg: $sgpr32 793stack: 794 - { id: 0, size: 4096, alignment: 4 } 795 796body: | 797 bb.0: 798 799 ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4095 800 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 801 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 802 ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4095 803 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 804 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 805 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 806 %1:vgpr(s32) = G_CONSTANT i32 4095 807 %2:vgpr(p5) = G_PTR_ADD %0, %1 808 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 809 $vgpr0 = COPY %3 810 811... 812 813--- 814 815name: load_private_s32_from_1_fi_offset_4096 816legalized: true 817regBankSelected: true 818tracksRegLiveness: true 819machineFunctionInfo: 820 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 821 stackPtrOffsetReg: $sgpr32 822stack: 823 - { id: 0, size: 8192, alignment: 4 } 824 825body: | 826 bb.0: 827 828 ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4096 829 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec 830 ; GFX6: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 831 ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec 832 ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 833 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 834 ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4096 835 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec 836 ; GFX9: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 837 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec 838 ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5) 839 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]] 840 %0:vgpr(p5) = G_FRAME_INDEX %stack.0 841 %1:vgpr(s32) = G_CONSTANT i32 4096 842 %2:vgpr(p5) = G_PTR_ADD %0, %1 843 %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5) 844 $vgpr0 = COPY %3 845 846... 847 848# Should not fold offset if this is a null dereference. 849--- 850 851name: load_private_s32_from_neg1 852legalized: true 853regBankSelected: true 854tracksRegLiveness: true 855machineFunctionInfo: 856 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3 857 stackPtrOffsetReg: $sgpr32 858 859body: | 860 bb.0: 861 862 ; GFX6-LABEL: name: load_private_s32_from_neg1 863 ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 864 ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 865 ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 866 ; GFX9-LABEL: name: load_private_s32_from_neg1 867 ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 868 ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5) 869 ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]] 870 %0:vgpr(p5) = G_CONSTANT i32 -1 871 %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5) 872 $vgpr0 = COPY %1 873 874... 875