259 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -verify-machineinstrs -mtriple aarch64--- \3# RUN: -run-pass=legalizer -mattr=+fullfp16 -global-isel %s -o - \4# RUN: | FileCheck %s5...6---7name: test_v4f16.exp28alignment: 49tracksRegLiveness: true10body: |11 bb.0:12 liveins: $d013 ; CHECK-LABEL: name: test_v4f16.exp214 ; CHECK: liveins: $d015 ; CHECK-NEXT: {{ $}}16 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d017 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)18 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[UV]](s16)19 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp20 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)21 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s022 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp23 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s024 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)25 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)26 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp27 ; CHECK-NEXT: $s0 = COPY [[FPEXT1]](s32)28 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s029 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp30 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s031 ; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)32 ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[UV2]](s16)33 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp34 ; CHECK-NEXT: $s0 = COPY [[FPEXT2]](s32)35 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s036 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp37 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $s038 ; CHECK-NEXT: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY3]](s32)39 ; CHECK-NEXT: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[UV3]](s16)40 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp41 ; CHECK-NEXT: $s0 = COPY [[FPEXT3]](s32)42 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s043 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp44 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $s045 ; CHECK-NEXT: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY4]](s32)46 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC1]](s16), [[FPTRUNC2]](s16), [[FPTRUNC3]](s16)47 ; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<4 x s16>)48 ; CHECK-NEXT: RET_ReallyLR implicit $d049 %0:_(<4 x s16>) = COPY $d050 %1:_(<4 x s16>) = G_FEXP2 %051 $d0 = COPY %1(<4 x s16>)52 RET_ReallyLR implicit $d053 54...55---56name: test_v8f16.exp257alignment: 458tracksRegLiveness: true59body: |60 bb.0:61 liveins: $q062 ; CHECK-LABEL: name: test_v8f16.exp263 ; CHECK: liveins: $q064 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q066 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)67 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[UV]](s16)68 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp69 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)70 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s071 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp72 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s073 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)74 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)75 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp76 ; CHECK-NEXT: $s0 = COPY [[FPEXT1]](s32)77 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s078 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp79 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s080 ; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)81 ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[UV2]](s16)82 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp83 ; CHECK-NEXT: $s0 = COPY [[FPEXT2]](s32)84 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s085 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp86 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $s087 ; CHECK-NEXT: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY3]](s32)88 ; CHECK-NEXT: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[UV3]](s16)89 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp90 ; CHECK-NEXT: $s0 = COPY [[FPEXT3]](s32)91 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s092 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp93 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $s094 ; CHECK-NEXT: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY4]](s32)95 ; CHECK-NEXT: [[FPEXT4:%[0-9]+]]:_(s32) = G_FPEXT [[UV4]](s16)96 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp97 ; CHECK-NEXT: $s0 = COPY [[FPEXT4]](s32)98 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s099 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp100 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $s0101 ; CHECK-NEXT: [[FPTRUNC4:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY5]](s32)102 ; CHECK-NEXT: [[FPEXT5:%[0-9]+]]:_(s32) = G_FPEXT [[UV5]](s16)103 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp104 ; CHECK-NEXT: $s0 = COPY [[FPEXT5]](s32)105 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0106 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp107 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $s0108 ; CHECK-NEXT: [[FPTRUNC5:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY6]](s32)109 ; CHECK-NEXT: [[FPEXT6:%[0-9]+]]:_(s32) = G_FPEXT [[UV6]](s16)110 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp111 ; CHECK-NEXT: $s0 = COPY [[FPEXT6]](s32)112 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0113 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp114 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $s0115 ; CHECK-NEXT: [[FPTRUNC6:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY7]](s32)116 ; CHECK-NEXT: [[FPEXT7:%[0-9]+]]:_(s32) = G_FPEXT [[UV7]](s16)117 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp118 ; CHECK-NEXT: $s0 = COPY [[FPEXT7]](s32)119 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0120 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp121 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $s0122 ; CHECK-NEXT: [[FPTRUNC7:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY8]](s32)123 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC1]](s16), [[FPTRUNC2]](s16), [[FPTRUNC3]](s16), [[FPTRUNC4]](s16), [[FPTRUNC5]](s16), [[FPTRUNC6]](s16), [[FPTRUNC7]](s16)124 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<8 x s16>)125 ; CHECK-NEXT: RET_ReallyLR implicit $q0126 %0:_(<8 x s16>) = COPY $q0127 %1:_(<8 x s16>) = G_FEXP2 %0128 $q0 = COPY %1(<8 x s16>)129 RET_ReallyLR implicit $q0130 131...132---133name: test_v2f32.exp2134alignment: 4135tracksRegLiveness: true136body: |137 bb.0:138 liveins: $d0139 ; CHECK-LABEL: name: test_v2f32.exp2140 ; CHECK: liveins: $d0141 ; CHECK-NEXT: {{ $}}142 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0143 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)144 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp145 ; CHECK-NEXT: $s0 = COPY [[UV]](s32)146 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0147 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp148 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0149 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp150 ; CHECK-NEXT: $s0 = COPY [[UV1]](s32)151 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0152 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp153 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0154 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32)155 ; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<2 x s32>)156 ; CHECK-NEXT: RET_ReallyLR implicit $d0157 %0:_(<2 x s32>) = COPY $d0158 %1:_(<2 x s32>) = G_FEXP2 %0159 $d0 = COPY %1(<2 x s32>)160 RET_ReallyLR implicit $d0161 162...163---164name: test_v4f32.exp2165alignment: 4166tracksRegLiveness: true167body: |168 bb.0:169 liveins: $q0170 ; CHECK-LABEL: name: test_v4f32.exp2171 ; CHECK: liveins: $q0172 ; CHECK-NEXT: {{ $}}173 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0174 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)175 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp176 ; CHECK-NEXT: $s0 = COPY [[UV]](s32)177 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0178 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp179 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0180 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp181 ; CHECK-NEXT: $s0 = COPY [[UV1]](s32)182 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0183 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp184 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0185 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp186 ; CHECK-NEXT: $s0 = COPY [[UV2]](s32)187 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0188 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp189 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0190 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp191 ; CHECK-NEXT: $s0 = COPY [[UV3]](s32)192 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0193 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp194 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $s0195 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32)196 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)197 ; CHECK-NEXT: RET_ReallyLR implicit $q0198 %0:_(<4 x s32>) = COPY $q0199 %1:_(<4 x s32>) = G_FEXP2 %0200 $q0 = COPY %1(<4 x s32>)201 RET_ReallyLR implicit $q0202 203...204---205name: test_v2f64.exp2206alignment: 4207tracksRegLiveness: true208body: |209 bb.0:210 liveins: $q0211 ; CHECK-LABEL: name: test_v2f64.exp2212 ; CHECK: liveins: $q0213 ; CHECK-NEXT: {{ $}}214 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0215 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)216 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp217 ; CHECK-NEXT: $d0 = COPY [[UV]](s64)218 ; CHECK-NEXT: BL &exp2, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0219 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp220 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $d0221 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp222 ; CHECK-NEXT: $d0 = COPY [[UV1]](s64)223 ; CHECK-NEXT: BL &exp2, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0224 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp225 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $d0226 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[COPY1]](s64), [[COPY2]](s64)227 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<2 x s64>)228 ; CHECK-NEXT: RET_ReallyLR implicit $q0229 %0:_(<2 x s64>) = COPY $q0230 %1:_(<2 x s64>) = G_FEXP2 %0231 $q0 = COPY %1(<2 x s64>)232 RET_ReallyLR implicit $q0233 234...235---236name: test_exp2_half237alignment: 4238tracksRegLiveness: true239body: |240 bb.0:241 liveins: $h0242 ; CHECK-LABEL: name: test_exp2_half243 ; CHECK: liveins: $h0244 ; CHECK-NEXT: {{ $}}245 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0246 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[COPY]](s16)247 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp248 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)249 ; CHECK-NEXT: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0250 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp251 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0252 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)253 ; CHECK-NEXT: $h0 = COPY [[FPTRUNC]](s16)254 ; CHECK-NEXT: RET_ReallyLR implicit $h0255 %0:_(s16) = COPY $h0256 %1:_(s16) = G_FEXP2 %0257 $h0 = COPY %1(s16)258 RET_ReallyLR implicit $h0259