296 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=GCN3# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=GCN4# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=GCN5 6---7 8name: anyext_sgpr_s16_to_sgpr_s329legalized: true10regBankSelected: true11body: |12 bb.0:13 liveins: $sgpr014 15 ; GCN-LABEL: name: anyext_sgpr_s16_to_sgpr_s3216 ; GCN: liveins: $sgpr017 ; GCN-NEXT: {{ $}}18 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr019 ; GCN-NEXT: $sgpr0 = COPY [[COPY]]20 %0:sgpr(s32) = COPY $sgpr021 %1:sgpr(s16) = G_TRUNC %022 %2:sgpr(s32) = G_ANYEXT %123 $sgpr0 = COPY %224 25...26 27---28name: anyext_sgpr_s32_to_sgpr_s6429legalized: true30regBankSelected: true31tracksRegLiveness: true32body: |33 bb.0:34 liveins: $sgpr035 36 ; GCN-LABEL: name: anyext_sgpr_s32_to_sgpr_s6437 ; GCN: liveins: $sgpr038 ; GCN-NEXT: {{ $}}39 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32_xexec_hi_and_sreg_32_xm0 = COPY $sgpr040 ; GCN-NEXT: [[DEF:%[0-9]+]]:sreg_32_xm0 = IMPLICIT_DEF41 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[DEF]], %subreg.sub142 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]43 %0:sgpr(s32) = COPY $sgpr044 %1:sgpr(s64) = G_ANYEXT %045 S_ENDPGM 0, implicit %146 47...48 49---50name: anyext_sgpr_s16_to_sgpr_s6451legalized: true52regBankSelected: true53tracksRegLiveness: true54body: |55 bb.0:56 liveins: $sgpr057 58 ; GCN-LABEL: name: anyext_sgpr_s16_to_sgpr_s6459 ; GCN: liveins: $sgpr060 ; GCN-NEXT: {{ $}}61 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr062 ; GCN-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF63 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[DEF]], %subreg.sub164 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]65 %0:sgpr(s32) = COPY $sgpr066 %1:sgpr(s16) = G_TRUNC %067 %2:sgpr(s64) = G_ANYEXT %168 S_ENDPGM 0, implicit %269 70...71 72---73name: anyext_vgpr_s32_to_vgpr_s6474legalized: true75regBankSelected: true76tracksRegLiveness: true77body: |78 bb.0:79 liveins: $vgpr080 81 ; GCN-LABEL: name: anyext_vgpr_s32_to_vgpr_s6482 ; GCN: liveins: $vgpr083 ; GCN-NEXT: {{ $}}84 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr085 ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF86 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[DEF]], %subreg.sub187 ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]88 %0:vgpr(s32) = COPY $vgpr089 %1:vgpr(s64) = G_ANYEXT %090 S_ENDPGM 0, implicit %191 92...93 94---95name: anyext_vgpr_s16_to_vgpr_s6496legalized: true97regBankSelected: true98tracksRegLiveness: true99body: |100 bb.0:101 liveins: $vgpr0102 103 %0:vgpr(s32) = COPY $vgpr0104 %1:vgpr(s16) = G_TRUNC %0105 %2:vgpr(s64) = G_ANYEXT %1106 S_ENDPGM 0, implicit %2107 108...109 110# vcc is an invalid extension source111# ---112 113# name: anyext_vcc_s1_to_vgpr_s32114# legalized: true115# regBankSelected: true116# body: |117# bb.0:118# liveins: $vgpr0119 120# %0:vgpr(s32) = COPY $vgpr0121# %1:vcc(s1) = G_ICMP intpred(eq), %0, %0122# %2:vgpr(s32) = G_ANYEXT %1123# $vgpr0 = COPY %2124# ...125 126---127 128name: anyext_sgpr_s1_to_sgpr_s16129legalized: true130regBankSelected: true131body: |132 bb.0:133 liveins: $sgpr0134 135 ; GCN-LABEL: name: anyext_sgpr_s1_to_sgpr_s16136 ; GCN: liveins: $sgpr0137 ; GCN-NEXT: {{ $}}138 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0139 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535140 ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_MOV_B32_]], [[COPY]], implicit-def dead $scc141 ; GCN-NEXT: $sgpr0 = COPY [[S_AND_B32_]]142 %0:sgpr(s32) = COPY $sgpr0143 %1:sgpr(s1) = G_TRUNC %0144 %2:sgpr(s16) = G_ANYEXT %1145 %3:sgpr(s32) = G_ZEXT %2146 $sgpr0 = COPY %3147...148 149---150 151name: anyext_sgpr_s1_to_sgpr_s32152legalized: true153regBankSelected: true154body: |155 bb.0:156 liveins: $sgpr0157 158 ; GCN-LABEL: name: anyext_sgpr_s1_to_sgpr_s32159 ; GCN: liveins: $sgpr0160 ; GCN-NEXT: {{ $}}161 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0162 ; GCN-NEXT: $sgpr0 = COPY [[COPY]]163 %0:sgpr(s32) = COPY $sgpr0164 %1:sgpr(s1) = G_TRUNC %0165 %2:sgpr(s32) = G_ANYEXT %1166 $sgpr0 = COPY %2167...168 169---170 171name: anyext_sgpr_s1_to_sgpr_s64172legalized: true173regBankSelected: true174body: |175 bb.0:176 liveins: $sgpr0177 178 ; GCN-LABEL: name: anyext_sgpr_s1_to_sgpr_s64179 ; GCN: liveins: $sgpr0180 ; GCN-NEXT: {{ $}}181 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0182 ; GCN-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF183 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[DEF]], %subreg.sub1184 ; GCN-NEXT: $sgpr0_sgpr1 = COPY [[REG_SEQUENCE]]185 %0:sgpr(s32) = COPY $sgpr0186 %1:sgpr(s1) = G_TRUNC %0187 %2:sgpr(s64) = G_ANYEXT %1188 $sgpr0_sgpr1 = COPY %2189...190 191---192 193name: anyext_vgpr_s1_to_vgpr_s16194legalized: true195regBankSelected: true196body: |197 bb.0:198 liveins: $vgpr0199 200 ; GCN-LABEL: name: anyext_vgpr_s1_to_vgpr_s16201 ; GCN: liveins: $vgpr0202 ; GCN-NEXT: {{ $}}203 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0204 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535205 ; GCN-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec206 ; GCN-NEXT: $vgpr0 = COPY [[V_AND_B32_e64_]]207 %0:vgpr(s32) = COPY $vgpr0208 %1:vgpr(s1) = G_TRUNC %0209 %2:vgpr(s16) = G_ANYEXT %1210 %3:vgpr(s32) = G_ZEXT %2211 $vgpr0 = COPY %3212...213 214---215 216name: anyext_vgpr_s1_to_vgpr_s32217legalized: true218regBankSelected: true219body: |220 bb.0:221 liveins: $vgpr0222 223 ; GCN-LABEL: name: anyext_vgpr_s1_to_vgpr_s32224 ; GCN: liveins: $vgpr0225 ; GCN-NEXT: {{ $}}226 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0227 ; GCN-NEXT: $vgpr0 = COPY [[COPY]]228 %0:vgpr(s32) = COPY $vgpr0229 %1:vgpr(s1) = G_TRUNC %0230 %2:vgpr(s32) = G_ANYEXT %1231 $vgpr0 = COPY %2232...233 234---235 236name: anyext_sgpr_s1_to_vgpr_s32237legalized: true238regBankSelected: true239body: |240 bb.0:241 liveins: $sgpr0242 243 ; GCN-LABEL: name: anyext_sgpr_s1_to_vgpr_s32244 ; GCN: liveins: $sgpr0245 ; GCN-NEXT: {{ $}}246 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0247 ; GCN-NEXT: $sgpr0 = COPY [[COPY]]248 %0:sgpr(s32) = COPY $sgpr0249 %1:sgpr(s1) = G_TRUNC %0250 %2:sgpr(s32) = G_ANYEXT %1251 $sgpr0 = COPY %2252...253 254---255 256name: anyext_vgpr_s16_to_vgpr_s32257legalized: true258regBankSelected: true259body: |260 bb.0:261 liveins: $vgpr0262 263 ; GCN-LABEL: name: anyext_vgpr_s16_to_vgpr_s32264 ; GCN: liveins: $vgpr0265 ; GCN-NEXT: {{ $}}266 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0267 ; GCN-NEXT: $vgpr0 = COPY [[COPY]]268 %0:vgpr(s32) = COPY $vgpr0269 %1:vgpr(s16) = G_TRUNC %0270 %2:vgpr(s32) = G_ANYEXT %1271 $vgpr0 = COPY %2272 273...274 275# The source register already has an assigned register class that276# should not be interpreted as vcc.277---278 279name: anyext_regclass_sgpr_s1_to_sgpr_s32280legalized: true281regBankSelected: true282body: |283 bb.0:284 liveins: $sgpr0285 286 ; GCN-LABEL: name: anyext_regclass_sgpr_s1_to_sgpr_s32287 ; GCN: liveins: $sgpr0288 ; GCN-NEXT: {{ $}}289 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0290 ; GCN-NEXT: $sgpr0 = COPY [[COPY]]291 %0:sgpr(s32) = COPY $sgpr0292 %1:sreg_32(s1) = G_TRUNC %0293 %2:sgpr(s32) = G_ANYEXT %1294 $sgpr0 = COPY %2295...296