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