570 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s6# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX12 %s7 8---9 10name: load_atomic_flat_s32_seq_cst11legalized: true12regBankSelected: true13tracksRegLiveness: true14 15body: |16 bb.0:17 liveins: $vgpr0_vgpr118 19 ; GFX7-LABEL: name: load_atomic_flat_s32_seq_cst20 ; GFX7: liveins: $vgpr0_vgpr121 ; GFX7-NEXT: {{ $}}22 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr123 ; GFX7-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))24 ; GFX7-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]25 ;26 ; GFX9-LABEL: name: load_atomic_flat_s32_seq_cst27 ; GFX9: liveins: $vgpr0_vgpr128 ; GFX9-NEXT: {{ $}}29 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr130 ; GFX9-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))31 ; GFX9-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]32 ;33 ; GFX10-LABEL: name: load_atomic_flat_s32_seq_cst34 ; GFX10: liveins: $vgpr0_vgpr135 ; GFX10-NEXT: {{ $}}36 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr137 ; GFX10-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))38 ; GFX10-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]39 ;40 ; GFX11-LABEL: name: load_atomic_flat_s32_seq_cst41 ; GFX11: liveins: $vgpr0_vgpr142 ; GFX11-NEXT: {{ $}}43 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr144 ; GFX11-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))45 ; GFX11-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]46 ;47 ; GFX12-LABEL: name: load_atomic_flat_s32_seq_cst48 ; GFX12: liveins: $vgpr0_vgpr149 ; GFX12-NEXT: {{ $}}50 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr151 ; GFX12-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))52 ; GFX12-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]53 %0:vgpr(p0) = COPY $vgpr0_vgpr154 %1:vgpr(s32) = G_LOAD %0 :: (load seq_cst (s32), align 4, addrspace 0)55 $vgpr0 = COPY %156 57...58 59---60 61name: load_atomic_flat_v2s16_seq_cst62legalized: true63regBankSelected: true64tracksRegLiveness: true65 66body: |67 bb.0:68 liveins: $vgpr0_vgpr169 70 ; GFX7-LABEL: name: load_atomic_flat_v2s16_seq_cst71 ; GFX7: liveins: $vgpr0_vgpr172 ; GFX7-NEXT: {{ $}}73 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr174 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<2 x s16>))75 ; GFX7-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)76 ;77 ; GFX9-LABEL: name: load_atomic_flat_v2s16_seq_cst78 ; GFX9: liveins: $vgpr0_vgpr179 ; GFX9-NEXT: {{ $}}80 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr181 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<2 x s16>))82 ; GFX9-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)83 ;84 ; GFX10-LABEL: name: load_atomic_flat_v2s16_seq_cst85 ; GFX10: liveins: $vgpr0_vgpr186 ; GFX10-NEXT: {{ $}}87 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr188 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<2 x s16>))89 ; GFX10-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)90 ;91 ; GFX11-LABEL: name: load_atomic_flat_v2s16_seq_cst92 ; GFX11: liveins: $vgpr0_vgpr193 ; GFX11-NEXT: {{ $}}94 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr195 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<2 x s16>))96 ; GFX11-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)97 ;98 ; GFX12-LABEL: name: load_atomic_flat_v2s16_seq_cst99 ; GFX12: liveins: $vgpr0_vgpr1100 ; GFX12-NEXT: {{ $}}101 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1102 ; GFX12-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(<2 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<2 x s16>))103 ; GFX12-NEXT: $vgpr0 = COPY [[LOAD]](<2 x s16>)104 %0:vgpr(p0) = COPY $vgpr0_vgpr1105 %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load seq_cst (<2 x s16>), align 4, addrspace 0)106 $vgpr0 = COPY %1107 108...109 110---111 112name: load_atomic_flat_p3_seq_cst113legalized: true114regBankSelected: true115tracksRegLiveness: true116 117body: |118 bb.0:119 liveins: $vgpr0_vgpr1120 121 ; GFX7-LABEL: name: load_atomic_flat_p3_seq_cst122 ; GFX7: liveins: $vgpr0_vgpr1123 ; GFX7-NEXT: {{ $}}124 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1125 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p0) :: (load seq_cst (p3))126 ; GFX7-NEXT: $vgpr0 = COPY [[LOAD]](p3)127 ;128 ; GFX9-LABEL: name: load_atomic_flat_p3_seq_cst129 ; GFX9: liveins: $vgpr0_vgpr1130 ; GFX9-NEXT: {{ $}}131 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1132 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p0) :: (load seq_cst (p3))133 ; GFX9-NEXT: $vgpr0 = COPY [[LOAD]](p3)134 ;135 ; GFX10-LABEL: name: load_atomic_flat_p3_seq_cst136 ; GFX10: liveins: $vgpr0_vgpr1137 ; GFX10-NEXT: {{ $}}138 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1139 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p0) :: (load seq_cst (p3))140 ; GFX10-NEXT: $vgpr0 = COPY [[LOAD]](p3)141 ;142 ; GFX11-LABEL: name: load_atomic_flat_p3_seq_cst143 ; GFX11: liveins: $vgpr0_vgpr1144 ; GFX11-NEXT: {{ $}}145 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1146 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p0) :: (load seq_cst (p3))147 ; GFX11-NEXT: $vgpr0 = COPY [[LOAD]](p3)148 ;149 ; GFX12-LABEL: name: load_atomic_flat_p3_seq_cst150 ; GFX12: liveins: $vgpr0_vgpr1151 ; GFX12-NEXT: {{ $}}152 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1153 ; GFX12-NEXT: [[LOAD:%[0-9]+]]:vgpr_32(p3) = G_LOAD [[COPY]](p0) :: (load seq_cst (p3))154 ; GFX12-NEXT: $vgpr0 = COPY [[LOAD]](p3)155 %0:vgpr(p0) = COPY $vgpr0_vgpr1156 %1:vgpr(p3) = G_LOAD %0 :: (load seq_cst (p3), align 4, addrspace 0)157 $vgpr0 = COPY %1158 159...160 161---162 163name: load_atomic_flat_s64_seq_cst164legalized: true165regBankSelected: true166tracksRegLiveness: true167 168body: |169 bb.0:170 liveins: $vgpr0_vgpr1171 172 ; GFX7-LABEL: name: load_atomic_flat_s64_seq_cst173 ; GFX7: liveins: $vgpr0_vgpr1174 ; GFX7-NEXT: {{ $}}175 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1176 ; GFX7-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s64))177 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]178 ;179 ; GFX9-LABEL: name: load_atomic_flat_s64_seq_cst180 ; GFX9: liveins: $vgpr0_vgpr1181 ; GFX9-NEXT: {{ $}}182 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1183 ; GFX9-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s64))184 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]185 ;186 ; GFX10-LABEL: name: load_atomic_flat_s64_seq_cst187 ; GFX10: liveins: $vgpr0_vgpr1188 ; GFX10-NEXT: {{ $}}189 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1190 ; GFX10-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s64))191 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]192 ;193 ; GFX11-LABEL: name: load_atomic_flat_s64_seq_cst194 ; GFX11: liveins: $vgpr0_vgpr1195 ; GFX11-NEXT: {{ $}}196 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1197 ; GFX11-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s64))198 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]199 ;200 ; GFX12-LABEL: name: load_atomic_flat_s64_seq_cst201 ; GFX12: liveins: $vgpr0_vgpr1202 ; GFX12-NEXT: {{ $}}203 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1204 ; GFX12-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s64))205 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]206 %0:vgpr(p0) = COPY $vgpr0_vgpr1207 %1:vgpr(s64) = G_LOAD %0 :: (load seq_cst (s64), align 8, addrspace 0)208 $vgpr0_vgpr1 = COPY %1209 210...211 212---213 214name: load_atomic_flat_v2s32_seq_cst215legalized: true216regBankSelected: true217tracksRegLiveness: true218 219body: |220 bb.0:221 liveins: $vgpr0_vgpr1222 223 ; GFX7-LABEL: name: load_atomic_flat_v2s32_seq_cst224 ; GFX7: liveins: $vgpr0_vgpr1225 ; GFX7-NEXT: {{ $}}226 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1227 ; GFX7-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (<2 x s32>))228 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]229 ;230 ; GFX9-LABEL: name: load_atomic_flat_v2s32_seq_cst231 ; GFX9: liveins: $vgpr0_vgpr1232 ; GFX9-NEXT: {{ $}}233 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1234 ; GFX9-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (<2 x s32>))235 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]236 ;237 ; GFX10-LABEL: name: load_atomic_flat_v2s32_seq_cst238 ; GFX10: liveins: $vgpr0_vgpr1239 ; GFX10-NEXT: {{ $}}240 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1241 ; GFX10-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (<2 x s32>))242 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]243 ;244 ; GFX11-LABEL: name: load_atomic_flat_v2s32_seq_cst245 ; GFX11: liveins: $vgpr0_vgpr1246 ; GFX11-NEXT: {{ $}}247 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1248 ; GFX11-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (<2 x s32>))249 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]250 ;251 ; GFX12-LABEL: name: load_atomic_flat_v2s32_seq_cst252 ; GFX12: liveins: $vgpr0_vgpr1253 ; GFX12-NEXT: {{ $}}254 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1255 ; GFX12-NEXT: [[FLAT_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = FLAT_LOAD_DWORDX2 [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (<2 x s32>))256 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[FLAT_LOAD_DWORDX2_]]257 %0:vgpr(p0) = COPY $vgpr0_vgpr1258 %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load seq_cst (<2 x s32>), align 8, addrspace 0)259 $vgpr0_vgpr1 = COPY %1260 261...262 263---264 265name: load_atomic_flat_v4s16_seq_cst266legalized: true267regBankSelected: true268tracksRegLiveness: true269 270body: |271 bb.0:272 liveins: $vgpr0_vgpr1273 274 ; GFX7-LABEL: name: load_atomic_flat_v4s16_seq_cst275 ; GFX7: liveins: $vgpr0_vgpr1276 ; GFX7-NEXT: {{ $}}277 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1278 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<4 x s16>))279 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)280 ;281 ; GFX9-LABEL: name: load_atomic_flat_v4s16_seq_cst282 ; GFX9: liveins: $vgpr0_vgpr1283 ; GFX9-NEXT: {{ $}}284 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1285 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<4 x s16>))286 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)287 ;288 ; GFX10-LABEL: name: load_atomic_flat_v4s16_seq_cst289 ; GFX10: liveins: $vgpr0_vgpr1290 ; GFX10-NEXT: {{ $}}291 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1292 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<4 x s16>))293 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)294 ;295 ; GFX11-LABEL: name: load_atomic_flat_v4s16_seq_cst296 ; GFX11: liveins: $vgpr0_vgpr1297 ; GFX11-NEXT: {{ $}}298 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1299 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<4 x s16>))300 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)301 ;302 ; GFX12-LABEL: name: load_atomic_flat_v4s16_seq_cst303 ; GFX12: liveins: $vgpr0_vgpr1304 ; GFX12-NEXT: {{ $}}305 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1306 ; GFX12-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<4 x s16>) = G_LOAD [[COPY]](p0) :: (load seq_cst (<4 x s16>))307 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<4 x s16>)308 %0:vgpr(p0) = COPY $vgpr0_vgpr1309 %1:vgpr(<4 x s16>) = G_LOAD %0 :: (load seq_cst (<4 x s16>), align 8, addrspace 0)310 $vgpr0_vgpr1 = COPY %1311 312...313 314---315 316name: load_atomic_flat_p1_seq_cst317legalized: true318regBankSelected: true319tracksRegLiveness: true320 321body: |322 bb.0:323 liveins: $vgpr0_vgpr1324 325 ; GFX7-LABEL: name: load_atomic_flat_p1_seq_cst326 ; GFX7: liveins: $vgpr0_vgpr1327 ; GFX7-NEXT: {{ $}}328 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1329 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p0) :: (load seq_cst (p1))330 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)331 ;332 ; GFX9-LABEL: name: load_atomic_flat_p1_seq_cst333 ; GFX9: liveins: $vgpr0_vgpr1334 ; GFX9-NEXT: {{ $}}335 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1336 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p0) :: (load seq_cst (p1))337 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)338 ;339 ; GFX10-LABEL: name: load_atomic_flat_p1_seq_cst340 ; GFX10: liveins: $vgpr0_vgpr1341 ; GFX10-NEXT: {{ $}}342 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1343 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p0) :: (load seq_cst (p1))344 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)345 ;346 ; GFX11-LABEL: name: load_atomic_flat_p1_seq_cst347 ; GFX11: liveins: $vgpr0_vgpr1348 ; GFX11-NEXT: {{ $}}349 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1350 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p0) :: (load seq_cst (p1))351 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)352 ;353 ; GFX12-LABEL: name: load_atomic_flat_p1_seq_cst354 ; GFX12: liveins: $vgpr0_vgpr1355 ; GFX12-NEXT: {{ $}}356 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1357 ; GFX12-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p0) :: (load seq_cst (p1))358 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)359 %0:vgpr(p0) = COPY $vgpr0_vgpr1360 %1:vgpr(p1) = G_LOAD %0 :: (load seq_cst (p1), align 8, addrspace 0)361 $vgpr0_vgpr1 = COPY %1362 363...364 365---366 367name: load_atomic_flat_p0_seq_cst368legalized: true369regBankSelected: true370tracksRegLiveness: true371 372body: |373 bb.0:374 liveins: $vgpr0_vgpr1375 376 ; GFX7-LABEL: name: load_atomic_flat_p0_seq_cst377 ; GFX7: liveins: $vgpr0_vgpr1378 ; GFX7-NEXT: {{ $}}379 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1380 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p0) :: (load seq_cst (p0))381 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)382 ;383 ; GFX9-LABEL: name: load_atomic_flat_p0_seq_cst384 ; GFX9: liveins: $vgpr0_vgpr1385 ; GFX9-NEXT: {{ $}}386 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1387 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p0) :: (load seq_cst (p0))388 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)389 ;390 ; GFX10-LABEL: name: load_atomic_flat_p0_seq_cst391 ; GFX10: liveins: $vgpr0_vgpr1392 ; GFX10-NEXT: {{ $}}393 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1394 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p0) :: (load seq_cst (p0))395 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)396 ;397 ; GFX11-LABEL: name: load_atomic_flat_p0_seq_cst398 ; GFX11: liveins: $vgpr0_vgpr1399 ; GFX11-NEXT: {{ $}}400 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1401 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p0) :: (load seq_cst (p0))402 ; GFX11-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)403 ;404 ; GFX12-LABEL: name: load_atomic_flat_p0_seq_cst405 ; GFX12: liveins: $vgpr0_vgpr1406 ; GFX12-NEXT: {{ $}}407 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1408 ; GFX12-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p0) = G_LOAD [[COPY]](p0) :: (load seq_cst (p0))409 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p0)410 %0:vgpr(p0) = COPY $vgpr0_vgpr1411 %1:vgpr(p0) = G_LOAD %0 :: (load seq_cst (p0), align 8, addrspace 0)412 $vgpr0_vgpr1 = COPY %1413 414...415 416---417 418name: load_atomic_flat_s32_seq_cst_gep_m2048419legalized: true420regBankSelected: true421tracksRegLiveness: true422 423body: |424 bb.0:425 liveins: $vgpr0_vgpr1426 427 ; GFX7-LABEL: name: load_atomic_flat_s32_seq_cst_gep_m2048428 ; GFX7: liveins: $vgpr0_vgpr1429 ; GFX7-NEXT: {{ $}}430 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1431 ; GFX7-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO -2048, implicit $exec432 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0433 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0434 ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1435 ; GFX7-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1436 ; GFX7-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec437 ; GFX7-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec438 ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1439 ; GFX7-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))440 ; GFX7-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]441 ;442 ; GFX9-LABEL: name: load_atomic_flat_s32_seq_cst_gep_m2048443 ; GFX9: liveins: $vgpr0_vgpr1444 ; GFX9-NEXT: {{ $}}445 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1446 ; GFX9-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO -2048, implicit $exec447 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0448 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0449 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1450 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1451 ; GFX9-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec452 ; GFX9-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec453 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1454 ; GFX9-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))455 ; GFX9-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]456 ;457 ; GFX10-LABEL: name: load_atomic_flat_s32_seq_cst_gep_m2048458 ; GFX10: liveins: $vgpr0_vgpr1459 ; GFX10-NEXT: {{ $}}460 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1461 ; GFX10-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO -2048, implicit $exec462 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0463 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0464 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1465 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1466 ; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec467 ; GFX10-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec468 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1469 ; GFX10-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))470 ; GFX10-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]471 ;472 ; GFX11-LABEL: name: load_atomic_flat_s32_seq_cst_gep_m2048473 ; GFX11: liveins: $vgpr0_vgpr1474 ; GFX11-NEXT: {{ $}}475 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1476 ; GFX11-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO -2048, implicit $exec477 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0478 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0479 ; GFX11-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1480 ; GFX11-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1481 ; GFX11-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec482 ; GFX11-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec483 ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1484 ; GFX11-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))485 ; GFX11-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]486 ;487 ; GFX12-LABEL: name: load_atomic_flat_s32_seq_cst_gep_m2048488 ; GFX12: liveins: $vgpr0_vgpr1489 ; GFX12-NEXT: {{ $}}490 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1491 ; GFX12-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], -2048, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))492 ; GFX12-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]493 %0:vgpr(p0) = COPY $vgpr0_vgpr1494 %1:vgpr(s64) = G_CONSTANT i64 -2048495 %2:vgpr(p0) = inbounds G_PTR_ADD %0, %1496 %3:vgpr(s32) = G_LOAD %2 :: (load seq_cst (s32), align 4, addrspace 0)497 $vgpr0 = COPY %3498 499...500 501---502 503name: load_atomic_flat_s32_seq_cst_gep_4095504legalized: true505regBankSelected: true506tracksRegLiveness: true507 508body: |509 bb.0:510 liveins: $vgpr0_vgpr1511 512 ; GFX7-LABEL: name: load_atomic_flat_s32_seq_cst_gep_4095513 ; GFX7: liveins: $vgpr0_vgpr1514 ; GFX7-NEXT: {{ $}}515 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1516 ; GFX7-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO 4095, implicit $exec517 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0518 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0519 ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1520 ; GFX7-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1521 ; GFX7-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec522 ; GFX7-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec523 ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1524 ; GFX7-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))525 ; GFX7-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]526 ;527 ; GFX9-LABEL: name: load_atomic_flat_s32_seq_cst_gep_4095528 ; GFX9: liveins: $vgpr0_vgpr1529 ; GFX9-NEXT: {{ $}}530 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1531 ; GFX9-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 4095, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))532 ; GFX9-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]533 ;534 ; GFX10-LABEL: name: load_atomic_flat_s32_seq_cst_gep_4095535 ; GFX10: liveins: $vgpr0_vgpr1536 ; GFX10-NEXT: {{ $}}537 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1538 ; GFX10-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO 4095, implicit $exec539 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0540 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0541 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1542 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1543 ; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[COPY2]], 0, implicit $exec544 ; GFX10-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY3]], [[COPY4]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec545 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1546 ; GFX10-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[REG_SEQUENCE]], 0, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))547 ; GFX10-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]548 ;549 ; GFX11-LABEL: name: load_atomic_flat_s32_seq_cst_gep_4095550 ; GFX11: liveins: $vgpr0_vgpr1551 ; GFX11-NEXT: {{ $}}552 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1553 ; GFX11-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 4095, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))554 ; GFX11-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]555 ;556 ; GFX12-LABEL: name: load_atomic_flat_s32_seq_cst_gep_4095557 ; GFX12: liveins: $vgpr0_vgpr1558 ; GFX12-NEXT: {{ $}}559 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1560 ; GFX12-NEXT: [[FLAT_LOAD_DWORD:%[0-9]+]]:vgpr_32 = FLAT_LOAD_DWORD [[COPY]], 4095, 0, implicit $exec, implicit $flat_scr :: (load seq_cst (s32))561 ; GFX12-NEXT: $vgpr0 = COPY [[FLAT_LOAD_DWORD]]562 %0:vgpr(p0) = COPY $vgpr0_vgpr1563 %1:vgpr(s64) = G_CONSTANT i64 4095564 %2:vgpr(p0) = inbounds G_PTR_ADD %0, %1565 %3:vgpr(s32) = G_LOAD %2 :: (load seq_cst (s32), align 4, addrspace 0)566 $vgpr0 = COPY %3567 568...569 570