1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck --check-prefix=GFX90A %s 3 4# Should fold only the aligned agpr copies with their uses. 5 6--- 7name: aligned_agpr_64 8tracksRegLiveness: true 9body: | 10 bb.0: 11 liveins: $vgpr0_vgpr1 12 ; GFX90A-LABEL: name: aligned_agpr_64 13 ; GFX90A: liveins: $vgpr0_vgpr1 14 ; GFX90A-NEXT: {{ $}} 15 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 16 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_64_align2 = IMPLICIT_DEF 17 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]], 0, 0, implicit $exec 18 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 19 %1:areg_64_align2 = IMPLICIT_DEF 20 %2:areg_64_align2 = COPY killed %1 21 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 22... 23 24--- 25name: unaligned_agpr_64 26tracksRegLiveness: true 27body: | 28 bb.0: 29 liveins: $vgpr0_vgpr1 30 ; GFX90A-LABEL: name: unaligned_agpr_64 31 ; GFX90A: liveins: $vgpr0_vgpr1 32 ; GFX90A-NEXT: {{ $}} 33 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 34 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_64 = IMPLICIT_DEF 35 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_64_align2 = COPY killed [[DEF]] 36 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec 37 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 38 %1:areg_64 = IMPLICIT_DEF 39 %2:areg_64_align2 = COPY killed %1 40 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 41... 42 43--- 44name: aligned_agpr_96_sub0_subg1 45tracksRegLiveness: true 46body: | 47 bb.0: 48 liveins: $vgpr0_vgpr1 49 ; GFX90A-LABEL: name: aligned_agpr_96_sub0_subg1 50 ; GFX90A: liveins: $vgpr0_vgpr1 51 ; GFX90A-NEXT: {{ $}} 52 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 53 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_96_align2 = IMPLICIT_DEF 54 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec 55 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 56 %1:areg_96_align2 = IMPLICIT_DEF 57 %2:areg_64_align2 = COPY killed %1.sub0_sub1:areg_96_align2 58 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 59... 60 61--- 62name: unaligned_agpr_96_sub1_sub2 63tracksRegLiveness: true 64body: | 65 bb.0: 66 liveins: $vgpr0_vgpr1 67 ; GFX90A-LABEL: name: unaligned_agpr_96_sub1_sub2 68 ; GFX90A: liveins: $vgpr0_vgpr1 69 ; GFX90A-NEXT: {{ $}} 70 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 71 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_96_align2 = IMPLICIT_DEF 72 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_64_align2 = COPY killed [[DEF]].sub1_sub2 73 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec 74 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 75 %1:areg_96_align2 = IMPLICIT_DEF 76 %2:areg_64_align2 = COPY killed %1.sub1_sub2:areg_96_align2 77 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 78... 79 80--- 81name: aligned_agpr_96 82tracksRegLiveness: true 83body: | 84 bb.0: 85 liveins: $vgpr0_vgpr1 86 ; GFX90A-LABEL: name: aligned_agpr_96 87 ; GFX90A: liveins: $vgpr0_vgpr1 88 ; GFX90A-NEXT: {{ $}} 89 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 90 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_96_align2 = IMPLICIT_DEF 91 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]], 0, 0, implicit $exec 92 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 93 %1:areg_96_align2 = IMPLICIT_DEF 94 %2:areg_96_align2 = COPY killed %1 95 GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec 96... 97 98--- 99name: unaligned_agpr_96 100tracksRegLiveness: true 101body: | 102 bb.0: 103 liveins: $vgpr0_vgpr1 104 ; GFX90A-LABEL: name: unaligned_agpr_96 105 ; GFX90A: liveins: $vgpr0_vgpr1 106 ; GFX90A-NEXT: {{ $}} 107 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 108 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_96 = IMPLICIT_DEF 109 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_96_align2 = COPY killed [[DEF]] 110 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec 111 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 112 %1:areg_96 = IMPLICIT_DEF 113 %2:areg_96_align2 = COPY killed %1 114 GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec 115... 116 117--- 118name: aligned_agpr_128_sub0_sub1 119tracksRegLiveness: true 120body: | 121 bb.0: 122 liveins: $vgpr0_vgpr1 123 ; GFX90A-LABEL: name: aligned_agpr_128_sub0_sub1 124 ; GFX90A: liveins: $vgpr0_vgpr1 125 ; GFX90A-NEXT: {{ $}} 126 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 127 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 128 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec 129 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 130 %1:areg_128_align2 = IMPLICIT_DEF 131 %2:areg_64_align2 = COPY killed %1.sub0_sub1:areg_128_align2 132 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 133... 134 135--- 136name: aligned_agpr_128_sub2_sub3 137tracksRegLiveness: true 138body: | 139 bb.0: 140 liveins: $vgpr0_vgpr1 141 ; GFX90A-LABEL: name: aligned_agpr_128_sub2_sub3 142 ; GFX90A: liveins: $vgpr0_vgpr1 143 ; GFX90A-NEXT: {{ $}} 144 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 145 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 146 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub2_sub3, 0, 0, implicit $exec 147 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 148 %1:areg_128_align2 = IMPLICIT_DEF 149 %2:areg_64_align2 = COPY killed %1.sub2_sub3:areg_128_align2 150 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 151... 152 153--- 154name: unaligned_agpr_128_sub1_sub2 155tracksRegLiveness: true 156body: | 157 bb.0: 158 liveins: $vgpr0_vgpr1 159 ; GFX90A-LABEL: name: unaligned_agpr_128_sub1_sub2 160 ; GFX90A: liveins: $vgpr0_vgpr1 161 ; GFX90A-NEXT: {{ $}} 162 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 163 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 164 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_64_align2 = COPY killed [[DEF]].sub1_sub2 165 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec 166 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 167 %1:areg_128_align2 = IMPLICIT_DEF 168 %2:areg_64_align2 = COPY killed %1.sub1_sub2:areg_128_align2 169 GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec 170... 171 172--- 173name: aligned_agpr_128_sub0_sub1_sub2 174tracksRegLiveness: true 175body: | 176 bb.0: 177 liveins: $vgpr0_vgpr1 178 ; GFX90A-LABEL: name: aligned_agpr_128_sub0_sub1_sub2 179 ; GFX90A: liveins: $vgpr0_vgpr1 180 ; GFX90A-NEXT: {{ $}} 181 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 182 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 183 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]].sub0_sub1_sub2, 0, 0, implicit $exec 184 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 185 %1:areg_128_align2 = IMPLICIT_DEF 186 %2:areg_96_align2 = COPY killed %1.sub0_sub1_sub2:areg_128_align2 187 GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec 188... 189 190--- 191name: unaligned_agpr_128_sub1_sub2_sub3 192tracksRegLiveness: true 193body: | 194 bb.0: 195 liveins: $vgpr0_vgpr1 196 ; GFX90A-LABEL: name: unaligned_agpr_128_sub1_sub2_sub3 197 ; GFX90A: liveins: $vgpr0_vgpr1 198 ; GFX90A-NEXT: {{ $}} 199 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 200 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 201 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_96_align2 = COPY killed [[DEF]].sub1_sub2_sub3 202 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec 203 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 204 %1:areg_128_align2 = IMPLICIT_DEF 205 %2:areg_96_align2 = COPY killed %1.sub1_sub2_sub3:areg_128_align2 206 GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec 207... 208 209--- 210name: aligned_agpr_128 211tracksRegLiveness: true 212body: | 213 bb.0: 214 liveins: $vgpr0_vgpr1 215 ; GFX90A-LABEL: name: aligned_agpr_128 216 ; GFX90A: liveins: $vgpr0_vgpr1 217 ; GFX90A-NEXT: {{ $}} 218 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 219 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128_align2 = IMPLICIT_DEF 220 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[DEF]], 0, 0, implicit $exec 221 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 222 %1:areg_128_align2 = IMPLICIT_DEF 223 %2:areg_128_align2 = COPY killed %1 224 GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec 225... 226 227--- 228name: unaligned_agpr_128 229tracksRegLiveness: true 230body: | 231 bb.0: 232 liveins: $vgpr0_vgpr1 233 ; GFX90A-LABEL: name: unaligned_agpr_128 234 ; GFX90A: liveins: $vgpr0_vgpr1 235 ; GFX90A-NEXT: {{ $}} 236 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1 237 ; GFX90A-NEXT: [[DEF:%[0-9]+]]:areg_128 = IMPLICIT_DEF 238 ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:areg_128_align2 = COPY killed [[DEF]] 239 ; GFX90A-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec 240 %0:vreg_64_align2 = COPY $vgpr0_vgpr1 241 %1:areg_128 = IMPLICIT_DEF 242 %2:areg_128_align2 = COPY killed %1 243 GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec 244... 245