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