219 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=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s6# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s7# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s8 9 10---11name: atomic_cmpxchg_s32_region12legalized: true13regBankSelected: true14tracksRegLiveness: true15body: |16 bb.0:17 liveins: $vgpr0, $vgpr1, $vgpr218 19 ; GFX6-LABEL: name: atomic_cmpxchg_s32_region20 ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr221 ; GFX6-NEXT: {{ $}}22 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr023 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr124 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr225 ; GFX6-NEXT: $m0 = S_MOV_B32 -126 ; GFX6-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)27 ; GFX6-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]28 ; GFX7-LABEL: name: atomic_cmpxchg_s32_region29 ; GFX7: liveins: $vgpr0, $vgpr1, $vgpr230 ; GFX7-NEXT: {{ $}}31 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr032 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr133 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr234 ; GFX7-NEXT: $m0 = S_MOV_B32 -135 ; GFX7-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)36 ; GFX7-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]37 ; GFX9-LABEL: name: atomic_cmpxchg_s32_region38 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr239 ; GFX9-NEXT: {{ $}}40 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr041 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr142 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr243 ; GFX9-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)44 ; GFX9-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]45 ; GFX11-LABEL: name: atomic_cmpxchg_s32_region46 ; GFX11: liveins: $vgpr0, $vgpr1, $vgpr247 ; GFX11-NEXT: {{ $}}48 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr049 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr150 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr251 ; GFX11-NEXT: [[DS_CMPSTORE_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPSTORE_RTN_B32 [[COPY]], [[COPY2]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)52 ; GFX11-NEXT: $vgpr0 = COPY [[DS_CMPSTORE_RTN_B32_]]53 %0:vgpr(p2) = COPY $vgpr054 %1:vgpr(s32) = COPY $vgpr155 %2:vgpr(s32) = COPY $vgpr256 %3:vgpr(s32) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store seq_cst (s32), addrspace 2)57 $vgpr0 = COPY %358 59...60 61---62name: atomic_cmpxchg_s32_region_gep463legalized: true64regBankSelected: true65tracksRegLiveness: true66body: |67 bb.0:68 liveins: $vgpr0, $vgpr1, $vgpr269 70 ; GFX6-LABEL: name: atomic_cmpxchg_s32_region_gep471 ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr272 ; GFX6-NEXT: {{ $}}73 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr074 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr175 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr276 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4, implicit $exec77 ; GFX6-NEXT: %4:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec78 ; GFX6-NEXT: $m0 = S_MOV_B32 -179 ; GFX6-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 %4, [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)80 ; GFX6-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]81 ; GFX7-LABEL: name: atomic_cmpxchg_s32_region_gep482 ; GFX7: liveins: $vgpr0, $vgpr1, $vgpr283 ; GFX7-NEXT: {{ $}}84 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr085 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr186 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr287 ; GFX7-NEXT: $m0 = S_MOV_B32 -188 ; GFX7-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 [[COPY]], [[COPY1]], [[COPY2]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)89 ; GFX7-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]90 ; GFX9-LABEL: name: atomic_cmpxchg_s32_region_gep491 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr292 ; GFX9-NEXT: {{ $}}93 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr094 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr195 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr296 ; GFX9-NEXT: [[DS_CMPST_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPST_RTN_B32 [[COPY]], [[COPY1]], [[COPY2]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)97 ; GFX9-NEXT: $vgpr0 = COPY [[DS_CMPST_RTN_B32_]]98 ; GFX11-LABEL: name: atomic_cmpxchg_s32_region_gep499 ; GFX11: liveins: $vgpr0, $vgpr1, $vgpr2100 ; GFX11-NEXT: {{ $}}101 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0102 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1103 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2104 ; GFX11-NEXT: [[DS_CMPSTORE_RTN_B32_:%[0-9]+]]:vgpr_32 = DS_CMPSTORE_RTN_B32 [[COPY]], [[COPY2]], [[COPY1]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)105 ; GFX11-NEXT: $vgpr0 = COPY [[DS_CMPSTORE_RTN_B32_]]106 %0:vgpr(p2) = COPY $vgpr0107 %1:vgpr(s32) = COPY $vgpr1108 %2:vgpr(s32) = COPY $vgpr2109 %3:vgpr(s32) = G_CONSTANT i32 4110 %4:vgpr(p2) = G_PTR_ADD %0, %3111 %5:vgpr(s32) = G_ATOMIC_CMPXCHG %4, %1, %2 :: (load store seq_cst (s32), addrspace 2)112 $vgpr0 = COPY %5113 114...115 116---117name: atomic_cmpxchg_s64_region118legalized: true119regBankSelected: true120tracksRegLiveness: true121body: |122 bb.0:123 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4124 125 ; GFX6-LABEL: name: atomic_cmpxchg_s64_region126 ; GFX6: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4127 ; GFX6-NEXT: {{ $}}128 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0129 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2130 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4131 ; GFX6-NEXT: $m0 = S_MOV_B32 -1132 ; GFX6-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)133 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]134 ; GFX7-LABEL: name: atomic_cmpxchg_s64_region135 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4136 ; GFX7-NEXT: {{ $}}137 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0138 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2139 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4140 ; GFX7-NEXT: $m0 = S_MOV_B32 -1141 ; GFX7-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)142 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]143 ; GFX9-LABEL: name: atomic_cmpxchg_s64_region144 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4145 ; GFX9-NEXT: {{ $}}146 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0147 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2148 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4149 ; GFX9-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)150 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]151 ; GFX11-LABEL: name: atomic_cmpxchg_s64_region152 ; GFX11: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4153 ; GFX11-NEXT: {{ $}}154 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0155 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2156 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4157 ; GFX11-NEXT: [[DS_CMPSTORE_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPSTORE_RTN_B64 [[COPY]], [[COPY2]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)158 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPSTORE_RTN_B64_]]159 %0:vgpr(p2) = COPY $vgpr0160 %1:vgpr(s64) = COPY $vgpr1_vgpr2161 %2:vgpr(s64) = COPY $vgpr3_vgpr4162 %3:vgpr(s64) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store seq_cst (s64), addrspace 2)163 $vgpr0_vgpr1 = COPY %3164 165...166 167---168name: atomic_cmpxchg_s64_region_gep4169legalized: true170regBankSelected: true171tracksRegLiveness: true172body: |173 bb.0:174 liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4175 176 ; GFX6-LABEL: name: atomic_cmpxchg_s64_region_gep4177 ; GFX6: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4178 ; GFX6-NEXT: {{ $}}179 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0180 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2181 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4182 ; GFX6-NEXT: $m0 = S_MOV_B32 -1183 ; GFX6-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)184 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]185 ; GFX7-LABEL: name: atomic_cmpxchg_s64_region_gep4186 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4187 ; GFX7-NEXT: {{ $}}188 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0189 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2190 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4191 ; GFX7-NEXT: $m0 = S_MOV_B32 -1192 ; GFX7-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)193 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]194 ; GFX9-LABEL: name: atomic_cmpxchg_s64_region_gep4195 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4196 ; GFX9-NEXT: {{ $}}197 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0198 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2199 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4200 ; GFX9-NEXT: [[DS_CMPST_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPST_RTN_B64 [[COPY]], [[COPY1]], [[COPY2]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)201 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPST_RTN_B64_]]202 ; GFX11-LABEL: name: atomic_cmpxchg_s64_region_gep4203 ; GFX11: liveins: $vgpr0, $vgpr1_vgpr2, $vgpr3_vgpr4204 ; GFX11-NEXT: {{ $}}205 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0206 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2207 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4208 ; GFX11-NEXT: [[DS_CMPSTORE_RTN_B64_:%[0-9]+]]:vreg_64 = DS_CMPSTORE_RTN_B64 [[COPY]], [[COPY2]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s64), addrspace 2)209 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[DS_CMPSTORE_RTN_B64_]]210 %0:vgpr(p2) = COPY $vgpr0211 %1:vgpr(s64) = COPY $vgpr1_vgpr2212 %2:vgpr(s64) = COPY $vgpr3_vgpr4213 %3:vgpr(s32) = G_CONSTANT i32 4214 %4:vgpr(p2) = G_PTR_ADD %0, %3215 %5:vgpr(s64) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store seq_cst (s64), addrspace 2)216 $vgpr0_vgpr1 = COPY %5217 218...219