1# RUN: llc -march=amdgcn -mcpu=gfx908 -start-before=greedy -stop-after=virtregrewriter -verify-machineinstrs -o - %s | FileCheck --check-prefixes=GCN,GFX908 %s 2 3--- 4# GCN-LABEL: name: alloc_vgpr_64 5# GFX908: $vgpr3_vgpr4 = GLOBAL_LOAD 6name: alloc_vgpr_64 7tracksRegLiveness: true 8liveins: 9 - { reg: '$vgpr0_vgpr1' } 10 - { reg: '$vgpr2' } 11body: | 12 bb.0: 13 liveins: $vgpr0_vgpr1, $vgpr2 14 15 %0:vreg_64 = COPY $vgpr0_vgpr1 16 %1:vgpr_32 = COPY $vgpr2 17 %2:vreg_64 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, implicit $exec 18 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 19 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 20... 21 22--- 23# GCN-LABEL: name: alloc_vgpr_96 24# GFX908: $vgpr3_vgpr4_vgpr5 = GLOBAL_LOAD 25name: alloc_vgpr_96 26tracksRegLiveness: true 27liveins: 28 - { reg: '$vgpr0_vgpr1' } 29 - { reg: '$vgpr2' } 30body: | 31 bb.0: 32 liveins: $vgpr0_vgpr1, $vgpr2 33 34 %0:vreg_64 = COPY $vgpr0_vgpr1 35 %1:vgpr_32 = COPY $vgpr2 36 %2:vreg_96 = GLOBAL_LOAD_DWORDX3 %0, 0, 0, implicit $exec 37 GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec 38 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 39... 40 41--- 42# GCN-LABEL: name: alloc_vgpr_128 43# GFX908: $vgpr3_vgpr4_vgpr5_vgpr6 = GLOBAL_LOAD 44name: alloc_vgpr_128 45tracksRegLiveness: true 46liveins: 47 - { reg: '$vgpr0_vgpr1' } 48 - { reg: '$vgpr2' } 49body: | 50 bb.0: 51 liveins: $vgpr0_vgpr1, $vgpr2 52 53 %0:vreg_64 = COPY $vgpr0_vgpr1 54 %1:vgpr_32 = COPY $vgpr2 55 %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, implicit $exec 56 GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec 57 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 58... 59 60--- 61# GCN-LABEL: name: alloc_vgpr_160 62# GFX908: $vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = IMAGE_LOAD 63name: alloc_vgpr_160 64tracksRegLiveness: true 65liveins: 66 - { reg: '$vgpr0_vgpr1' } 67 - { reg: '$vgpr2' } 68body: | 69 bb.0: 70 liveins: $vgpr0_vgpr1, $vgpr2 71 72 %0:vreg_64 = COPY $vgpr0_vgpr1 73 %1:vgpr_32 = COPY $vgpr2 74 %2:vreg_160 = IMAGE_LOAD_V5_V1 %1, undef %3:sgpr_256, 0, 0, 0, 0, 0, 1, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 75 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 76 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 77... 78 79--- 80# GCN-LABEL: name: alloc_vgpr_256 81# GFX908: $vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10 = COPY 82name: alloc_vgpr_256 83tracksRegLiveness: true 84liveins: 85 - { reg: '$vgpr0_vgpr1' } 86 - { reg: '$vgpr2' } 87body: | 88 bb.0: 89 liveins: $vgpr0_vgpr1, $vgpr2 90 91 %0:vreg_64 = COPY $vgpr0_vgpr1 92 %1:vgpr_32 = COPY $vgpr2 93 %3:sgpr_256 = IMPLICIT_DEF 94 %2:vreg_256 = COPY %3:sgpr_256 95 %4:vreg_128 = IMAGE_SAMPLE_C_CL_O_V4_V8 %2, %3:sgpr_256, undef %5:sgpr_128, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 96 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 97 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 98... 99 100--- 101# GCN-LABEL: name: alloc_vgpr_512 102# GFX908: $vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18 = IMPLICIT_DEF 103name: alloc_vgpr_512 104tracksRegLiveness: true 105liveins: 106 - { reg: '$vgpr0_vgpr1' } 107 - { reg: '$vgpr2' } 108body: | 109 bb.0: 110 liveins: $vgpr0_vgpr1, $vgpr2 111 112 %0:vreg_64 = COPY $vgpr0_vgpr1 113 %1:vgpr_32 = COPY $vgpr2 114 %2:vreg_512 = IMPLICIT_DEF 115 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 116 GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec 117 GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec 118 GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec 119 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 120... 121 122--- 123# GCN-LABEL: name: alloc_vgpr_1024 124# GFX908: $vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31_vgpr32_vgpr33_vgpr34 = IMPLICIT_DEF 125name: alloc_vgpr_1024 126tracksRegLiveness: true 127liveins: 128 - { reg: '$vgpr0_vgpr1' } 129 - { reg: '$vgpr2' } 130body: | 131 bb.0: 132 liveins: $vgpr0_vgpr1, $vgpr2 133 134 %0:vreg_64 = COPY $vgpr0_vgpr1 135 %1:vgpr_32 = COPY $vgpr2 136 %2:vreg_1024 = IMPLICIT_DEF 137 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 138 GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec 139 GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec 140 GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec 141 GLOBAL_STORE_DWORDX4 %0, %2.sub16_sub17_sub18_sub19, 0, 0, implicit $exec 142 GLOBAL_STORE_DWORDX4 %0, %2.sub20_sub21_sub22_sub23, 0, 0, implicit $exec 143 GLOBAL_STORE_DWORDX4 %0, %2.sub24_sub25_sub26_sub27, 0, 0, implicit $exec 144 GLOBAL_STORE_DWORDX4 %0, %2.sub28_sub29_sub30_sub31, 0, 0, implicit $exec 145 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 146... 147 148--- 149# GCN-LABEL: name: alloc_agpr_64 150# GFX908: $agpr1_agpr2 = IMPLICIT_DEF 151name: alloc_agpr_64 152tracksRegLiveness: true 153liveins: 154 - { reg: '$vgpr0_vgpr1' } 155 - { reg: '$agpr0' } 156body: | 157 bb.0: 158 liveins: $vgpr0_vgpr1, $agpr0 159 160 %0:vreg_64 = COPY $vgpr0_vgpr1 161 %3:areg_64 = IMPLICIT_DEF 162 %2:vreg_64 = COPY %3:areg_64 163 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 164 %1:vgpr_32 = COPY $agpr0 165 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 166... 167 168--- 169# GCN-LABEL: name: alloc_agpr_128 170# GFX908: $agpr1_agpr2_agpr3_agpr4 = IMPLICIT_DEF 171name: alloc_agpr_128 172tracksRegLiveness: true 173liveins: 174 - { reg: '$vgpr0_vgpr1' } 175 - { reg: '$agpr0' } 176body: | 177 bb.0: 178 liveins: $vgpr0_vgpr1, $agpr0 179 180 %0:vreg_64 = COPY $vgpr0_vgpr1 181 %3:areg_128 = IMPLICIT_DEF 182 %2:vreg_128 = COPY %3:areg_128 183 GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec 184 %1:vgpr_32 = COPY $agpr0 185 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 186... 187 188--- 189# GCN-LABEL: name: alloc_agpr_512 190# GFX908: $agpr1_agpr2_agpr3_agpr4_agpr5_agpr6_agpr7_agpr8_agpr9_agpr10_agpr11_agpr12_agpr13_agpr14_agpr15_agpr16 = IMPLICIT_DEF 191name: alloc_agpr_512 192tracksRegLiveness: true 193liveins: 194 - { reg: '$vgpr0_vgpr1' } 195 - { reg: '$agpr0' } 196body: | 197 bb.0: 198 liveins: $vgpr0_vgpr1, $agpr0 199 200 %0:vreg_64 = COPY $vgpr0_vgpr1 201 %3:areg_512 = IMPLICIT_DEF 202 %2:vreg_512 = COPY %3:areg_512 203 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 204 GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec 205 GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec 206 GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec 207 %1:vgpr_32 = COPY $agpr0 208 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 209... 210 211--- 212# GCN-LABEL: name: alloc_agpr_1024 213# GFX908: $agpr1_agpr2_agpr3_agpr4_agpr5_agpr6_agpr7_agpr8_agpr9_agpr10_agpr11_agpr12_agpr13_agpr14_agpr15_agpr16_agpr17_agpr18_agpr19_agpr20_agpr21_agpr22_agpr23_agpr24_agpr25_agpr26_agpr27_agpr28_agpr29_agpr30_agpr31_agpr32 = IMPLICIT_DEF 214name: alloc_agpr_1024 215tracksRegLiveness: true 216liveins: 217 - { reg: '$vgpr0_vgpr1' } 218 - { reg: '$agpr0' } 219body: | 220 bb.0: 221 liveins: $vgpr0_vgpr1, $agpr0 222 223 %0:vreg_64 = COPY $vgpr0_vgpr1 224 %3:areg_1024 = IMPLICIT_DEF 225 %2:vreg_1024 = COPY %3:areg_1024 226 GLOBAL_STORE_DWORDX4 %0, %2.sub0_sub1_sub2_sub3, 0, 0, implicit $exec 227 GLOBAL_STORE_DWORDX4 %0, %2.sub4_sub5_sub6_sub7, 0, 0, implicit $exec 228 GLOBAL_STORE_DWORDX4 %0, %2.sub8_sub9_sub10_sub11, 0, 0, implicit $exec 229 GLOBAL_STORE_DWORDX4 %0, %2.sub12_sub13_sub14_sub15, 0, 0, implicit $exec 230 GLOBAL_STORE_DWORDX4 %0, %2.sub16_sub17_sub18_sub19, 0, 0, implicit $exec 231 GLOBAL_STORE_DWORDX4 %0, %2.sub20_sub21_sub22_sub23, 0, 0, implicit $exec 232 GLOBAL_STORE_DWORDX4 %0, %2.sub24_sub25_sub26_sub27, 0, 0, implicit $exec 233 GLOBAL_STORE_DWORDX4 %0, %2.sub28_sub29_sub30_sub31, 0, 0, implicit $exec 234 %1:vgpr_32 = COPY $agpr0 235 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec 236... 237