1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s 3# RUN: llc -mtriple=amdgcn -mcpu=hawaii -mattr=+flat-for-global -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7-FLAT %s 4# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s 5# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s 7# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s 8# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s 9 10# 96-bit load/store is only legal for SI, so split the test out. 11 12--- 13 14name: store_global_v3s32 15legalized: true 16tracksRegLiveness: true 17regBankSelected: true 18 19body: | 20 bb.0: 21 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 22 23 ; GFX7-LABEL: name: store_global_v3s32 24 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 25 ; GFX7-NEXT: {{ $}} 26 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 27 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 28 ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0 29 ; GFX7-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440 30 ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1 31 ; GFX7-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0 32 ; GFX7-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3 33 ; GFX7-NEXT: BUFFER_STORE_DWORDX3_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1) 34 ; GFX7-FLAT-LABEL: name: store_global_v3s32 35 ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 36 ; GFX7-FLAT-NEXT: {{ $}} 37 ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 38 ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 39 ; GFX7-FLAT-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16, addrspace 1) 40 ; GFX8-LABEL: name: store_global_v3s32 41 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 42 ; GFX8-NEXT: {{ $}} 43 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 44 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 45 ; GFX8-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16, addrspace 1) 46 ; GFX9-LABEL: name: store_global_v3s32 47 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 48 ; GFX9-NEXT: {{ $}} 49 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 50 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 51 ; GFX9-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1) 52 ; GFX10-LABEL: name: store_global_v3s32 53 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 54 ; GFX10-NEXT: {{ $}} 55 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 56 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 57 ; GFX10-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1) 58 %0:vgpr(p1) = COPY $vgpr0_vgpr1 59 %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4 60 G_STORE %1, %0 :: (store (<3 x s32>), align 16, addrspace 1) 61 62... 63 64--- 65 66name: store_global_s96 67legalized: true 68tracksRegLiveness: true 69regBankSelected: true 70 71body: | 72 bb.0: 73 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 74 75 ; GFX7-LABEL: name: store_global_s96 76 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 77 ; GFX7-NEXT: {{ $}} 78 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 79 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 80 ; GFX7-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1) 81 ; GFX7-FLAT-LABEL: name: store_global_s96 82 ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 83 ; GFX7-FLAT-NEXT: {{ $}} 84 ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 85 ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 86 ; GFX7-FLAT-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1) 87 ; GFX8-LABEL: name: store_global_s96 88 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 89 ; GFX8-NEXT: {{ $}} 90 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 91 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 92 ; GFX8-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1) 93 ; GFX9-LABEL: name: store_global_s96 94 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 95 ; GFX9-NEXT: {{ $}} 96 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 97 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 98 ; GFX9-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1) 99 ; GFX10-LABEL: name: store_global_s96 100 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 101 ; GFX10-NEXT: {{ $}} 102 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 103 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 104 ; GFX10-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1) 105 %0:vgpr(p1) = COPY $vgpr0_vgpr1 106 %1:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 107 G_STORE %1, %0 :: (store (s96), align 16, addrspace 1) 108 109... 110 111--- 112 113name: store_global_v6s16 114legalized: true 115tracksRegLiveness: true 116regBankSelected: true 117 118body: | 119 bb.0: 120 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 121 122 ; GFX7-LABEL: name: store_global_v6s16 123 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 124 ; GFX7-NEXT: {{ $}} 125 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 126 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 127 ; GFX7-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1) 128 ; GFX7-FLAT-LABEL: name: store_global_v6s16 129 ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 130 ; GFX7-FLAT-NEXT: {{ $}} 131 ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 132 ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 133 ; GFX7-FLAT-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1) 134 ; GFX8-LABEL: name: store_global_v6s16 135 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 136 ; GFX8-NEXT: {{ $}} 137 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 138 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 139 ; GFX8-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1) 140 ; GFX9-LABEL: name: store_global_v6s16 141 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 142 ; GFX9-NEXT: {{ $}} 143 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 144 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 145 ; GFX9-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1) 146 ; GFX10-LABEL: name: store_global_v6s16 147 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 148 ; GFX10-NEXT: {{ $}} 149 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 150 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 151 ; GFX10-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1) 152 %0:vgpr(p1) = COPY $vgpr0_vgpr1 153 %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 154 G_STORE %1, %0 :: (store (<6 x s16>), align 16, addrspace 1) 155 156... 157