345 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s3# RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s6# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s7# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s8 9---10 11name: load_atomic_local_s32_seq_cst12legalized: true13regBankSelected: true14tracksRegLiveness: true15 16body: |17 bb.0:18 liveins: $vgpr019 20 ; GFX6-LABEL: name: load_atomic_local_s32_seq_cst21 ; GFX6: liveins: $vgpr022 ; GFX6-NEXT: {{ $}}23 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr024 ; GFX6-NEXT: $m0 = S_MOV_B32 -125 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load seq_cst (s32), addrspace 3)26 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]27 ; GFX7-LABEL: name: load_atomic_local_s32_seq_cst28 ; GFX7: liveins: $vgpr029 ; GFX7-NEXT: {{ $}}30 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr031 ; GFX7-NEXT: $m0 = S_MOV_B32 -132 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load seq_cst (s32), addrspace 3)33 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]34 ; GFX9-LABEL: name: load_atomic_local_s32_seq_cst35 ; GFX9: liveins: $vgpr036 ; GFX9-NEXT: {{ $}}37 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr038 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load seq_cst (s32), addrspace 3)39 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]40 %0:vgpr(p3) = COPY $vgpr041 %1:vgpr(s32) = G_LOAD %0 :: (load seq_cst (s32), align 4, addrspace 3)42 $vgpr0 = COPY %143 44...45 46---47 48name: load_atomic_local_v2s16_seq_cst49legalized: true50regBankSelected: true51tracksRegLiveness: true52 53body: |54 bb.0:55 liveins: $vgpr056 57 ; GFX6-LABEL: name: load_atomic_local_v2s16_seq_cst58 ; GFX6: liveins: $vgpr059 ; GFX6-NEXT: {{ $}}60 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr061 ; GFX6-NEXT: $m0 = S_MOV_B32 -162 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s16>), addrspace 3)63 ; GFX6-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)64 ; GFX7-LABEL: name: load_atomic_local_v2s16_seq_cst65 ; GFX7: liveins: $vgpr066 ; GFX7-NEXT: {{ $}}67 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr068 ; GFX7-NEXT: $m0 = S_MOV_B32 -169 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s16>), addrspace 3)70 ; GFX7-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)71 ; GFX9-LABEL: name: load_atomic_local_v2s16_seq_cst72 ; GFX9: liveins: $vgpr073 ; GFX9-NEXT: {{ $}}74 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr075 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s16>), addrspace 3)76 ; GFX9-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)77 %0:vgpr(p3) = COPY $vgpr078 %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load seq_cst (<2 x s16>), align 4, addrspace 3)79 $vgpr0 = COPY %180 81...82 83---84 85name: load_atomic_local_p3_seq_cst86legalized: true87regBankSelected: true88tracksRegLiveness: true89 90body: |91 bb.0:92 liveins: $vgpr093 94 ; GFX6-LABEL: name: load_atomic_local_p3_seq_cst95 ; GFX6: liveins: $vgpr096 ; GFX6-NEXT: {{ $}}97 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr098 ; GFX6-NEXT: $m0 = S_MOV_B32 -199 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p3) :: (load seq_cst (p3), addrspace 3)100 ; GFX6-NEXT: $vgpr0 = COPY [[LOAD]](p3)101 ; GFX7-LABEL: name: load_atomic_local_p3_seq_cst102 ; GFX7: liveins: $vgpr0103 ; GFX7-NEXT: {{ $}}104 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0105 ; GFX7-NEXT: $m0 = S_MOV_B32 -1106 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p3) :: (load seq_cst (p3), addrspace 3)107 ; GFX7-NEXT: $vgpr0 = COPY [[LOAD]](p3)108 ; GFX9-LABEL: name: load_atomic_local_p3_seq_cst109 ; GFX9: liveins: $vgpr0110 ; GFX9-NEXT: {{ $}}111 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0112 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p3) :: (load seq_cst (p3), addrspace 3)113 ; GFX9-NEXT: $vgpr0 = COPY [[LOAD]](p3)114 %0:vgpr(p3) = COPY $vgpr0115 %1:vgpr(p3) = G_LOAD %0 :: (load seq_cst (p3), align 4, addrspace 3)116 $vgpr0 = COPY %1117 118...119 120---121 122name: load_atomic_local_s64_seq_cst123legalized: true124regBankSelected: true125tracksRegLiveness: true126 127body: |128 bb.0:129 liveins: $vgpr0130 131 ; GFX6-LABEL: name: load_atomic_local_s64_seq_cst132 ; GFX6: liveins: $vgpr0133 ; GFX6-NEXT: {{ $}}134 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0135 ; GFX6-NEXT: $m0 = S_MOV_B32 -1136 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load seq_cst (s64), addrspace 3)137 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]138 ; GFX7-LABEL: name: load_atomic_local_s64_seq_cst139 ; GFX7: liveins: $vgpr0140 ; GFX7-NEXT: {{ $}}141 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0142 ; GFX7-NEXT: $m0 = S_MOV_B32 -1143 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load seq_cst (s64), addrspace 3)144 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]145 ; GFX9-LABEL: name: load_atomic_local_s64_seq_cst146 ; GFX9: liveins: $vgpr0147 ; GFX9-NEXT: {{ $}}148 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0149 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load seq_cst (s64), addrspace 3)150 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]151 %0:vgpr(p3) = COPY $vgpr0152 %1:vgpr(s64) = G_LOAD %0 :: (load seq_cst (s64), align 8, addrspace 3)153 $vgpr0_vgpr1 = COPY %1154 155...156 157---158 159name: load_atomic_local_v2s32_seq_cst160legalized: true161regBankSelected: true162tracksRegLiveness: true163 164body: |165 bb.0:166 liveins: $vgpr0167 168 ; GFX6-LABEL: name: load_atomic_local_v2s32_seq_cst169 ; GFX6: liveins: $vgpr0170 ; GFX6-NEXT: {{ $}}171 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0172 ; GFX6-NEXT: $m0 = S_MOV_B32 -1173 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s32>), addrspace 3)174 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)175 ; GFX7-LABEL: name: load_atomic_local_v2s32_seq_cst176 ; GFX7: liveins: $vgpr0177 ; GFX7-NEXT: {{ $}}178 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0179 ; GFX7-NEXT: $m0 = S_MOV_B32 -1180 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s32>), addrspace 3)181 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)182 ; GFX9-LABEL: name: load_atomic_local_v2s32_seq_cst183 ; GFX9: liveins: $vgpr0184 ; GFX9-NEXT: {{ $}}185 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0186 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<2 x s32>), addrspace 3)187 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)188 %0:vgpr(p3) = COPY $vgpr0189 %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load seq_cst (<2 x s32>), align 8, addrspace 3)190 $vgpr0_vgpr1 = COPY %1191 192...193 194---195 196name: load_atomic_local_v4s16_seq_cst197legalized: true198regBankSelected: true199tracksRegLiveness: true200 201body: |202 bb.0:203 liveins: $vgpr0204 205 ; GFX6-LABEL: name: load_atomic_local_v4s16_seq_cst206 ; GFX6: liveins: $vgpr0207 ; GFX6-NEXT: {{ $}}208 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0209 ; GFX6-NEXT: $m0 = S_MOV_B32 -1210 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<4 x s16>), addrspace 3)211 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)212 ; GFX7-LABEL: name: load_atomic_local_v4s16_seq_cst213 ; GFX7: liveins: $vgpr0214 ; GFX7-NEXT: {{ $}}215 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0216 ; GFX7-NEXT: $m0 = S_MOV_B32 -1217 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<4 x s16>), addrspace 3)218 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)219 ; GFX9-LABEL: name: load_atomic_local_v4s16_seq_cst220 ; GFX9: liveins: $vgpr0221 ; GFX9-NEXT: {{ $}}222 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0223 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p3) :: (load seq_cst (<4 x s16>), addrspace 3)224 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)225 %0:vgpr(p3) = COPY $vgpr0226 %1:vgpr(<4 x s16>) = G_LOAD %0 :: (load seq_cst (<4 x s16>), align 8, addrspace 3)227 $vgpr0_vgpr1 = COPY %1228 229...230 231---232 233name: load_atomic_local_p1_seq_cst234legalized: true235regBankSelected: true236tracksRegLiveness: true237 238body: |239 bb.0:240 liveins: $vgpr0241 242 ; GFX6-LABEL: name: load_atomic_local_p1_seq_cst243 ; GFX6: liveins: $vgpr0244 ; GFX6-NEXT: {{ $}}245 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0246 ; GFX6-NEXT: $m0 = S_MOV_B32 -1247 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load seq_cst (p1), addrspace 3)248 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)249 ; GFX7-LABEL: name: load_atomic_local_p1_seq_cst250 ; GFX7: liveins: $vgpr0251 ; GFX7-NEXT: {{ $}}252 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0253 ; GFX7-NEXT: $m0 = S_MOV_B32 -1254 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load seq_cst (p1), addrspace 3)255 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)256 ; GFX9-LABEL: name: load_atomic_local_p1_seq_cst257 ; GFX9: liveins: $vgpr0258 ; GFX9-NEXT: {{ $}}259 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0260 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load seq_cst (p1), addrspace 3)261 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)262 %0:vgpr(p3) = COPY $vgpr0263 %1:vgpr(p1) = G_LOAD %0 :: (load seq_cst (p1), align 8, addrspace 3)264 $vgpr0_vgpr1 = COPY %1265 266...267 268---269 270name: load_atomic_local_p0_seq_cst271legalized: true272regBankSelected: true273tracksRegLiveness: true274 275body: |276 bb.0:277 liveins: $vgpr0278 279 ; GFX6-LABEL: name: load_atomic_local_p0_seq_cst280 ; GFX6: liveins: $vgpr0281 ; GFX6-NEXT: {{ $}}282 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0283 ; GFX6-NEXT: $m0 = S_MOV_B32 -1284 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p3) :: (load seq_cst (p0), addrspace 3)285 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)286 ; GFX7-LABEL: name: load_atomic_local_p0_seq_cst287 ; GFX7: liveins: $vgpr0288 ; GFX7-NEXT: {{ $}}289 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0290 ; GFX7-NEXT: $m0 = S_MOV_B32 -1291 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p3) :: (load seq_cst (p0), addrspace 3)292 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)293 ; GFX9-LABEL: name: load_atomic_local_p0_seq_cst294 ; GFX9: liveins: $vgpr0295 ; GFX9-NEXT: {{ $}}296 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0297 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p3) :: (load seq_cst (p0), addrspace 3)298 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)299 %0:vgpr(p3) = COPY $vgpr0300 %1:vgpr(p0) = G_LOAD %0 :: (load seq_cst (p0), align 8, addrspace 3)301 $vgpr0_vgpr1 = COPY %1302 303...304 305---306 307name: load_atomic_local_s32_seq_cst_gep_65535308legalized: true309regBankSelected: true310tracksRegLiveness: true311 312body: |313 bb.0:314 liveins: $vgpr0315 316 ; GFX6-LABEL: name: load_atomic_local_s32_seq_cst_gep_65535317 ; GFX6: liveins: $vgpr0318 ; GFX6-NEXT: {{ $}}319 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0320 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec321 ; 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 $exec322 ; GFX6-NEXT: $m0 = S_MOV_B32 -1323 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load seq_cst (s32), addrspace 3)324 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]325 ; GFX7-LABEL: name: load_atomic_local_s32_seq_cst_gep_65535326 ; GFX7: liveins: $vgpr0327 ; GFX7-NEXT: {{ $}}328 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0329 ; GFX7-NEXT: $m0 = S_MOV_B32 -1330 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 65535, 0, implicit $m0, implicit $exec :: (load seq_cst (s32), addrspace 3)331 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]332 ; GFX9-LABEL: name: load_atomic_local_s32_seq_cst_gep_65535333 ; GFX9: liveins: $vgpr0334 ; GFX9-NEXT: {{ $}}335 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0336 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 65535, 0, implicit $exec :: (load seq_cst (s32), addrspace 3)337 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]338 %0:vgpr(p3) = COPY $vgpr0339 %1:vgpr(s32) = G_CONSTANT i32 65535340 %2:vgpr(p3) = G_PTR_ADD %0, %1341 %3:vgpr(s32) = G_LOAD %2 :: (load seq_cst (s32), align 4, addrspace 3)342 $vgpr0 = COPY %3343 344...345