676 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP323# RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP644--- |5 6 define void @f32toi64() {entry: ret void}7 define void @f32toi32() {entry: ret void}8 define void @f32toi16() {entry: ret void}9 define void @f32toi8() {entry: ret void}10 define void @f64toi64() {entry: ret void}11 define void @f64toi32() {entry: ret void}12 define void @f64toi16() {entry: ret void}13 define void @f64toi8() {entry: ret void}14 define void @f32tou64() {entry: ret void}15 define void @f32tou32() {entry: ret void}16 define void @f32tou16() {entry: ret void}17 define void @f32tou8() {entry: ret void}18 define void @f64tou64() {entry: ret void}19 define void @f64tou32() {entry: ret void}20 define void @f64tou16() {entry: ret void}21 define void @f64tou8() {entry: ret void}22 23...24---25name: f32toi6426alignment: 427tracksRegLiveness: true28body: |29 bb.1.entry:30 liveins: $f1231 32 ; FP32-LABEL: name: f32toi6433 ; FP32: liveins: $f1234 ; FP32-NEXT: {{ $}}35 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f1236 ; FP32-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp37 ; FP32-NEXT: $f12 = COPY [[COPY]](s32)38 ; FP32-NEXT: JAL &__fixsfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v139 ; FP32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v040 ; FP32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v141 ; FP32-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp42 ; FP32-NEXT: $v0 = COPY [[COPY1]](s32)43 ; FP32-NEXT: $v1 = COPY [[COPY2]](s32)44 ; FP32-NEXT: RetRA implicit $v0, implicit $v145 ;46 ; FP64-LABEL: name: f32toi6447 ; FP64: liveins: $f1248 ; FP64-NEXT: {{ $}}49 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f1250 ; FP64-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp51 ; FP64-NEXT: $f12 = COPY [[COPY]](s32)52 ; FP64-NEXT: JAL &__fixsfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v153 ; FP64-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v054 ; FP64-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v155 ; FP64-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp56 ; FP64-NEXT: $v0 = COPY [[COPY1]](s32)57 ; FP64-NEXT: $v1 = COPY [[COPY2]](s32)58 ; FP64-NEXT: RetRA implicit $v0, implicit $v159 %0:_(s32) = COPY $f1260 %1:_(s64) = G_FPTOSI %0(s32)61 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)62 $v0 = COPY %2(s32)63 $v1 = COPY %3(s32)64 RetRA implicit $v0, implicit $v165 66...67---68name: f32toi3269alignment: 470tracksRegLiveness: true71body: |72 bb.1.entry:73 liveins: $f1274 75 ; FP32-LABEL: name: f32toi3276 ; FP32: liveins: $f1277 ; FP32-NEXT: {{ $}}78 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f1279 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)80 ; FP32-NEXT: $v0 = COPY [[FPTOSI]](s32)81 ; FP32-NEXT: RetRA implicit $v082 ;83 ; FP64-LABEL: name: f32toi3284 ; FP64: liveins: $f1285 ; FP64-NEXT: {{ $}}86 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f1287 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)88 ; FP64-NEXT: $v0 = COPY [[FPTOSI]](s32)89 ; FP64-NEXT: RetRA implicit $v090 %0:_(s32) = COPY $f1291 %1:_(s32) = G_FPTOSI %0(s32)92 $v0 = COPY %1(s32)93 RetRA implicit $v094 95...96---97name: f32toi1698alignment: 499tracksRegLiveness: true100body: |101 bb.1.entry:102 liveins: $f12103 104 ; FP32-LABEL: name: f32toi16105 ; FP32: liveins: $f12106 ; FP32-NEXT: {{ $}}107 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12108 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)109 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16110 ; FP32-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)111 ; FP32-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)112 ; FP32-NEXT: $v0 = COPY [[ASHR]](s32)113 ; FP32-NEXT: RetRA implicit $v0114 ;115 ; FP64-LABEL: name: f32toi16116 ; FP64: liveins: $f12117 ; FP64-NEXT: {{ $}}118 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12119 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)120 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16121 ; FP64-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)122 ; FP64-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)123 ; FP64-NEXT: $v0 = COPY [[ASHR]](s32)124 ; FP64-NEXT: RetRA implicit $v0125 %0:_(s32) = COPY $f12126 %1:_(s16) = G_FPTOSI %0(s32)127 %2:_(s32) = G_SEXT %1(s16)128 $v0 = COPY %2(s32)129 RetRA implicit $v0130 131...132---133name: f32toi8134alignment: 4135tracksRegLiveness: true136body: |137 bb.1.entry:138 liveins: $f12139 140 ; FP32-LABEL: name: f32toi8141 ; FP32: liveins: $f12142 ; FP32-NEXT: {{ $}}143 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12144 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)145 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24146 ; FP32-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)147 ; FP32-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)148 ; FP32-NEXT: $v0 = COPY [[ASHR]](s32)149 ; FP32-NEXT: RetRA implicit $v0150 ;151 ; FP64-LABEL: name: f32toi8152 ; FP64: liveins: $f12153 ; FP64-NEXT: {{ $}}154 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12155 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)156 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24157 ; FP64-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)158 ; FP64-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)159 ; FP64-NEXT: $v0 = COPY [[ASHR]](s32)160 ; FP64-NEXT: RetRA implicit $v0161 %0:_(s32) = COPY $f12162 %1:_(s8) = G_FPTOSI %0(s32)163 %2:_(s32) = G_SEXT %1(s8)164 $v0 = COPY %2(s32)165 RetRA implicit $v0166 167...168---169name: f64toi64170alignment: 4171tracksRegLiveness: true172body: |173 bb.1.entry:174 liveins: $d6175 176 ; FP32-LABEL: name: f64toi64177 ; FP32: liveins: $d6178 ; FP32-NEXT: {{ $}}179 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6180 ; FP32-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp181 ; FP32-NEXT: $d6 = COPY [[COPY]](s64)182 ; FP32-NEXT: JAL &__fixdfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit-def $v0, implicit-def $v1183 ; FP32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0184 ; FP32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1185 ; FP32-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp186 ; FP32-NEXT: $v0 = COPY [[COPY1]](s32)187 ; FP32-NEXT: $v1 = COPY [[COPY2]](s32)188 ; FP32-NEXT: RetRA implicit $v0, implicit $v1189 ;190 ; FP64-LABEL: name: f64toi64191 ; FP64: liveins: $d6192 ; FP64-NEXT: {{ $}}193 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6194 ; FP64-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp195 ; FP64-NEXT: $d12_64 = COPY [[COPY]](s64)196 ; FP64-NEXT: JAL &__fixdfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $d12_64, implicit-def $v0, implicit-def $v1197 ; FP64-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0198 ; FP64-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1199 ; FP64-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp200 ; FP64-NEXT: $v0 = COPY [[COPY1]](s32)201 ; FP64-NEXT: $v1 = COPY [[COPY2]](s32)202 ; FP64-NEXT: RetRA implicit $v0, implicit $v1203 %0:_(s64) = COPY $d6204 %1:_(s64) = G_FPTOSI %0(s64)205 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)206 $v0 = COPY %2(s32)207 $v1 = COPY %3(s32)208 RetRA implicit $v0, implicit $v1209 210...211---212name: f64toi32213alignment: 4214tracksRegLiveness: true215body: |216 bb.1.entry:217 liveins: $d6218 219 ; FP32-LABEL: name: f64toi32220 ; FP32: liveins: $d6221 ; FP32-NEXT: {{ $}}222 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6223 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)224 ; FP32-NEXT: $v0 = COPY [[FPTOSI]](s32)225 ; FP32-NEXT: RetRA implicit $v0226 ;227 ; FP64-LABEL: name: f64toi32228 ; FP64: liveins: $d6229 ; FP64-NEXT: {{ $}}230 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6231 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)232 ; FP64-NEXT: $v0 = COPY [[FPTOSI]](s32)233 ; FP64-NEXT: RetRA implicit $v0234 %0:_(s64) = COPY $d6235 %1:_(s32) = G_FPTOSI %0(s64)236 $v0 = COPY %1(s32)237 RetRA implicit $v0238 239...240---241name: f64toi16242alignment: 4243tracksRegLiveness: true244body: |245 bb.1.entry:246 liveins: $d6247 248 ; FP32-LABEL: name: f64toi16249 ; FP32: liveins: $d6250 ; FP32-NEXT: {{ $}}251 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6252 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)253 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16254 ; FP32-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)255 ; FP32-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)256 ; FP32-NEXT: $v0 = COPY [[ASHR]](s32)257 ; FP32-NEXT: RetRA implicit $v0258 ;259 ; FP64-LABEL: name: f64toi16260 ; FP64: liveins: $d6261 ; FP64-NEXT: {{ $}}262 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6263 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)264 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16265 ; FP64-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)266 ; FP64-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)267 ; FP64-NEXT: $v0 = COPY [[ASHR]](s32)268 ; FP64-NEXT: RetRA implicit $v0269 %0:_(s64) = COPY $d6270 %1:_(s16) = G_FPTOSI %0(s64)271 %2:_(s32) = G_SEXT %1(s16)272 $v0 = COPY %2(s32)273 RetRA implicit $v0274 275...276---277name: f64toi8278alignment: 4279tracksRegLiveness: true280body: |281 bb.1.entry:282 liveins: $d6283 284 ; FP32-LABEL: name: f64toi8285 ; FP32: liveins: $d6286 ; FP32-NEXT: {{ $}}287 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6288 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)289 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24290 ; FP32-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)291 ; FP32-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)292 ; FP32-NEXT: $v0 = COPY [[ASHR]](s32)293 ; FP32-NEXT: RetRA implicit $v0294 ;295 ; FP64-LABEL: name: f64toi8296 ; FP64: liveins: $d6297 ; FP64-NEXT: {{ $}}298 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6299 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)300 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24301 ; FP64-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[FPTOSI]], [[C]](s32)302 ; FP64-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)303 ; FP64-NEXT: $v0 = COPY [[ASHR]](s32)304 ; FP64-NEXT: RetRA implicit $v0305 %0:_(s64) = COPY $d6306 %1:_(s8) = G_FPTOSI %0(s64)307 %2:_(s32) = G_SEXT %1(s8)308 $v0 = COPY %2(s32)309 RetRA implicit $v0310 311...312---313name: f32tou64314alignment: 4315tracksRegLiveness: true316body: |317 bb.1.entry:318 liveins: $f12319 320 ; FP32-LABEL: name: f32tou64321 ; FP32: liveins: $f12322 ; FP32-NEXT: {{ $}}323 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12324 ; FP32-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp325 ; FP32-NEXT: $f12 = COPY [[COPY]](s32)326 ; FP32-NEXT: JAL &__fixunssfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1327 ; FP32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0328 ; FP32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1329 ; FP32-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp330 ; FP32-NEXT: $v0 = COPY [[COPY1]](s32)331 ; FP32-NEXT: $v1 = COPY [[COPY2]](s32)332 ; FP32-NEXT: RetRA implicit $v0, implicit $v1333 ;334 ; FP64-LABEL: name: f32tou64335 ; FP64: liveins: $f12336 ; FP64-NEXT: {{ $}}337 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12338 ; FP64-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp339 ; FP64-NEXT: $f12 = COPY [[COPY]](s32)340 ; FP64-NEXT: JAL &__fixunssfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1341 ; FP64-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0342 ; FP64-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1343 ; FP64-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp344 ; FP64-NEXT: $v0 = COPY [[COPY1]](s32)345 ; FP64-NEXT: $v1 = COPY [[COPY2]](s32)346 ; FP64-NEXT: RetRA implicit $v0, implicit $v1347 %0:_(s32) = COPY $f12348 %1:_(s64) = G_FPTOUI %0(s32)349 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)350 $v0 = COPY %2(s32)351 $v1 = COPY %3(s32)352 RetRA implicit $v0, implicit $v1353 354...355---356name: f32tou32357alignment: 4358tracksRegLiveness: true359body: |360 bb.1.entry:361 liveins: $f12362 363 ; FP32-LABEL: name: f32tou32364 ; FP32: liveins: $f12365 ; FP32-NEXT: {{ $}}366 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12367 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)368 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000369 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]370 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)371 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648372 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]373 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]374 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]375 ; FP32-NEXT: $v0 = COPY [[SELECT]](s32)376 ; FP32-NEXT: RetRA implicit $v0377 ;378 ; FP64-LABEL: name: f32tou32379 ; FP64: liveins: $f12380 ; FP64-NEXT: {{ $}}381 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12382 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)383 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000384 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]385 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)386 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648387 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]388 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]389 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]390 ; FP64-NEXT: $v0 = COPY [[SELECT]](s32)391 ; FP64-NEXT: RetRA implicit $v0392 %0:_(s32) = COPY $f12393 %1:_(s32) = G_FPTOUI %0(s32)394 $v0 = COPY %1(s32)395 RetRA implicit $v0396 397...398---399name: f32tou16400alignment: 4401tracksRegLiveness: true402body: |403 bb.1.entry:404 liveins: $f12405 406 ; FP32-LABEL: name: f32tou16407 ; FP32: liveins: $f12408 ; FP32-NEXT: {{ $}}409 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12410 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)411 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000412 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]413 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)414 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648415 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]416 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]417 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]418 ; FP32-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535419 ; FP32-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]420 ; FP32-NEXT: $v0 = COPY [[AND]](s32)421 ; FP32-NEXT: RetRA implicit $v0422 ;423 ; FP64-LABEL: name: f32tou16424 ; FP64: liveins: $f12425 ; FP64-NEXT: {{ $}}426 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12427 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)428 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000429 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]430 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)431 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648432 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]433 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]434 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]435 ; FP64-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535436 ; FP64-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]437 ; FP64-NEXT: $v0 = COPY [[AND]](s32)438 ; FP64-NEXT: RetRA implicit $v0439 %0:_(s32) = COPY $f12440 %1:_(s16) = G_FPTOUI %0(s32)441 %2:_(s32) = G_ZEXT %1(s16)442 $v0 = COPY %2(s32)443 RetRA implicit $v0444 445...446---447name: f32tou8448alignment: 4449tracksRegLiveness: true450body: |451 bb.1.entry:452 liveins: $f12453 454 ; FP32-LABEL: name: f32tou8455 ; FP32: liveins: $f12456 ; FP32-NEXT: {{ $}}457 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12458 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)459 ; FP32-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000460 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]461 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)462 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648463 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]464 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]465 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]466 ; FP32-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255467 ; FP32-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]468 ; FP32-NEXT: $v0 = COPY [[AND]](s32)469 ; FP32-NEXT: RetRA implicit $v0470 ;471 ; FP64-LABEL: name: f32tou8472 ; FP64: liveins: $f12473 ; FP64-NEXT: {{ $}}474 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $f12475 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32)476 ; FP64-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000477 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]]478 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32)479 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648480 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]481 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]]482 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]483 ; FP64-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255484 ; FP64-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]485 ; FP64-NEXT: $v0 = COPY [[AND]](s32)486 ; FP64-NEXT: RetRA implicit $v0487 %0:_(s32) = COPY $f12488 %1:_(s8) = G_FPTOUI %0(s32)489 %2:_(s32) = G_ZEXT %1(s8)490 $v0 = COPY %2(s32)491 RetRA implicit $v0492 493...494---495name: f64tou64496alignment: 4497tracksRegLiveness: true498body: |499 bb.1.entry:500 liveins: $d6501 502 ; FP32-LABEL: name: f64tou64503 ; FP32: liveins: $d6504 ; FP32-NEXT: {{ $}}505 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6506 ; FP32-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp507 ; FP32-NEXT: $d6 = COPY [[COPY]](s64)508 ; FP32-NEXT: JAL &__fixunsdfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit-def $v0, implicit-def $v1509 ; FP32-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0510 ; FP32-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1511 ; FP32-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp512 ; FP32-NEXT: $v0 = COPY [[COPY1]](s32)513 ; FP32-NEXT: $v1 = COPY [[COPY2]](s32)514 ; FP32-NEXT: RetRA implicit $v0, implicit $v1515 ;516 ; FP64-LABEL: name: f64tou64517 ; FP64: liveins: $d6518 ; FP64-NEXT: {{ $}}519 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6520 ; FP64-NEXT: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp521 ; FP64-NEXT: $d12_64 = COPY [[COPY]](s64)522 ; FP64-NEXT: JAL &__fixunsdfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $d12_64, implicit-def $v0, implicit-def $v1523 ; FP64-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0524 ; FP64-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1525 ; FP64-NEXT: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp526 ; FP64-NEXT: $v0 = COPY [[COPY1]](s32)527 ; FP64-NEXT: $v1 = COPY [[COPY2]](s32)528 ; FP64-NEXT: RetRA implicit $v0, implicit $v1529 %0:_(s64) = COPY $d6530 %1:_(s64) = G_FPTOUI %0(s64)531 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)532 $v0 = COPY %2(s32)533 $v1 = COPY %3(s32)534 RetRA implicit $v0, implicit $v1535 536...537---538name: f64tou32539alignment: 4540tracksRegLiveness: true541body: |542 bb.1.entry:543 liveins: $d6544 545 ; FP32-LABEL: name: f64tou32546 ; FP32: liveins: $d6547 ; FP32-NEXT: {{ $}}548 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6549 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)550 ; FP32-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000551 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]552 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)553 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648554 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]555 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]556 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]557 ; FP32-NEXT: $v0 = COPY [[SELECT]](s32)558 ; FP32-NEXT: RetRA implicit $v0559 ;560 ; FP64-LABEL: name: f64tou32561 ; FP64: liveins: $d6562 ; FP64-NEXT: {{ $}}563 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6564 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)565 ; FP64-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000566 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]567 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)568 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648569 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]570 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]571 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]572 ; FP64-NEXT: $v0 = COPY [[SELECT]](s32)573 ; FP64-NEXT: RetRA implicit $v0574 %0:_(s64) = COPY $d6575 %1:_(s32) = G_FPTOUI %0(s64)576 $v0 = COPY %1(s32)577 RetRA implicit $v0578 579...580---581name: f64tou16582alignment: 4583tracksRegLiveness: true584body: |585 bb.1.entry:586 liveins: $d6587 588 ; FP32-LABEL: name: f64tou16589 ; FP32: liveins: $d6590 ; FP32-NEXT: {{ $}}591 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6592 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)593 ; FP32-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000594 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]595 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)596 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648597 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]598 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]599 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]600 ; FP32-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535601 ; FP32-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]602 ; FP32-NEXT: $v0 = COPY [[AND]](s32)603 ; FP32-NEXT: RetRA implicit $v0604 ;605 ; FP64-LABEL: name: f64tou16606 ; FP64: liveins: $d6607 ; FP64-NEXT: {{ $}}608 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6609 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)610 ; FP64-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000611 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]612 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)613 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648614 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]615 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]616 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]617 ; FP64-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535618 ; FP64-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]619 ; FP64-NEXT: $v0 = COPY [[AND]](s32)620 ; FP64-NEXT: RetRA implicit $v0621 %0:_(s64) = COPY $d6622 %1:_(s16) = G_FPTOUI %0(s64)623 %2:_(s32) = G_ZEXT %1(s16)624 $v0 = COPY %2(s32)625 RetRA implicit $v0626 627...628---629name: f64tou8630alignment: 4631tracksRegLiveness: true632body: |633 bb.1.entry:634 liveins: $d6635 636 ; FP32-LABEL: name: f64tou8637 ; FP32: liveins: $d6638 ; FP32-NEXT: {{ $}}639 ; FP32-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6640 ; FP32-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)641 ; FP32-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000642 ; FP32-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]643 ; FP32-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)644 ; FP32-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648645 ; FP32-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]646 ; FP32-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]647 ; FP32-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]648 ; FP32-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255649 ; FP32-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]650 ; FP32-NEXT: $v0 = COPY [[AND]](s32)651 ; FP32-NEXT: RetRA implicit $v0652 ;653 ; FP64-LABEL: name: f64tou8654 ; FP64: liveins: $d6655 ; FP64-NEXT: {{ $}}656 ; FP64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d6657 ; FP64-NEXT: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64)658 ; FP64-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000659 ; FP64-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]]660 ; FP64-NEXT: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64)661 ; FP64-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648662 ; FP64-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]]663 ; FP64-NEXT: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]]664 ; FP64-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s32), [[FPTOSI]], [[XOR]]665 ; FP64-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255666 ; FP64-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C2]]667 ; FP64-NEXT: $v0 = COPY [[AND]](s32)668 ; FP64-NEXT: RetRA implicit $v0669 %0:_(s64) = COPY $d6670 %1:_(s8) = G_FPTOUI %0(s64)671 %2:_(s32) = G_ZEXT %1(s8)672 $v0 = COPY %2(s32)673 RetRA implicit $v0674 675...676