165 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s3---4name: fpext_v4s64_v4s325tracksRegLiveness: true6liveins:7 - { reg: '$q0' }8 - { reg: '$x0' }9frameInfo:10 maxAlignment: 111body: |12 bb.1:13 liveins: $q0, $x014 15 ; CHECK-LABEL: name: fpext_v4s64_v4s3216 ; CHECK: liveins: $q0, $x017 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q019 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x020 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)21 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)22 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV1]](<2 x s32>)23 ; CHECK-NEXT: G_STORE [[FPEXT]](<2 x s64>), [[COPY1]](p0) :: (store (<2 x s64>), align 32)24 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1625 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY1]], [[C]](s64)26 ; CHECK-NEXT: G_STORE [[FPEXT1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)27 ; CHECK-NEXT: RET_ReallyLR28 %0:_(<4 x s32>) = COPY $q029 %1:_(p0) = COPY $x030 %2:_(<4 x s64>) = G_FPEXT %0(<4 x s32>)31 G_STORE %2(<4 x s64>), %1(p0) :: (store (<4 x s64>))32 RET_ReallyLR33 34...35 36---37name: fpext_f16_f6438body: |39 bb.0:40 liveins: $h041 ; CHECK-LABEL: name: fpext_f16_f6442 ; CHECK: liveins: $h043 ; CHECK-NEXT: {{ $}}44 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h045 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s64) = G_FPEXT [[COPY]](s16)46 ; CHECK-NEXT: $d0 = COPY [[FPEXT]](s64)47 ; CHECK-NEXT: RET_ReallyLR implicit $d048 %0:_(s16) = COPY $h049 %1:_(s64) = G_FPEXT %0(s16)50 $d0 = COPY %1(s64)51 RET_ReallyLR implicit $d052...53 54---55name: fpext_v2f16_v2f6456body: |57 bb.0:58 liveins: $d059 60 ; CHECK-LABEL: name: fpext_v2f16_v2f6461 ; CHECK: liveins: $d062 ; CHECK-NEXT: {{ $}}63 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d064 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)65 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)66 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)67 ; CHECK-NEXT: $q0 = COPY [[FPEXT1]](<2 x s64>)68 ; CHECK-NEXT: RET_ReallyLR implicit $q069 %1:_(<4 x s16>) = COPY $d070 %0:_(<2 x s16>), %2:_(<2 x s16>) = G_UNMERGE_VALUES %1(<4 x s16>)71 %3:_(<2 x s64>) = G_FPEXT %0(<2 x s16>)72 $q0 = COPY %3(<2 x s64>)73 RET_ReallyLR implicit $q074...75 76---77name: fpext_v3f16_v3f6478body: |79 bb.0:80 liveins: $d081 82 ; CHECK-LABEL: name: fpext_v3f16_v3f6483 ; CHECK: liveins: $d084 ; CHECK-NEXT: {{ $}}85 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d086 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)87 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)88 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)89 ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV1]](<2 x s32>)90 ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FPEXT1]](<2 x s64>)91 ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FPEXT2]](<2 x s64>)92 ; CHECK-NEXT: $d0 = COPY [[UV2]](s64)93 ; CHECK-NEXT: $d1 = COPY [[UV3]](s64)94 ; CHECK-NEXT: $d2 = COPY [[UV4]](s64)95 ; CHECK-NEXT: RET_ReallyLR implicit $d0, implicit $d1, implicit $d296 %1:_(<4 x s16>) = COPY $d097 %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1(<4 x s16>)98 %0:_(<3 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16)99 %6:_(<3 x s64>) = G_FPEXT %0(<3 x s16>)100 %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(<3 x s64>)101 $d0 = COPY %7(s64)102 $d1 = COPY %8(s64)103 $d2 = COPY %9(s64)104 RET_ReallyLR implicit $d0, implicit $d1, implicit $d2105...106 107---108name: fpext_v4f16_v4f64109body: |110 bb.0:111 liveins: $d0112 113 ; CHECK-LABEL: name: fpext_v4f16_v4f64114 ; CHECK: liveins: $d0115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0117 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)118 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)119 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)120 ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV1]](<2 x s32>)121 ; CHECK-NEXT: $q0 = COPY [[FPEXT1]](<2 x s64>)122 ; CHECK-NEXT: $q1 = COPY [[FPEXT2]](<2 x s64>)123 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1124 %0:_(<4 x s16>) = COPY $d0125 %1:_(<4 x s64>) = G_FPEXT %0(<4 x s16>)126 %2:_(<2 x s64>), %3:_(<2 x s64>) = G_UNMERGE_VALUES %1(<4 x s64>)127 $q0 = COPY %2(<2 x s64>)128 $q1 = COPY %3(<2 x s64>)129 RET_ReallyLR implicit $q0, implicit $q1130...131 132---133name: fpext_v8f16_v8f64134body: |135 bb.0:136 liveins: $q0137 138 ; CHECK-LABEL: name: fpext_v8f16_v8f64139 ; CHECK: liveins: $q0140 ; CHECK-NEXT: {{ $}}141 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0142 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)143 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[UV]](<4 x s16>)144 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[UV1]](<4 x s16>)145 ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)146 ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<2 x s32>), [[UV5:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT1]](<4 x s32>)147 ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV2]](<2 x s32>)148 ; CHECK-NEXT: [[FPEXT3:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV3]](<2 x s32>)149 ; CHECK-NEXT: [[FPEXT4:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV4]](<2 x s32>)150 ; CHECK-NEXT: [[FPEXT5:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV5]](<2 x s32>)151 ; CHECK-NEXT: $q0 = COPY [[FPEXT2]](<2 x s64>)152 ; CHECK-NEXT: $q1 = COPY [[FPEXT3]](<2 x s64>)153 ; CHECK-NEXT: $q2 = COPY [[FPEXT4]](<2 x s64>)154 ; CHECK-NEXT: $q3 = COPY [[FPEXT5]](<2 x s64>)155 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3156 %0:_(<8 x s16>) = COPY $q0157 %1:_(<8 x s64>) = G_FPEXT %0(<8 x s16>)158 %2:_(<2 x s64>), %3:_(<2 x s64>), %4:_(<2 x s64>), %5:_(<2 x s64>) = G_UNMERGE_VALUES %1(<8 x s64>)159 $q0 = COPY %2(<2 x s64>)160 $q1 = COPY %3(<2 x s64>)161 $q2 = COPY %4(<2 x s64>)162 $q3 = COPY %5(<2 x s64>)163 RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3164...165