2718 lines · plain
1# RUN: llc -O0 -mtriple arm-linux-gnueabihf -mattr=+vfp2 -float-abi=hard -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix HARD2# RUN: llc -O0 -mtriple arm-linux-gnueabi -mattr=+vfp2,+soft-float -float-abi=soft -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT -check-prefix SOFT-AEABI -check-prefix SOFT_POOL3# RUN: llc -O0 -mtriple arm-linux-gnu -mattr=+soft-float -float-abi=soft -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT -check-prefix SOFT-DEFAULT -check-prefix SOFT_POOL4# RUN: llc -O0 -mtriple thumb-linux-gnueabihf -mattr=+v6t2,+vfp2 -float-abi=hard -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix HARD5# RUN: llc -O0 -mtriple thumb-linux-gnueabi -mattr=+v6t2,+vfp2,+soft-float -float-abi=soft -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT -check-prefix=SOFT-AEABI -check-prefix SOFT_CONST6# RUN: llc -O0 -mtriple thumb-linux-gnu -mattr=+v6t2,+soft-float -float-abi=soft -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT -check-prefix SOFT-DEFAULT -check-prefix SOFT_CONST7--- |8 define void @test_frem_float() { ret void }9 define void @test_frem_double() { ret void }10 11 define void @test_fpow_float() { ret void }12 define void @test_fpow_double() { ret void }13 14 define void @test_fadd_float() { ret void }15 define void @test_fadd_double() { ret void }16 17 define void @test_fsub_float() { ret void }18 define void @test_fsub_double() { ret void }19 20 define void @test_fmul_float() { ret void }21 define void @test_fmul_double() { ret void }22 23 define void @test_fdiv_float() { ret void }24 define void @test_fdiv_double() { ret void }25 26 define void @test_fconstant_float() { ret void }27 define void @test_fconstant_double() { ret void }28 29 define void @test_fneg_float() { ret void }30 define void @test_fneg_double() { ret void }31 32 define void @test_fpext_float_to_double() { ret void }33 define void @test_fptrunc_double_to_float() { ret void }34 35 define void @test_fptosi_float() { ret void }36 define void @test_fptosi_double() { ret void }37 define void @test_fptoui_float() { ret void }38 define void @test_fptoui_double() { ret void }39 40 define void @test_sitofp_float() { ret void }41 define void @test_sitofp_double() { ret void }42 define void @test_uitofp_float() { ret void }43 define void @test_uitofp_double() { ret void }44 45 define void @test_fcmp_true_s32() { ret void }46 define void @test_fcmp_false_s32() { ret void }47 48 define void @test_fcmp_oeq_s32() { ret void }49 define void @test_fcmp_ogt_s32() { ret void }50 define void @test_fcmp_oge_s32() { ret void }51 define void @test_fcmp_olt_s32() { ret void }52 define void @test_fcmp_ole_s32() { ret void }53 define void @test_fcmp_ord_s32() { ret void }54 define void @test_fcmp_ugt_s32() { ret void }55 define void @test_fcmp_uge_s32() { ret void }56 define void @test_fcmp_ult_s32() { ret void }57 define void @test_fcmp_ule_s32() { ret void }58 define void @test_fcmp_une_s32() { ret void }59 define void @test_fcmp_uno_s32() { ret void }60 61 define void @test_fcmp_one_s32() { ret void }62 define void @test_fcmp_ueq_s32() { ret void }63 64 define void @test_fcmp_true_s64() { ret void }65 define void @test_fcmp_false_s64() { ret void }66 67 define void @test_fcmp_oeq_s64() { ret void }68 define void @test_fcmp_ogt_s64() { ret void }69 define void @test_fcmp_oge_s64() { ret void }70 define void @test_fcmp_olt_s64() { ret void }71 define void @test_fcmp_ole_s64() { ret void }72 define void @test_fcmp_ord_s64() { ret void }73 define void @test_fcmp_ugt_s64() { ret void }74 define void @test_fcmp_uge_s64() { ret void }75 define void @test_fcmp_ult_s64() { ret void }76 define void @test_fcmp_ule_s64() { ret void }77 define void @test_fcmp_une_s64() { ret void }78 define void @test_fcmp_uno_s64() { ret void }79 80 define void @test_fcmp_one_s64() { ret void }81 define void @test_fcmp_ueq_s64() { ret void }82...83---84name: test_frem_float85# CHECK-LABEL: name: test_frem_float86legalized: false87# CHECK: legalized: true88regBankSelected: false89selected: false90tracksRegLiveness: true91registers:92 - { id: 0, class: _ }93 - { id: 1, class: _ }94 - { id: 2, class: _ }95body: |96 bb.0:97 liveins: $r0, $r198 99 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0100 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1101 %0(s32) = COPY $r0102 %1(s32) = COPY $r1103 ; CHECK-NOT: G_FREM104 ; CHECK: ADJCALLSTACKDOWN105 ; SOFT-DAG: $r0 = COPY [[X]]106 ; SOFT-DAG: $r1 = COPY [[Y]]107 ; HARD-DAG: $s0 = COPY [[X]]108 ; HARD-DAG: $s1 = COPY [[Y]]109 ; SOFT: BL{{.*}} &fmodf, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0110 ; HARD: BL{{.*}} &fmodf, {{.*}}, implicit $s0, implicit $s1, implicit-def $s0111 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0112 ; HARD: [[R:%[0-9]+]]:_(s32) = COPY $s0113 ; CHECK: ADJCALLSTACKUP114 ; CHECK-NOT: G_FREM115 %2(s32) = G_FREM %0, %1116 ; CHECK: $r0 = COPY [[R]]117 $r0 = COPY %2(s32)118 BX_RET 14, $noreg, implicit $r0119...120---121name: test_frem_double122# CHECK-LABEL: name: test_frem_double123legalized: false124# CHECK: legalized: true125regBankSelected: false126selected: false127tracksRegLiveness: true128registers:129 - { id: 0, class: _ }130 - { id: 1, class: _ }131 - { id: 2, class: _ }132 - { id: 3, class: _ }133 - { id: 4, class: _ }134 - { id: 5, class: _ }135 - { id: 6, class: _ }136 - { id: 7, class: _ }137 - { id: 8, class: _ }138body: |139 bb.0:140 liveins: $r0, $r1, $r2, $r3141 142 ; The inputs may be in the wrong order (depending on the target's143 ; endianness), but that's orthogonal to what we're trying to test here.144 ; For soft float, we only need to check that the first value, received145 ; through R0-R1, ends up in R0-R1 or R1-R0, and the second value, received146 ; through R2-R3, ends up in R2-R3 or R3-R2, when passed to fmod.147 ; For hard float, the values need to end up in D0 and D1.148 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0149 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1150 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2151 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3152 %0(s32) = COPY $r0153 %1(s32) = COPY $r1154 %2(s32) = COPY $r2155 %3(s32) = COPY $r3156 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]157 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]158 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)159 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)160 ; CHECK-NOT: G_FREM161 ; CHECK: ADJCALLSTACKDOWN162 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]163 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]164 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]165 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]166 ; HARD-DAG: $d0 = COPY [[X]]167 ; HARD-DAG: $d1 = COPY [[Y]]168 ; SOFT: BL{{.*}} &fmod, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1169 ; HARD: BL{{.*}} &fmod, {{.*}}, implicit $d0, implicit $d1, implicit-def $d0170 ; CHECK: ADJCALLSTACKUP171 ; CHECK-NOT: G_FREM172 %6(s64) = G_FREM %4, %5173 %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)174 $r0 = COPY %7(s32)175 $r1 = COPY %8(s32)176 BX_RET 14, $noreg, implicit $r0, implicit $r1177...178---179name: test_fpow_float180# CHECK-LABEL: name: test_fpow_float181legalized: false182# CHECK: legalized: true183regBankSelected: false184selected: false185tracksRegLiveness: true186registers:187 - { id: 0, class: _ }188 - { id: 1, class: _ }189 - { id: 2, class: _ }190body: |191 bb.0:192 liveins: $r0, $r1193 194 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0195 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1196 %0(s32) = COPY $r0197 %1(s32) = COPY $r1198 ; CHECK-NOT: G_FPOW199 ; CHECK: ADJCALLSTACKDOWN200 ; SOFT-DAG: $r0 = COPY [[X]]201 ; SOFT-DAG: $r1 = COPY [[Y]]202 ; HARD-DAG: $s0 = COPY [[X]]203 ; HARD-DAG: $s1 = COPY [[Y]]204 ; SOFT: BL{{.*}} &powf, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0205 ; HARD: BL{{.*}} &powf, {{.*}}, implicit $s0, implicit $s1, implicit-def $s0206 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0207 ; HARD: [[R:%[0-9]+]]:_(s32) = COPY $s0208 ; CHECK: ADJCALLSTACKUP209 ; CHECK-NOT: G_FPOW210 %2(s32) = G_FPOW %0, %1211 ; CHECK: $r0 = COPY [[R]]212 $r0 = COPY %2(s32)213 BX_RET 14, $noreg, implicit $r0214...215---216name: test_fpow_double217# CHECK-LABEL: name: test_fpow_double218legalized: false219# CHECK: legalized: true220regBankSelected: false221selected: false222tracksRegLiveness: true223registers:224 - { id: 0, class: _ }225 - { id: 1, class: _ }226 - { id: 2, class: _ }227 - { id: 3, class: _ }228 - { id: 4, class: _ }229 - { id: 5, class: _ }230 - { id: 6, class: _ }231 - { id: 7, class: _ }232 - { id: 8, class: _ }233body: |234 bb.0:235 liveins: $r0, $r1, $r2, $r3236 237 ; The inputs may be in the wrong order (depending on the target's238 ; endianness), but that's orthogonal to what we're trying to test here.239 ; For soft float, we only need to check that the first value, received240 ; through R0-R1, ends up in R0-R1 or R1-R0, and the second value, received241 ; through R2-R3, ends up in R2-R3 or R3-R2, when passed to pow.242 ; For hard float, the values need to end up in D0 and D1.243 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0244 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1245 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2246 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3247 %0(s32) = COPY $r0248 %1(s32) = COPY $r1249 %2(s32) = COPY $r2250 %3(s32) = COPY $r3251 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]252 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]253 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)254 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)255 ; CHECK-NOT: G_FPOW256 ; CHECK: ADJCALLSTACKDOWN257 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]258 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]259 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]260 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]261 ; HARD-DAG: $d0 = COPY [[X]]262 ; HARD-DAG: $d1 = COPY [[Y]]263 ; SOFT: BL{{.*}} &pow, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1264 ; HARD: BL{{.*}} &pow, {{.*}}, implicit $d0, implicit $d1, implicit-def $d0265 ; CHECK: ADJCALLSTACKUP266 ; CHECK-NOT: G_FPOW267 %6(s64) = G_FPOW %4, %5268 %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)269 $r0 = COPY %7(s32)270 $r1 = COPY %8(s32)271 BX_RET 14, $noreg, implicit $r0, implicit $r1272...273---274name: test_fadd_float275# CHECK-LABEL: name: test_fadd_float276legalized: false277# CHECK: legalized: true278regBankSelected: false279selected: false280tracksRegLiveness: true281registers:282 - { id: 0, class: _ }283 - { id: 1, class: _ }284 - { id: 2, class: _ }285body: |286 bb.0:287 liveins: $r0, $r1288 289 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0290 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1291 %0(s32) = COPY $r0292 %1(s32) = COPY $r1293 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FADD [[X]], [[Y]]294 ; SOFT-NOT: G_FADD295 ; SOFT: ADJCALLSTACKDOWN296 ; SOFT-DAG: $r0 = COPY [[X]]297 ; SOFT-DAG: $r1 = COPY [[Y]]298 ; SOFT-AEABI: BL{{.*}} &__aeabi_fadd, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0299 ; SOFT-DEFAULT: BL{{.*}} &__addsf3, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0300 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0301 ; SOFT: ADJCALLSTACKUP302 ; SOFT-NOT: G_FADD303 %2(s32) = G_FADD %0, %1304 ; CHECK: $r0 = COPY [[R]]305 $r0 = COPY %2(s32)306 BX_RET 14, $noreg, implicit $r0307...308---309name: test_fadd_double310# CHECK-LABEL: name: test_fadd_double311legalized: false312# CHECK: legalized: true313regBankSelected: false314selected: false315tracksRegLiveness: true316registers:317 - { id: 0, class: _ }318 - { id: 1, class: _ }319 - { id: 2, class: _ }320 - { id: 3, class: _ }321 - { id: 4, class: _ }322 - { id: 5, class: _ }323 - { id: 6, class: _ }324 - { id: 7, class: _ }325 - { id: 8, class: _ }326body: |327 bb.0:328 liveins: $r0, $r1, $r2, $r3329 330 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0331 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1332 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2333 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3334 %0(s32) = COPY $r0335 %1(s32) = COPY $r1336 %2(s32) = COPY $r2337 %3(s32) = COPY $r3338 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]339 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]340 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)341 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)342 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FADD [[X]], [[Y]]343 ; SOFT-NOT: G_FADD344 ; SOFT: ADJCALLSTACKDOWN345 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]346 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]347 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]348 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]349 ; SOFT-AEABI: BL{{.*}} &__aeabi_dadd, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1350 ; SOFT-DEFAULT: BL{{.*}} &__adddf3, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1351 ; SOFT: ADJCALLSTACKUP352 ; SOFT-NOT: G_FADD353 %6(s64) = G_FADD %4, %5354 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)355 %7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64)356 $r0 = COPY %7(s32)357 $r1 = COPY %8(s32)358 BX_RET 14, $noreg, implicit $r0, implicit $r1359...360---361name: test_fsub_float362# CHECK-LABEL: name: test_fsub_float363legalized: false364# CHECK: legalized: true365regBankSelected: false366selected: false367tracksRegLiveness: true368registers:369 - { id: 0, class: _ }370 - { id: 1, class: _ }371 - { id: 2, class: _ }372body: |373 bb.0:374 liveins: $r0, $r1375 376 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0377 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1378 %0(s32) = COPY $r0379 %1(s32) = COPY $r1380 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FSUB [[X]], [[Y]]381 ; SOFT-NOT: G_FSUB382 ; SOFT: ADJCALLSTACKDOWN383 ; SOFT-DAG: $r0 = COPY [[X]]384 ; SOFT-DAG: $r1 = COPY [[Y]]385 ; SOFT-AEABI: BL{{.*}} &__aeabi_fsub, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0386 ; SOFT-DEFAULT: BL{{.*}} &__subsf3, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0387 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0388 ; SOFT: ADJCALLSTACKUP389 ; SOFT-NOT: G_FSUB390 %2(s32) = G_FSUB %0, %1391 ; CHECK: $r0 = COPY [[R]]392 $r0 = COPY %2(s32)393 BX_RET 14, $noreg, implicit $r0394...395---396name: test_fsub_double397# CHECK-LABEL: name: test_fsub_double398legalized: false399# CHECK: legalized: true400regBankSelected: false401selected: false402tracksRegLiveness: true403registers:404 - { id: 0, class: _ }405 - { id: 1, class: _ }406 - { id: 2, class: _ }407 - { id: 3, class: _ }408 - { id: 4, class: _ }409 - { id: 5, class: _ }410 - { id: 6, class: _ }411 - { id: 7, class: _ }412 - { id: 8, class: _ }413body: |414 bb.0:415 liveins: $r0, $r1, $r2, $r3416 417 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0418 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1419 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2420 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3421 %0(s32) = COPY $r0422 %1(s32) = COPY $r1423 %2(s32) = COPY $r2424 %3(s32) = COPY $r3425 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]426 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]427 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)428 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)429 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FSUB [[X]], [[Y]]430 ; SOFT-NOT: G_FSUB431 ; SOFT: ADJCALLSTACKDOWN432 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]433 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]434 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]435 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]436 ; SOFT-AEABI: BL{{.*}} &__aeabi_dsub, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1437 ; SOFT-DEFAULT: BL{{.*}} &__subdf3, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1438 ; SOFT: ADJCALLSTACKUP439 ; SOFT-NOT: G_FSUB440 %6(s64) = G_FSUB %4, %5441 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)442 %7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64)443 $r0 = COPY %7(s32)444 $r1 = COPY %8(s32)445 BX_RET 14, $noreg, implicit $r0, implicit $r1446...447---448name: test_fmul_float449# CHECK-LABEL: name: test_fmul_float450legalized: false451# CHECK: legalized: true452regBankSelected: false453selected: false454tracksRegLiveness: true455registers:456 - { id: 0, class: _ }457 - { id: 1, class: _ }458 - { id: 2, class: _ }459body: |460 bb.0:461 liveins: $r0, $r1462 463 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0464 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1465 %0(s32) = COPY $r0466 %1(s32) = COPY $r1467 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FMUL [[X]], [[Y]]468 ; SOFT-NOT: G_FMUL469 ; SOFT: ADJCALLSTACKDOWN470 ; SOFT-DAG: $r0 = COPY [[X]]471 ; SOFT-DAG: $r1 = COPY [[Y]]472 ; SOFT-AEABI: BL{{.*}} &__aeabi_fmul, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0473 ; SOFT-DEFAULT: BL{{.*}} &__mulsf3, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0474 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0475 ; SOFT: ADJCALLSTACKUP476 ; SOFT-NOT: G_FMUL477 %2(s32) = G_FMUL %0, %1478 ; CHECK: $r0 = COPY [[R]]479 $r0 = COPY %2(s32)480 BX_RET 14, $noreg, implicit $r0481...482---483name: test_fmul_double484# CHECK-LABEL: name: test_fmul_double485legalized: false486# CHECK: legalized: true487regBankSelected: false488selected: false489tracksRegLiveness: true490registers:491 - { id: 0, class: _ }492 - { id: 1, class: _ }493 - { id: 2, class: _ }494 - { id: 3, class: _ }495 - { id: 4, class: _ }496 - { id: 5, class: _ }497 - { id: 6, class: _ }498 - { id: 7, class: _ }499 - { id: 8, class: _ }500body: |501 bb.0:502 liveins: $r0, $r1, $r2, $r3503 504 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0505 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1506 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2507 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3508 %0(s32) = COPY $r0509 %1(s32) = COPY $r1510 %2(s32) = COPY $r2511 %3(s32) = COPY $r3512 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]513 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]514 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)515 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)516 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FMUL [[X]], [[Y]]517 ; SOFT-NOT: G_FMUL518 ; SOFT: ADJCALLSTACKDOWN519 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]520 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]521 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]522 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]523 ; SOFT-AEABI: BL{{.*}} &__aeabi_dmul, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1524 ; SOFT-DEFAULT: BL{{.*}} &__muldf3, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1525 ; SOFT: ADJCALLSTACKUP526 ; SOFT-NOT: G_FMUL527 %6(s64) = G_FMUL %4, %5528 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)529 %7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64)530 $r0 = COPY %7(s32)531 $r1 = COPY %8(s32)532 BX_RET 14, $noreg, implicit $r0, implicit $r1533...534---535name: test_fdiv_float536# CHECK-LABEL: name: test_fdiv_float537legalized: false538# CHECK: legalized: true539regBankSelected: false540selected: false541tracksRegLiveness: true542registers:543 - { id: 0, class: _ }544 - { id: 1, class: _ }545 - { id: 2, class: _ }546body: |547 bb.0:548 liveins: $r0, $r1549 550 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0551 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r1552 %0(s32) = COPY $r0553 %1(s32) = COPY $r1554 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FDIV [[X]], [[Y]]555 ; SOFT-NOT: G_FDIV556 ; SOFT: ADJCALLSTACKDOWN557 ; SOFT-DAG: $r0 = COPY [[X]]558 ; SOFT-DAG: $r1 = COPY [[Y]]559 ; SOFT-AEABI: BL{{.*}} &__aeabi_fdiv, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0560 ; SOFT-DEFAULT: BL{{.*}} &__divsf3, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0561 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0562 ; SOFT: ADJCALLSTACKUP563 ; SOFT-NOT: G_FDIV564 %2(s32) = G_FDIV %0, %1565 ; CHECK: $r0 = COPY [[R]]566 $r0 = COPY %2(s32)567 BX_RET 14, $noreg, implicit $r0568...569---570name: test_fdiv_double571# CHECK-LABEL: name: test_fdiv_double572legalized: false573# CHECK: legalized: true574regBankSelected: false575selected: false576tracksRegLiveness: true577registers:578 - { id: 0, class: _ }579 - { id: 1, class: _ }580 - { id: 2, class: _ }581 - { id: 3, class: _ }582 - { id: 4, class: _ }583 - { id: 5, class: _ }584 - { id: 6, class: _ }585 - { id: 7, class: _ }586 - { id: 8, class: _ }587body: |588 bb.0:589 liveins: $r0, $r1, $r2, $r3590 591 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0592 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1593 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r2594 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r3595 %0(s32) = COPY $r0596 %1(s32) = COPY $r1597 %2(s32) = COPY $r2598 %3(s32) = COPY $r3599 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]600 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]]601 %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)602 %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)603 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FDIV [[X]], [[Y]]604 ; SOFT-NOT: G_FDIV605 ; SOFT: ADJCALLSTACKDOWN606 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]607 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]608 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y0]]609 ; SOFT-DAG: $r{{[2-3]}} = COPY [[Y1]]610 ; SOFT-AEABI: BL{{.*}} &__aeabi_ddiv, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1611 ; SOFT-DEFAULT: BL{{.*}} &__divdf3, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r0, implicit-def $r1612 ; SOFT: ADJCALLSTACKUP613 ; SOFT-NOT: G_FDIV614 %6(s64) = G_FDIV %4, %5615 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)616 %7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64)617 $r0 = COPY %7(s32)618 $r1 = COPY %8(s32)619 BX_RET 14, $noreg, implicit $r0, implicit $r1620...621---622name: test_fconstant_float623# CHECK-LABEL: name: test_fconstant_float624legalized: false625# CHECK: legalized: true626regBankSelected: false627selected: false628tracksRegLiveness: true629registers:630 - { id: 0, class: _ }631body: |632 bb.0:633 liveins:634 635 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FCONSTANT float -1.25636 ; SOFT-NOT: G_FCONSTANT637 ; SOFT: [[R:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1080033280638 ; SOFT-NOT: G_FCONSTANT639 %0(s32) = G_FCONSTANT float -1.25640 ; CHECK: $r0 = COPY [[R]]641 $r0 = COPY %0(s32)642 BX_RET 14, $noreg, implicit $r0643...644---645name: test_fconstant_double646# CHECK-LABEL: name: test_fconstant_double647legalized: false648# CHECK: legalized: true649regBankSelected: false650selected: false651tracksRegLiveness: true652registers:653 - { id: 0, class: _ }654 - { id: 1, class: _ }655 - { id: 2, class: _ }656body: |657 bb.0:658 liveins:659 660 ; SOFT_POOL: constants:661 ; SOFT_POOL: id: 0662 ; SOFT_POOL: value: i32 -1073532109663 ; SOFT_POOL: id: 1664 ; SOFT_POOL: value: i32 858993459665 666 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FCONSTANT double -2.4667 ; SOFT-NOT: G_FCONSTANT668 ; SOFT_CONST-DAG: [[HI:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1073532109669 ; SOFT_CONST-DAG: [[LO:%[0-9]+]]:_(s32) = G_CONSTANT i32 858993459670 ; SOFT_POOL-DAG: [[HIPTR:%[0-9]+]]:_(p0) = G_CONSTANT_POOL %const.0671 ; SOFT_POOL-DAG: [[HI:%[0-9]+]]:_(s32) = G_LOAD [[HIPTR]]672 ; SOFT_POOL-DAG: [[LOPTR:%[0-9]+]]:_(p0) = G_CONSTANT_POOL %const.1673 ; SOFT_POOL-DAG: [[LO:%[0-9]+]]:_(s32) = G_LOAD [[LOPTR]]674 ; SOFT-NOT: G_FCONSTANT675 %0(s64) = G_FCONSTANT double -2.4676 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)677 ; SOFT-DAG: $r0 = COPY [[HI]]678 ; SOFT-DAG: $r1 = COPY [[LO]]679 %1(s32),%2(s32) = G_UNMERGE_VALUES %0(s64)680 $r0 = COPY %2(s32)681 $r1 = COPY %1(s32)682 BX_RET 14, $noreg, implicit $r0, implicit $r1683...684---685name: test_fneg_float686# CHECK-LABEL: name: test_fneg_float687legalized: false688# CHECK: legalized: true689regBankSelected: false690selected: false691tracksRegLiveness: true692registers:693 - { id: 0, class: _ }694 - { id: 1, class: _ }695body: |696 bb.0:697 liveins: $r0698 699 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0700 %0(s32) = COPY $r0701 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FNEG [[X]]702 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648703 ; SOFT: [[R:%[0-9]+]]:_(s32) = G_XOR [[X]], [[ZERO]]704 %1(s32) = G_FNEG %0705 ; CHECK: $r0 = COPY [[R]]706 $r0 = COPY %1(s32)707 BX_RET 14, $noreg, implicit $r0708...709---710name: test_fneg_double711# CHECK-LABEL: name: test_fneg_double712legalized: false713# CHECK: legalized: true714regBankSelected: false715selected: false716tracksRegLiveness: true717registers:718 - { id: 0, class: _ }719 - { id: 1, class: _ }720 - { id: 2, class: _ }721 - { id: 3, class: _ }722 - { id: 4, class: _ }723 - { id: 5, class: _ }724body: |725 bb.0:726 liveins: $r0, $r1727 728 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0729 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1730 %0(s32) = COPY $r0731 %1(s32) = COPY $r1732 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]733 %2(s64) = G_MERGE_VALUES %0(s32), %1(s32)734 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FNEG [[X]]735 ; HARD: G_UNMERGE_VALUES [[R]](s64)736 ; SOFT: [[POSITIVE_ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 0737 ; SOFT: [[NEGATIVE_ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648738 ; SOFT: [[LOWR:%[0-9]+]]:_(s32) = G_XOR [[X0]], [[POSITIVE_ZERO]]739 ; SOFT: [[HIGHR:%[0-9]+]]:_(s32) = G_XOR [[X1]], [[NEGATIVE_ZERO]]740 ; SOFT: $r0 = COPY [[LOWR]]741 ; SOFT: $r1 = COPY [[HIGHR]]742 %3(s64) = G_FNEG %2743 %4(s32),%5(s32) = G_UNMERGE_VALUES %3(s64)744 $r0 = COPY %4(s32)745 $r1 = COPY %5(s32)746 BX_RET 14, $noreg, implicit $r0, implicit $r1747...748---749name: test_fpext_float_to_double750# CHECK-LABEL: name: test_fpext_float_to_double751legalized: false752# CHECK: legalized: true753regBankSelected: false754selected: false755tracksRegLiveness: true756registers:757 - { id: 0, class: _ }758 - { id: 1, class: _ }759 - { id: 2, class: _ }760 - { id: 3, class: _ }761body: |762 bb.0:763 liveins: $r0764 765 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0766 %0(s32) = COPY $r0767 ; HARD: [[R:%[0-9]+]]:_(s64) = G_FPEXT [[X]]768 ; SOFT-NOT: G_FPEXT769 ; SOFT: ADJCALLSTACKDOWN770 ; SOFT-DAG: $r0 = COPY [[X]]771 ; SOFT-AEABI: BL{{.*}} &__aeabi_f2d, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r1772 ; SOFT-DEFAULT: BL{{.*}} &__extendsfdf2, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r1773 ; SOFT: [[R0:%[0-9]+]]:_(s32) = COPY $r0774 ; SOFT: [[R1:%[0-9]+]]:_(s32) = COPY $r1775 ; SOFT: ADJCALLSTACKUP776 ; SOFT-NOT: G_FPEXT777 %1(s64) = G_FPEXT %0(s32)778 ; HARD: G_UNMERGE_VALUES [[R]](s64)779 ; SOFT-DAG: $r{{[0-1]}} = COPY [[R0]]780 ; SOFT-DAG: $r{{[0-1]}} = COPY [[R1]]781 %2(s32), %3(s32) = G_UNMERGE_VALUES %1(s64)782 $r0 = COPY %2(s32)783 $r1 = COPY %3(s32)784 BX_RET 14, $noreg, implicit $r0, implicit $r1785...786---787name: test_fptrunc_double_to_float788# CHECK-LABEL: name: test_fptrunc_double_to_float789legalized: false790# CHECK: legalized: true791regBankSelected: false792selected: false793tracksRegLiveness: true794registers:795 - { id: 0, class: _ }796 - { id: 1, class: _ }797 - { id: 2, class: _ }798 - { id: 3, class: _ }799body: |800 bb.0:801 liveins: $r0, $r1802 803 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0804 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1805 ; HARD: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]806 %0(s32) = COPY $r0807 %1(s32) = COPY $r1808 %2(s64) = G_MERGE_VALUES %0(s32), %1(s32)809 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTRUNC [[X]]810 ; SOFT-NOT: G_FPTRUNC811 ; SOFT: ADJCALLSTACKDOWN812 ; SOFT-DAG: $r0 = COPY [[X0]]813 ; SOFT-DAG: $r1 = COPY [[X1]]814 ; SOFT-AEABI: BL{{.*}} &__aeabi_d2f, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0815 ; SOFT-DEFAULT: BL{{.*}} &__truncdfsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0816 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0817 ; SOFT: ADJCALLSTACKUP818 ; SOFT-NOT: G_FPTRUNC819 %3(s32) = G_FPTRUNC %2(s64)820 ; CHECK: $r0 = COPY [[R]]821 $r0 = COPY %3(s32)822 BX_RET 14, $noreg, implicit $r0823---824---825name: test_fptosi_float826# CHECK-LABEL: name: test_fptosi_float827legalized: false828# CHECK: legalized: true829regBankSelected: false830selected: false831tracksRegLiveness: true832registers:833 - { id: 0, class: _ }834 - { id: 1, class: _ }835body: |836 bb.0:837 liveins: $r0838 839 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0840 %0(s32) = COPY $r0841 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOSI [[X]]842 ; SOFT-NOT: G_FPTOSI843 ; SOFT: ADJCALLSTACKDOWN844 ; SOFT-DAG: $r0 = COPY [[X]]845 ; SOFT-AEABI: BL{{.*}} &__aeabi_f2iz, {{.*}}, implicit $r0, implicit-def $r0846 ; SOFT-DEFAULT: BL{{.*}} &__fixsfsi, {{.*}}, implicit $r0, implicit-def $r0847 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0848 ; SOFT: ADJCALLSTACKUP849 ; SOFT-NOT: G_FPTOSI850 %1(s32) = G_FPTOSI %0(s32)851 ; CHECK: $r0 = COPY [[R]]852 $r0 = COPY %1(s32)853 BX_RET 14, $noreg, implicit $r0854...855---856name: test_fptosi_double857# CHECK-LABEL: name: test_fptosi_double858legalized: false859# CHECK: legalized: true860regBankSelected: false861selected: false862tracksRegLiveness: true863registers:864 - { id: 0, class: _ }865 - { id: 1, class: _ }866 - { id: 2, class: _ }867 - { id: 3, class: _ }868body: |869 bb.0:870 liveins: $r0, $r1871 872 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0873 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1874 %0(s32) = COPY $r0875 %1(s32) = COPY $r1876 ; HARD: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]877 %2(s64) = G_MERGE_VALUES %0(s32), %1(s32)878 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOSI [[X]]879 ; SOFT-NOT: G_FPTOSI880 ; SOFT: ADJCALLSTACKDOWN881 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]882 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]883 ; SOFT-AEABI: BL{{.*}} &__aeabi_d2iz, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0884 ; SOFT-DEFAULT: BL{{.*}} &__fixdfsi, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0885 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0886 ; SOFT: ADJCALLSTACKUP887 ; SOFT-NOT: G_FPTOSI888 %3(s32) = G_FPTOSI %2(s64)889 ; CHECK: $r0 = COPY [[R]](s32)890 $r0 = COPY %3(s32)891 BX_RET 14, $noreg, implicit $r0892...893---894name: test_fptoui_float895# CHECK-LABEL: name: test_fptoui_float896legalized: false897# CHECK: legalized: true898regBankSelected: false899selected: false900tracksRegLiveness: true901registers:902 - { id: 0, class: _ }903 - { id: 1, class: _ }904body: |905 bb.0:906 liveins: $r0907 908 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0909 %0(s32) = COPY $r0910 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOUI [[X]]911 ; SOFT-NOT: G_FPTOUI912 ; SOFT: ADJCALLSTACKDOWN913 ; SOFT-DAG: $r0 = COPY [[X]]914 ; SOFT-AEABI: BL{{.*}} &__aeabi_f2uiz, {{.*}}, implicit $r0, implicit-def $r0915 ; SOFT-DEFAULT: BL{{.*}} &__fixunssfsi, {{.*}}, implicit $r0, implicit-def $r0916 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0917 ; SOFT: ADJCALLSTACKUP918 ; SOFT-NOT: G_FPTOUI919 %1(s32) = G_FPTOUI %0(s32)920 ; CHECK: $r0 = COPY [[R]]921 $r0 = COPY %1(s32)922 BX_RET 14, $noreg, implicit $r0923...924---925name: test_fptoui_double926# CHECK-LABEL: name: test_fptoui_double927legalized: false928# CHECK: legalized: true929regBankSelected: false930selected: false931tracksRegLiveness: true932registers:933 - { id: 0, class: _ }934 - { id: 1, class: _ }935 - { id: 2, class: _ }936 - { id: 3, class: _ }937body: |938 bb.0:939 liveins: $r0, $r1940 941 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0942 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1943 %0(s32) = COPY $r0944 %1(s32) = COPY $r1945 ; HARD: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]]946 %2(s64) = G_MERGE_VALUES %0(s32), %1(s32)947 ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOUI [[X]]948 ; SOFT-NOT: G_FPTOUI949 ; SOFT: ADJCALLSTACKDOWN950 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X0]]951 ; SOFT-DAG: $r{{[0-1]}} = COPY [[X1]]952 ; SOFT-AEABI: BL{{.*}} &__aeabi_d2uiz, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0953 ; SOFT-DEFAULT: BL{{.*}} &__fixunsdfsi, {{.*}}, implicit $r0, implicit $r1, implicit-def $r0954 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0955 ; SOFT: ADJCALLSTACKUP956 ; SOFT-NOT: G_FPTOUI957 %3(s32) = G_FPTOUI %2(s64)958 ; CHECK: $r0 = COPY [[R]](s32)959 $r0 = COPY %3(s32)960 BX_RET 14, $noreg, implicit $r0961...962---963name: test_sitofp_float964# CHECK-LABEL: name: test_sitofp_float965legalized: false966# CHECK: legalized: true967regBankSelected: false968selected: false969tracksRegLiveness: true970registers:971 - { id: 0, class: _ }972 - { id: 1, class: _ }973body: |974 bb.0:975 liveins: $r0976 977 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r0978 %0(s32) = COPY $r0979 ; HARD: [[R:%[0-9]+]]:_(s32) = G_SITOFP [[X]]980 ; SOFT-NOT: G_SITOFP981 ; SOFT: ADJCALLSTACKDOWN982 ; SOFT-DAG: $r0 = COPY [[X]]983 ; SOFT-AEABI: BL{{.*}} &__aeabi_i2f, {{.*}}, implicit $r0, implicit-def $r0984 ; SOFT-DEFAULT: BL{{.*}} &__floatsisf, {{.*}}, implicit $r0, implicit-def $r0985 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r0986 ; SOFT: ADJCALLSTACKUP987 ; SOFT-NOT: G_SITOFP988 %1(s32) = G_SITOFP %0(s32)989 ; CHECK: $r0 = COPY [[R]]990 $r0 = COPY %1(s32)991 BX_RET 14, $noreg, implicit $r0992...993---994name: test_sitofp_double995# CHECK-LABEL: name: test_sitofp_double996legalized: false997# CHECK: legalized: true998regBankSelected: false999selected: false1000tracksRegLiveness: true1001registers:1002 - { id: 0, class: _ }1003 - { id: 1, class: _ }1004 - { id: 2, class: _ }1005 - { id: 3, class: _ }1006body: |1007 bb.0:1008 liveins: $r01009 1010 ; CHECK: [[X:%[0-9]+]]:_(s32) = COPY $r01011 %0(s32) = COPY $r01012 ; HARD: [[R:%[0-9]+]]:_(s64) = G_SITOFP [[X]]1013 ; SOFT-NOT: G_SITOFP1014 ; SOFT: ADJCALLSTACKDOWN1015 ; SOFT: $r0 = COPY [[X]]1016 ; SOFT-AEABI: BL{{.*}} &__aeabi_i2d, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r11017 ; SOFT-DEFAULT: BL{{.*}} &__floatsidf, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r11018 ; SOFT-DAG: [[R0:%[0-9]+]]:_(s32) = COPY $r01019 ; SOFT-DAG: [[R1:%[0-9]+]]:_(s32) = COPY $r11020 ; SOFT: ADJCALLSTACKUP1021 ; SOFT-NOT: G_SITOFP1022 %1(s64) = G_SITOFP %0(s32)1023 ; HARD: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[R]]1024 %2(s32), %3(s32) = G_UNMERGE_VALUES %1(s64)1025 ; CHECK-DAG: $r0 = COPY [[R0]](s32)1026 ; CHECK-DAG: $r1 = COPY [[R1]](s32)1027 $r0 = COPY %2(s32)1028 $r1 = COPY %3(s32)1029 BX_RET 14, $noreg, implicit $r0, implicit $r11030...1031---1032name: test_uitofp_float1033# CHECK-LABEL: name: test_uitofp_float1034legalized: false1035# CHECK: legalized: true1036regBankSelected: false1037selected: false1038tracksRegLiveness: true1039registers:1040 - { id: 0, class: _ }1041 - { id: 1, class: _ }1042body: |1043 bb.0:1044 liveins: $r01045 1046 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01047 %0(s32) = COPY $r01048 ; HARD: [[R:%[0-9]+]]:_(s32) = G_UITOFP [[X]]1049 ; SOFT-NOT: G_UITOFP1050 ; SOFT: ADJCALLSTACKDOWN1051 ; SOFT-DAG: $r0 = COPY [[X]]1052 ; SOFT-AEABI: BL{{.*}} &__aeabi_ui2f, {{.*}}, implicit $r0, implicit-def $r01053 ; SOFT-DEFAULT: BL{{.*}} &__floatunsisf, {{.*}}, implicit $r0, implicit-def $r01054 ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY $r01055 ; SOFT: ADJCALLSTACKUP1056 ; SOFT-NOT: G_UITOFP1057 %1(s32) = G_UITOFP %0(s32)1058 ; CHECK: $r0 = COPY [[R]]1059 $r0 = COPY %1(s32)1060 BX_RET 14, $noreg, implicit $r01061...1062---1063name: test_uitofp_double1064# CHECK-LABEL: name: test_uitofp_double1065legalized: false1066# CHECK: legalized: true1067regBankSelected: false1068selected: false1069tracksRegLiveness: true1070registers:1071 - { id: 0, class: _ }1072 - { id: 1, class: _ }1073 - { id: 2, class: _ }1074 - { id: 3, class: _ }1075body: |1076 bb.0:1077 liveins: $r01078 1079 ; CHECK: [[X:%[0-9]+]]:_(s32) = COPY $r01080 %0(s32) = COPY $r01081 ; HARD: [[R:%[0-9]+]]:_(s64) = G_UITOFP [[X]]1082 ; SOFT-NOT: G_UITOFP1083 ; SOFT: ADJCALLSTACKDOWN1084 ; SOFT: $r0 = COPY [[X]]1085 ; SOFT-AEABI: BL{{.*}} &__aeabi_ui2d, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r11086 ; SOFT-DEFAULT: BL{{.*}} &__floatunsidf, {{.*}}, implicit $r0, implicit-def $r0, implicit-def $r11087 ; SOFT-DAG: [[R0:%[0-9]+]]:_(s32) = COPY $r01088 ; SOFT-DAG: [[R1:%[0-9]+]]:_(s32) = COPY $r11089 ; SOFT: ADJCALLSTACKUP1090 ; SOFT-NOT: G_UITOFP1091 %1(s64) = G_UITOFP %0(s32)1092 ; HARD: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[R]]1093 %2(s32), %3(s32) = G_UNMERGE_VALUES %1(s64)1094 ; CHECK-DAG: $r0 = COPY [[R0]](s32)1095 ; CHECK-DAG: $r1 = COPY [[R1]](s32)1096 $r0 = COPY %2(s32)1097 $r1 = COPY %3(s32)1098 BX_RET 14, $noreg, implicit $r0, implicit $r11099...1100...1101name: test_fcmp_true_s321102# CHECK-LABEL: name: test_fcmp_true_s321103legalized: false1104# CHECK: legalized: true1105regBankSelected: false1106selected: false1107tracksRegLiveness: true1108registers:1109 - { id: 0, class: _ }1110 - { id: 1, class: _ }1111 - { id: 2, class: _ }1112 - { id: 3, class: _ }1113body: |1114 bb.0:1115 liveins: $r0, $r11116 1117 %0(s32) = COPY $r01118 %1(s32) = COPY $r11119 %2(s1) = G_FCMP floatpred(true), %0(s32), %11120 %3(s32) = G_ZEXT %2(s1)1121 $r0 = COPY %3(s32)1122 BX_RET 14, $noreg, implicit $r01123 ; HARD-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01124 ; HARD-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11125 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(true), [[X]](s32), [[Y]]1126 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1127 ; SOFT-NOT: G_FCMP1128 ; For soft float we just need to return a '-1' constant, but the truncation1129 ; to 1 bit is converted by the combiner to the following masking sequence.1130 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_CONSTANT i32 11131 ; SOFT-NOT: G_FCMP1132 ; CHECK: $r0 = COPY [[REXT]]1133...1134---1135name: test_fcmp_false_s321136# CHECK-LABEL: name: test_fcmp_false_s321137legalized: false1138# CHECK: legalized: true1139regBankSelected: false1140selected: false1141tracksRegLiveness: true1142registers:1143 - { id: 0, class: _ }1144 - { id: 1, class: _ }1145 - { id: 2, class: _ }1146 - { id: 3, class: _ }1147body: |1148 bb.0:1149 liveins: $r0, $r11150 1151 %0(s32) = COPY $r01152 %1(s32) = COPY $r11153 %2(s1) = G_FCMP floatpred(false), %0(s32), %11154 %3(s32) = G_ZEXT %2(s1)1155 $r0 = COPY %3(s32)1156 BX_RET 14, $noreg, implicit $r01157 ; HARD-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01158 ; HARD-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11159 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(false), [[X]](s32), [[Y]]1160 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1161 ; SOFT-NOT: G_FCMP1162 ; For soft float we just need to return a '0' constant, but the truncation1163 ; to 1 bit is converted by the combiner to the following masking sequence.1164 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_CONSTANT i32 01165 ; SOFT-NOT: G_FCMP1166 ; CHECK: $r0 = COPY [[REXT]]1167...1168---1169name: test_fcmp_oeq_s321170# CHECK-LABEL: name: test_fcmp_oeq_s321171legalized: false1172# CHECK: legalized: true1173regBankSelected: false1174selected: false1175tracksRegLiveness: true1176registers:1177 - { id: 0, class: _ }1178 - { id: 1, class: _ }1179 - { id: 2, class: _ }1180 - { id: 3, class: _ }1181body: |1182 bb.0:1183 liveins: $r0, $r11184 1185 %0(s32) = COPY $r01186 %1(s32) = COPY $r11187 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01188 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11189 %2(s1) = G_FCMP floatpred(oeq), %0(s32), %11190 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(oeq), [[X]](s32), [[Y]]1191 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1192 ; SOFT-NOT: G_FCMP1193 ; SOFT: ADJCALLSTACKDOWN1194 ; SOFT-DAG: $r0 = COPY [[X]]1195 ; SOFT-DAG: $r1 = COPY [[Y]]1196 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01197 ; SOFT-DEFAULT: BL{{.*}} &__eqsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01198 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01199 ; SOFT: ADJCALLSTACKUP1200 ; For aeabi, we just need to truncate the result. The combiner changes the1201 ; truncation into the following masking sequence.1202 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11203 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1204 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01205 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1206 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1207 ; SOFT-NOT: G_FCMP1208 %3(s32) = G_ZEXT %2(s1)1209 $r0 = COPY %3(s32)1210 ; CHECK: $r0 = COPY [[REXT]]1211 BX_RET 14, $noreg, implicit $r01212...1213---1214name: test_fcmp_ogt_s321215# CHECK-LABEL: name: test_fcmp_ogt_s321216legalized: false1217# CHECK: legalized: true1218regBankSelected: false1219selected: false1220tracksRegLiveness: true1221registers:1222 - { id: 0, class: _ }1223 - { id: 1, class: _ }1224 - { id: 2, class: _ }1225 - { id: 3, class: _ }1226body: |1227 bb.0:1228 liveins: $r0, $r11229 1230 %0(s32) = COPY $r01231 %1(s32) = COPY $r11232 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01233 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11234 %2(s1) = G_FCMP floatpred(ogt), %0(s32), %11235 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ogt), [[X]](s32), [[Y]]1236 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1237 ; SOFT-NOT: G_FCMP1238 ; SOFT: ADJCALLSTACKDOWN1239 ; SOFT-DAG: $r0 = COPY [[X]]1240 ; SOFT-DAG: $r1 = COPY [[Y]]1241 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01242 ; SOFT-DEFAULT: BL{{.*}} &__gtsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01243 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01244 ; SOFT: ADJCALLSTACKUP1245 ; For aeabi, we just need to truncate the result. The combiner changes the1246 ; truncation into the following masking sequence.1247 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11248 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1249 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01250 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]1251 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1252 ; SOFT-NOT: G_FCMP1253 %3(s32) = G_ZEXT %2(s1)1254 $r0 = COPY %3(s32)1255 ; CHECK: $r0 = COPY [[REXT]]1256 BX_RET 14, $noreg, implicit $r01257...1258---1259name: test_fcmp_oge_s321260# CHECK-LABEL: name: test_fcmp_oge_s321261legalized: false1262# CHECK: legalized: true1263regBankSelected: false1264selected: false1265tracksRegLiveness: true1266registers:1267 - { id: 0, class: _ }1268 - { id: 1, class: _ }1269 - { id: 2, class: _ }1270 - { id: 3, class: _ }1271body: |1272 bb.0:1273 liveins: $r0, $r11274 1275 %0(s32) = COPY $r01276 %1(s32) = COPY $r11277 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01278 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11279 %2(s1) = G_FCMP floatpred(oge), %0(s32), %11280 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(oge), [[X]](s32), [[Y]]1281 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1282 ; SOFT-NOT: G_FCMP1283 ; SOFT: ADJCALLSTACKDOWN1284 ; SOFT-DAG: $r0 = COPY [[X]]1285 ; SOFT-DAG: $r1 = COPY [[Y]]1286 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpge, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01287 ; SOFT-DEFAULT: BL{{.*}} &__gesf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01288 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01289 ; SOFT: ADJCALLSTACKUP1290 ; For aeabi, we just need to truncate the result. The combiner changes the1291 ; truncation into the following masking sequence.1292 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11293 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1294 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01295 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]1296 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1297 ; SOFT-NOT: G_FCMP1298 %3(s32) = G_ZEXT %2(s1)1299 $r0 = COPY %3(s32)1300 ; CHECK: $r0 = COPY [[REXT]]1301 BX_RET 14, $noreg, implicit $r01302...1303---1304name: test_fcmp_olt_s321305# CHECK-LABEL: name: test_fcmp_olt_s321306legalized: false1307# CHECK: legalized: true1308regBankSelected: false1309selected: false1310tracksRegLiveness: true1311registers:1312 - { id: 0, class: _ }1313 - { id: 1, class: _ }1314 - { id: 2, class: _ }1315 - { id: 3, class: _ }1316body: |1317 bb.0:1318 liveins: $r0, $r11319 1320 %0(s32) = COPY $r01321 %1(s32) = COPY $r11322 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01323 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11324 %2(s1) = G_FCMP floatpred(olt), %0(s32), %11325 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(olt), [[X]](s32), [[Y]]1326 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1327 ; SOFT-NOT: G_FCMP1328 ; SOFT: ADJCALLSTACKDOWN1329 ; SOFT-DAG: $r0 = COPY [[X]]1330 ; SOFT-DAG: $r1 = COPY [[Y]]1331 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmplt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01332 ; SOFT-DEFAULT: BL{{.*}} &__ltsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01333 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01334 ; SOFT: ADJCALLSTACKUP1335 ; For aeabi, we just need to truncate the result. The combiner changes the1336 ; truncation into the following masking sequence.1337 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11338 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1339 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01340 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]1341 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1342 ; SOFT-NOT: G_FCMP1343 %3(s32) = G_ZEXT %2(s1)1344 $r0 = COPY %3(s32)1345 ; CHECK: $r0 = COPY [[REXT]]1346 BX_RET 14, $noreg, implicit $r01347...1348---1349name: test_fcmp_ole_s321350# CHECK-LABEL: name: test_fcmp_ole_s321351legalized: false1352# CHECK: legalized: true1353regBankSelected: false1354selected: false1355tracksRegLiveness: true1356registers:1357 - { id: 0, class: _ }1358 - { id: 1, class: _ }1359 - { id: 2, class: _ }1360 - { id: 3, class: _ }1361body: |1362 bb.0:1363 liveins: $r0, $r11364 1365 %0(s32) = COPY $r01366 %1(s32) = COPY $r11367 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01368 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11369 %2(s1) = G_FCMP floatpred(ole), %0(s32), %11370 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ole), [[X]](s32), [[Y]]1371 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1372 ; SOFT-NOT: G_FCMP1373 ; SOFT: ADJCALLSTACKDOWN1374 ; SOFT-DAG: $r0 = COPY [[X]]1375 ; SOFT-DAG: $r1 = COPY [[Y]]1376 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmple, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01377 ; SOFT-DEFAULT: BL{{.*}} &__lesf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01378 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01379 ; SOFT: ADJCALLSTACKUP1380 ; For aeabi, we just need to truncate the result. The combiner changes the1381 ; truncation into the following masking sequence.1382 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11383 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1384 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01385 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]1386 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1387 ; SOFT-NOT: G_FCMP1388 %3(s32) = G_ZEXT %2(s1)1389 $r0 = COPY %3(s32)1390 ; CHECK: $r0 = COPY [[REXT]]1391 BX_RET 14, $noreg, implicit $r01392...1393---1394name: test_fcmp_ord_s321395# CHECK-LABEL: name: test_fcmp_ord_s321396legalized: false1397# CHECK: legalized: true1398regBankSelected: false1399selected: false1400tracksRegLiveness: true1401registers:1402 - { id: 0, class: _ }1403 - { id: 1, class: _ }1404 - { id: 2, class: _ }1405 - { id: 3, class: _ }1406body: |1407 bb.0:1408 liveins: $r0, $r11409 1410 %0(s32) = COPY $r01411 %1(s32) = COPY $r11412 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01413 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11414 %2(s1) = G_FCMP floatpred(ord), %0(s32), %11415 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[X]](s32), [[Y]]1416 ; SOFT-NOT: G_FCMP1417 ; SOFT: ADJCALLSTACKDOWN1418 ; SOFT-DAG: $r0 = COPY [[X]]1419 ; SOFT-DAG: $r1 = COPY [[Y]]1420 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpun, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01421 ; SOFT-DEFAULT: BL{{.*}} &__unordsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01422 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01423 ; SOFT: ADJCALLSTACKUP1424 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01425 ; SOFT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1426 ; SOFT-NOT: G_FCMP1427 %3(s32) = G_ZEXT %2(s1)1428 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1429 $r0 = COPY %3(s32)1430 ; CHECK: $r0 = COPY [[REXT]]1431 BX_RET 14, $noreg, implicit $r01432...1433---1434name: test_fcmp_ugt_s321435# CHECK-LABEL: name: test_fcmp_ugt_s321436legalized: false1437# CHECK: legalized: true1438regBankSelected: false1439selected: false1440tracksRegLiveness: true1441registers:1442 - { id: 0, class: _ }1443 - { id: 1, class: _ }1444 - { id: 2, class: _ }1445 - { id: 3, class: _ }1446body: |1447 bb.0:1448 liveins: $r0, $r11449 1450 %0(s32) = COPY $r01451 %1(s32) = COPY $r11452 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01453 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11454 %2(s1) = G_FCMP floatpred(ugt), %0(s32), %11455 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ugt), [[X]](s32), [[Y]]1456 ; SOFT-NOT: G_FCMP1457 ; SOFT: ADJCALLSTACKDOWN1458 ; SOFT-DAG: $r0 = COPY [[X]]1459 ; SOFT-DAG: $r1 = COPY [[Y]]1460 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmple, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01461 ; SOFT-DEFAULT: BL{{.*}} &__lesf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01462 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01463 ; SOFT: ADJCALLSTACKUP1464 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01465 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1466 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]1467 ; SOFT-NOT: G_FCMP1468 %3(s32) = G_ZEXT %2(s1)1469 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1470 $r0 = COPY %3(s32)1471 ; CHECK: $r0 = COPY [[REXT]]1472 BX_RET 14, $noreg, implicit $r01473...1474---1475name: test_fcmp_uge_s321476# CHECK-LABEL: name: test_fcmp_uge_s321477legalized: false1478# CHECK: legalized: true1479regBankSelected: false1480selected: false1481tracksRegLiveness: true1482registers:1483 - { id: 0, class: _ }1484 - { id: 1, class: _ }1485 - { id: 2, class: _ }1486 - { id: 3, class: _ }1487body: |1488 bb.0:1489 liveins: $r0, $r11490 1491 %0(s32) = COPY $r01492 %1(s32) = COPY $r11493 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01494 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11495 %2(s1) = G_FCMP floatpred(uge), %0(s32), %11496 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(uge), [[X]](s32), [[Y]]1497 ; SOFT-NOT: G_FCMP1498 ; SOFT: ADJCALLSTACKDOWN1499 ; SOFT-DAG: $r0 = COPY [[X]]1500 ; SOFT-DAG: $r1 = COPY [[Y]]1501 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmplt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01502 ; SOFT-DEFAULT: BL{{.*}} &__ltsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01503 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01504 ; SOFT: ADJCALLSTACKUP1505 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01506 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1507 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]1508 ; SOFT-NOT: G_FCMP1509 %3(s32) = G_ZEXT %2(s1)1510 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1511 $r0 = COPY %3(s32)1512 ; CHECK: $r0 = COPY [[REXT]]1513 BX_RET 14, $noreg, implicit $r01514...1515---1516name: test_fcmp_ult_s321517# CHECK-LABEL: name: test_fcmp_ult_s321518legalized: false1519# CHECK: legalized: true1520regBankSelected: false1521selected: false1522tracksRegLiveness: true1523registers:1524 - { id: 0, class: _ }1525 - { id: 1, class: _ }1526 - { id: 2, class: _ }1527 - { id: 3, class: _ }1528body: |1529 bb.0:1530 liveins: $r0, $r11531 1532 %0(s32) = COPY $r01533 %1(s32) = COPY $r11534 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01535 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11536 %2(s1) = G_FCMP floatpred(ult), %0(s32), %11537 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ult), [[X]](s32), [[Y]]1538 ; SOFT-NOT: G_FCMP1539 ; SOFT: ADJCALLSTACKDOWN1540 ; SOFT-DAG: $r0 = COPY [[X]]1541 ; SOFT-DAG: $r1 = COPY [[Y]]1542 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpge, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01543 ; SOFT-DEFAULT: BL{{.*}} &__gesf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01544 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01545 ; SOFT: ADJCALLSTACKUP1546 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01547 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1548 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]1549 ; SOFT-NOT: G_FCMP1550 %3(s32) = G_ZEXT %2(s1)1551 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1552 $r0 = COPY %3(s32)1553 ; CHECK: $r0 = COPY [[REXT]]1554 BX_RET 14, $noreg, implicit $r01555...1556---1557name: test_fcmp_ule_s321558# CHECK-LABEL: name: test_fcmp_ule_s321559legalized: false1560# CHECK: legalized: true1561regBankSelected: false1562selected: false1563tracksRegLiveness: true1564registers:1565 - { id: 0, class: _ }1566 - { id: 1, class: _ }1567 - { id: 2, class: _ }1568 - { id: 3, class: _ }1569body: |1570 bb.0:1571 liveins: $r0, $r11572 1573 %0(s32) = COPY $r01574 %1(s32) = COPY $r11575 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01576 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11577 %2(s1) = G_FCMP floatpred(ule), %0(s32), %11578 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ule), [[X]](s32), [[Y]]1579 ; SOFT-NOT: G_FCMP1580 ; SOFT: ADJCALLSTACKDOWN1581 ; SOFT-DAG: $r0 = COPY [[X]]1582 ; SOFT-DAG: $r1 = COPY [[Y]]1583 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01584 ; SOFT-DEFAULT: BL{{.*}} &__gtsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01585 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01586 ; SOFT: ADJCALLSTACKUP1587 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01588 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1589 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]1590 ; SOFT-NOT: G_FCMP1591 %3(s32) = G_ZEXT %2(s1)1592 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1593 $r0 = COPY %3(s32)1594 ; CHECK: $r0 = COPY [[REXT]]1595 BX_RET 14, $noreg, implicit $r01596...1597---1598name: test_fcmp_une_s321599# CHECK-LABEL: name: test_fcmp_une_s321600legalized: false1601# CHECK: legalized: true1602regBankSelected: false1603selected: false1604tracksRegLiveness: true1605registers:1606 - { id: 0, class: _ }1607 - { id: 1, class: _ }1608 - { id: 2, class: _ }1609 - { id: 3, class: _ }1610body: |1611 bb.0:1612 liveins: $r0, $r11613 1614 %0(s32) = COPY $r01615 %1(s32) = COPY $r11616 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01617 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11618 %2(s1) = G_FCMP floatpred(une), %0(s32), %11619 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(une), [[X]](s32), [[Y]]1620 ; SOFT-NOT: G_FCMP1621 ; SOFT: ADJCALLSTACKDOWN1622 ; SOFT-DAG: $r0 = COPY [[X]]1623 ; SOFT-DAG: $r1 = COPY [[Y]]1624 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01625 ; SOFT-DEFAULT: BL{{.*}} &__nesf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01626 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01627 ; SOFT: ADJCALLSTACKUP1628 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01629 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1630 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]1631 ; SOFT-NOT: G_FCMP1632 %3(s32) = G_ZEXT %2(s1)1633 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1634 $r0 = COPY %3(s32)1635 ; CHECK: $r0 = COPY [[REXT]]1636 BX_RET 14, $noreg, implicit $r01637...1638---1639name: test_fcmp_uno_s321640# CHECK-LABEL: name: test_fcmp_uno_s321641legalized: false1642# CHECK: legalized: true1643regBankSelected: false1644selected: false1645tracksRegLiveness: true1646registers:1647 - { id: 0, class: _ }1648 - { id: 1, class: _ }1649 - { id: 2, class: _ }1650 - { id: 3, class: _ }1651body: |1652 bb.0:1653 liveins: $r0, $r11654 1655 %0(s32) = COPY $r01656 %1(s32) = COPY $r11657 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01658 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11659 %2(s1) = G_FCMP floatpred(uno), %0(s32), %11660 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(uno), [[X]](s32), [[Y]]1661 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1662 ; SOFT-NOT: G_FCMP1663 ; SOFT: ADJCALLSTACKDOWN1664 ; SOFT-DAG: $r0 = COPY [[X]]1665 ; SOFT-DAG: $r1 = COPY [[Y]]1666 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpun, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01667 ; SOFT-DEFAULT: BL{{.*}} &__unordsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01668 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01669 ; SOFT: ADJCALLSTACKUP1670 ; For aeabi, we just need to truncate the result. The combiner changes the1671 ; truncation into the following masking sequence.1672 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11673 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1674 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01675 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]1676 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1677 ; SOFT-NOT: G_FCMP1678 %3(s32) = G_ZEXT %2(s1)1679 $r0 = COPY %3(s32)1680 ; CHECK: $r0 = COPY [[REXT]]1681 BX_RET 14, $noreg, implicit $r01682...1683---1684name: test_fcmp_one_s321685# CHECK-LABEL: name: test_fcmp_one_s321686legalized: false1687# CHECK: legalized: true1688regBankSelected: false1689selected: false1690tracksRegLiveness: true1691registers:1692 - { id: 0, class: _ }1693 - { id: 1, class: _ }1694 - { id: 2, class: _ }1695 - { id: 3, class: _ }1696body: |1697 bb.0:1698 liveins: $r0, $r11699 1700 %0(s32) = COPY $r01701 %1(s32) = COPY $r11702 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01703 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11704 %2(s1) = G_FCMP floatpred(one), %0(s32), %11705 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(one), [[X]](s32), [[Y]]1706 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1707 ; SOFT-NOT: G_FCMP1708 ; SOFT: ADJCALLSTACKDOWN1709 ; SOFT-DAG: $r0 = COPY [[X]]1710 ; SOFT-DAG: $r1 = COPY [[Y]]1711 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01712 ; SOFT-DEFAULT: BL{{.*}} &__gtsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01713 ; SOFT: [[RET1:%[0-9]+]]:_(s32) = COPY $r01714 ; SOFT: ADJCALLSTACKUP1715 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01716 ; SOFT-DEFAULT: [[R1:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]]1717 ; SOFT-NOT: G_FCMP1718 ; SOFT: ADJCALLSTACKDOWN1719 ; SOFT-DAG: $r0 = COPY [[X]]1720 ; SOFT-DAG: $r1 = COPY [[Y]]1721 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmplt, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01722 ; SOFT-DEFAULT: BL{{.*}} &__ltsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01723 ; SOFT: [[RET2:%[0-9]+]]:_(s32) = COPY $r01724 ; SOFT: ADJCALLSTACKUP1725 ; SOFT-DEFAULT: [[R2:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET2]](s32), [[ZERO]]1726 ; SOFT-DEFAULT: [[R1EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R1]]1727 ; SOFT-DEFAULT: [[R2EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R2]]1728 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_OR [[RET1]], [[RET2]]1729 ; SOFT-DEFAULT:[[R:%[0-9]+]]:_(s32) = G_OR [[R1EXT]], [[R2EXT]]1730 ; The result of the G_OR needs to be truncated, and the combiner turns the1731 ; truncation into the following masking sequence.1732 ; SOFT: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11733 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_AND [[R]], [[MASK]]1734 ; SOFT-NOT: G_FCMP1735 %3(s32) = G_ZEXT %2(s1)1736 $r0 = COPY %3(s32)1737 ; CHECK: $r0 = COPY [[REXT]]1738 BX_RET 14, $noreg, implicit $r01739...1740---1741name: test_fcmp_ueq_s321742# CHECK-LABEL: name: test_fcmp_ueq_s321743legalized: false1744# CHECK: legalized: true1745regBankSelected: false1746selected: false1747tracksRegLiveness: true1748registers:1749 - { id: 0, class: _ }1750 - { id: 1, class: _ }1751 - { id: 2, class: _ }1752 - { id: 3, class: _ }1753body: |1754 bb.0:1755 liveins: $r0, $r11756 1757 %0(s32) = COPY $r01758 %1(s32) = COPY $r11759 ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY $r01760 ; CHECK-DAG: [[Y:%[0-9]+]]:_(s32) = COPY $r11761 %2(s1) = G_FCMP floatpred(ueq), %0(s32), %11762 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ueq), [[X]](s32), [[Y]]1763 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1764 ; SOFT-NOT: G_FCMP1765 ; SOFT: ADJCALLSTACKDOWN1766 ; SOFT-DAG: $r0 = COPY [[X]]1767 ; SOFT-DAG: $r1 = COPY [[Y]]1768 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01769 ; SOFT-DEFAULT: BL{{.*}} &__eqsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01770 ; SOFT: [[RET1:%[0-9]+]]:_(s32) = COPY $r01771 ; SOFT: ADJCALLSTACKUP1772 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01773 ; SOFT-DEFAULT: [[R1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]]1774 ; SOFT-NOT: G_FCMP1775 ; SOFT: ADJCALLSTACKDOWN1776 ; SOFT-DAG: $r0 = COPY [[X]]1777 ; SOFT-DAG: $r1 = COPY [[Y]]1778 ; SOFT-AEABI: BL{{.*}} &__aeabi_fcmpun, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01779 ; SOFT-DEFAULT: BL{{.*}} &__unordsf2, {{.*}}, implicit $r0, implicit $r1, implicit-def $r01780 ; SOFT: [[RET2:%[0-9]+]]:_(s32) = COPY $r01781 ; SOFT: ADJCALLSTACKUP1782 ; SOFT-DEFAULT: [[R2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET2]](s32), [[ZERO]]1783 ; SOFT-DEFAULT: [[R1EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R1]]1784 ; SOFT-DEFAULT: [[R2EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R2]]1785 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_OR [[RET1]], [[RET2]]1786 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s32) = G_OR [[R1EXT]], [[R2EXT]]1787 ; The result of the G_OR needs to be truncated, and the combiner turns the1788 ; truncation into the following masking sequence.1789 ; SOFT: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11790 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_AND [[R]], [[MASK]]1791 ; SOFT-NOT: G_FCMP1792 %3(s32) = G_ZEXT %2(s1)1793 $r0 = COPY %3(s32)1794 ; CHECK: $r0 = COPY [[REXT]]1795 BX_RET 14, $noreg, implicit $r01796...1797---1798name: test_fcmp_true_s641799# CHECK-LABEL: name: test_fcmp_true_s641800legalized: false1801# CHECK: legalized: true1802regBankSelected: false1803selected: false1804tracksRegLiveness: true1805registers:1806 - { id: 0, class: _ }1807 - { id: 1, class: _ }1808 - { id: 2, class: _ }1809 - { id: 3, class: _ }1810 - { id: 4, class: _ }1811 - { id: 5, class: _ }1812 - { id: 6, class: _ }1813 - { id: 7, class: _ }1814body: |1815 bb.0:1816 liveins: $r0, $r1, $r2, $r31817 1818 %0(s32) = COPY $r01819 %1(s32) = COPY $r11820 %2(s32) = COPY $r21821 %3(s32) = COPY $r31822 ; HARD-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r01823 ; HARD-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r11824 ; HARD-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r21825 ; HARD-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r31826 %4(s64) = G_MERGE_VALUES %0(s32), %11827 %5(s64) = G_MERGE_VALUES %2(s32), %31828 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)1829 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)1830 %6(s1) = G_FCMP floatpred(true), %4(s64), %51831 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(true), [[X]](s64), [[Y]]1832 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1833 ; SOFT-NOT: G_FCMP1834 ; The result needs to be truncated, and the combiner turns the truncation1835 ; into the following masking sequence.1836 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_CONSTANT i32 11837 ; SOFT-NOT: G_FCMP1838 %7(s32) = G_ZEXT %6(s1)1839 $r0 = COPY %7(s32)1840 ; CHECK: $r0 = COPY [[REXT]]1841 BX_RET 14, $noreg, implicit $r01842...1843---1844name: test_fcmp_false_s641845# CHECK-LABEL: name: test_fcmp_false_s641846legalized: false1847# CHECK: legalized: true1848regBankSelected: false1849selected: false1850tracksRegLiveness: true1851registers:1852 - { id: 0, class: _ }1853 - { id: 1, class: _ }1854 - { id: 2, class: _ }1855 - { id: 3, class: _ }1856 - { id: 4, class: _ }1857 - { id: 5, class: _ }1858 - { id: 6, class: _ }1859 - { id: 7, class: _ }1860body: |1861 bb.0:1862 liveins: $r0, $r1, $r2, $r31863 1864 %0(s32) = COPY $r01865 %1(s32) = COPY $r11866 %2(s32) = COPY $r21867 %3(s32) = COPY $r31868 ; HARD-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r01869 ; HARD-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r11870 ; HARD-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r21871 ; HARD-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r31872 %4(s64) = G_MERGE_VALUES %0(s32), %11873 %5(s64) = G_MERGE_VALUES %2(s32), %31874 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)1875 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)1876 %6(s1) = G_FCMP floatpred(false), %4(s64), %51877 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(false), [[X]](s64), [[Y]]1878 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1879 ; SOFT-NOT: G_FCMP1880 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_CONSTANT i32 01881 ; The result needs to be truncated, and the combiner turns the truncation1882 ; into the following masking sequence.1883 ; SOFT-NOT: G_FCMP1884 %7(s32) = G_ZEXT %6(s1)1885 $r0 = COPY %7(s32)1886 ; CHECK: $r0 = COPY [[REXT]]1887 BX_RET 14, $noreg, implicit $r01888...1889---1890name: test_fcmp_oeq_s641891# CHECK-LABEL: name: test_fcmp_oeq_s641892legalized: false1893# CHECK: legalized: true1894regBankSelected: false1895selected: false1896tracksRegLiveness: true1897registers:1898 - { id: 0, class: _ }1899 - { id: 1, class: _ }1900 - { id: 2, class: _ }1901 - { id: 3, class: _ }1902 - { id: 4, class: _ }1903 - { id: 5, class: _ }1904 - { id: 6, class: _ }1905 - { id: 7, class: _ }1906body: |1907 bb.0:1908 liveins: $r0, $r1, $r2, $r31909 1910 %0(s32) = COPY $r01911 %1(s32) = COPY $r11912 %2(s32) = COPY $r21913 %3(s32) = COPY $r31914 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r01915 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r11916 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r21917 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r31918 %4(s64) = G_MERGE_VALUES %0(s32), %11919 %5(s64) = G_MERGE_VALUES %2(s32), %31920 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)1921 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)1922 %6(s1) = G_FCMP floatpred(oeq), %4(s64), %51923 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(oeq), [[X]](s64), [[Y]]1924 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1925 ; SOFT-NOT: G_FCMP1926 ; SOFT: ADJCALLSTACKDOWN1927 ; SOFT-DAG: $r0 = COPY [[X0]]1928 ; SOFT-DAG: $r1 = COPY [[X1]]1929 ; SOFT-DAG: $r2 = COPY [[Y0]]1930 ; SOFT-DAG: $r3 = COPY [[Y1]]1931 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r01932 ; SOFT-DEFAULT: BL{{.*}} &__eqdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r01933 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01934 ; SOFT: ADJCALLSTACKUP1935 ; For aeabi, we just need to truncate the result. The combiner changes the1936 ; truncation into the following masking sequence.1937 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11938 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1939 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01940 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]1941 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1942 ; SOFT-NOT: G_FCMP1943 %7(s32) = G_ZEXT %6(s1)1944 $r0 = COPY %7(s32)1945 ; CHECK: $r0 = COPY [[REXT]]1946 BX_RET 14, $noreg, implicit $r01947...1948---1949name: test_fcmp_ogt_s641950# CHECK-LABEL: name: test_fcmp_ogt_s641951legalized: false1952# CHECK: legalized: true1953regBankSelected: false1954selected: false1955tracksRegLiveness: true1956registers:1957 - { id: 0, class: _ }1958 - { id: 1, class: _ }1959 - { id: 2, class: _ }1960 - { id: 3, class: _ }1961 - { id: 4, class: _ }1962 - { id: 5, class: _ }1963 - { id: 6, class: _ }1964 - { id: 7, class: _ }1965body: |1966 bb.0:1967 liveins: $r0, $r1, $r2, $r31968 1969 %0(s32) = COPY $r01970 %1(s32) = COPY $r11971 %2(s32) = COPY $r21972 %3(s32) = COPY $r31973 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r01974 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r11975 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r21976 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r31977 %4(s64) = G_MERGE_VALUES %0(s32), %11978 %5(s64) = G_MERGE_VALUES %2(s32), %31979 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)1980 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)1981 %6(s1) = G_FCMP floatpred(ogt), %4(s64), %51982 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ogt), [[X]](s64), [[Y]]1983 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)1984 ; SOFT-NOT: G_FCMP1985 ; SOFT: ADJCALLSTACKDOWN1986 ; SOFT-DAG: $r0 = COPY [[X0]]1987 ; SOFT-DAG: $r1 = COPY [[X1]]1988 ; SOFT-DAG: $r2 = COPY [[Y0]]1989 ; SOFT-DAG: $r3 = COPY [[Y1]]1990 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r01991 ; SOFT-DEFAULT: BL{{.*}} &__gtdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r01992 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r01993 ; SOFT: ADJCALLSTACKUP1994 ; For aeabi, we just need to truncate the result. The combiner changes the1995 ; truncation into the following masking sequence.1996 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 11997 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]1998 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 01999 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]2000 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2001 ; SOFT-NOT: G_FCMP2002 %7(s32) = G_ZEXT %6(s1)2003 $r0 = COPY %7(s32)2004 ; CHECK: $r0 = COPY [[REXT]]2005 BX_RET 14, $noreg, implicit $r02006...2007---2008name: test_fcmp_oge_s642009# CHECK-LABEL: name: test_fcmp_oge_s642010legalized: false2011# CHECK: legalized: true2012regBankSelected: false2013selected: false2014tracksRegLiveness: true2015registers:2016 - { id: 0, class: _ }2017 - { id: 1, class: _ }2018 - { id: 2, class: _ }2019 - { id: 3, class: _ }2020 - { id: 4, class: _ }2021 - { id: 5, class: _ }2022 - { id: 6, class: _ }2023 - { id: 7, class: _ }2024body: |2025 bb.0:2026 liveins: $r0, $r1, $r2, $r32027 2028 %0(s32) = COPY $r02029 %1(s32) = COPY $r12030 %2(s32) = COPY $r22031 %3(s32) = COPY $r32032 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02033 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12034 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22035 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32036 %4(s64) = G_MERGE_VALUES %0(s32), %12037 %5(s64) = G_MERGE_VALUES %2(s32), %32038 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2039 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2040 %6(s1) = G_FCMP floatpred(oge), %4(s64), %52041 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(oge), [[X]](s64), [[Y]]2042 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2043 ; SOFT-NOT: G_FCMP2044 ; SOFT: ADJCALLSTACKDOWN2045 ; SOFT-DAG: $r0 = COPY [[X0]]2046 ; SOFT-DAG: $r1 = COPY [[X1]]2047 ; SOFT-DAG: $r2 = COPY [[Y0]]2048 ; SOFT-DAG: $r3 = COPY [[Y1]]2049 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpge, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02050 ; SOFT-DEFAULT: BL{{.*}} &__gedf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02051 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02052 ; SOFT: ADJCALLSTACKUP2053 ; For aeabi, we just need to truncate the result. The combiner changes the2054 ; truncation into the following masking sequence.2055 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12056 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]2057 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02058 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]2059 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2060 ; SOFT-NOT: G_FCMP2061 %7(s32) = G_ZEXT %6(s1)2062 $r0 = COPY %7(s32)2063 ; CHECK: $r0 = COPY [[REXT]]2064 BX_RET 14, $noreg, implicit $r02065...2066---2067name: test_fcmp_olt_s642068# CHECK-LABEL: name: test_fcmp_olt_s642069legalized: false2070# CHECK: legalized: true2071regBankSelected: false2072selected: false2073tracksRegLiveness: true2074registers:2075 - { id: 0, class: _ }2076 - { id: 1, class: _ }2077 - { id: 2, class: _ }2078 - { id: 3, class: _ }2079 - { id: 4, class: _ }2080 - { id: 5, class: _ }2081 - { id: 6, class: _ }2082 - { id: 7, class: _ }2083body: |2084 bb.0:2085 liveins: $r0, $r1, $r2, $r32086 2087 %0(s32) = COPY $r02088 %1(s32) = COPY $r12089 %2(s32) = COPY $r22090 %3(s32) = COPY $r32091 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02092 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12093 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22094 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32095 %4(s64) = G_MERGE_VALUES %0(s32), %12096 %5(s64) = G_MERGE_VALUES %2(s32), %32097 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2098 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2099 %6(s1) = G_FCMP floatpred(olt), %4(s64), %52100 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(olt), [[X]](s64), [[Y]]2101 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2102 ; SOFT-NOT: G_FCMP2103 ; SOFT: ADJCALLSTACKDOWN2104 ; SOFT-DAG: $r0 = COPY [[X0]]2105 ; SOFT-DAG: $r1 = COPY [[X1]]2106 ; SOFT-DAG: $r2 = COPY [[Y0]]2107 ; SOFT-DAG: $r3 = COPY [[Y1]]2108 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmplt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02109 ; SOFT-DEFAULT: BL{{.*}} &__ltdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02110 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02111 ; SOFT: ADJCALLSTACKUP2112 ; For aeabi, we just need to truncate the result. The combiner changes the2113 ; truncation into the following masking sequence.2114 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12115 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]2116 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02117 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]2118 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2119 ; SOFT-NOT: G_FCMP2120 %7(s32) = G_ZEXT %6(s1)2121 $r0 = COPY %7(s32)2122 ; CHECK: $r0 = COPY [[REXT]]2123 BX_RET 14, $noreg, implicit $r02124...2125---2126name: test_fcmp_ole_s642127# CHECK-LABEL: name: test_fcmp_ole_s642128legalized: false2129# CHECK: legalized: true2130regBankSelected: false2131selected: false2132tracksRegLiveness: true2133registers:2134 - { id: 0, class: _ }2135 - { id: 1, class: _ }2136 - { id: 2, class: _ }2137 - { id: 3, class: _ }2138 - { id: 4, class: _ }2139 - { id: 5, class: _ }2140 - { id: 6, class: _ }2141 - { id: 7, class: _ }2142body: |2143 bb.0:2144 liveins: $r0, $r1, $r2, $r32145 2146 %0(s32) = COPY $r02147 %1(s32) = COPY $r12148 %2(s32) = COPY $r22149 %3(s32) = COPY $r32150 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02151 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12152 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22153 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32154 %4(s64) = G_MERGE_VALUES %0(s32), %12155 %5(s64) = G_MERGE_VALUES %2(s32), %32156 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2157 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2158 %6(s1) = G_FCMP floatpred(ole), %4(s64), %52159 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ole), [[X]](s64), [[Y]]2160 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2161 ; SOFT-NOT: G_FCMP2162 ; SOFT: ADJCALLSTACKDOWN2163 ; SOFT-DAG: $r0 = COPY [[X0]]2164 ; SOFT-DAG: $r1 = COPY [[X1]]2165 ; SOFT-DAG: $r2 = COPY [[Y0]]2166 ; SOFT-DAG: $r3 = COPY [[Y1]]2167 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmple, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02168 ; SOFT-DEFAULT: BL{{.*}} &__ledf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02169 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02170 ; SOFT: ADJCALLSTACKUP2171 ; For aeabi, we just need to truncate the result. The combiner changes the2172 ; truncation into the following masking sequence.2173 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12174 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]2175 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02176 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]2177 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2178 ; SOFT-NOT: G_FCMP2179 %7(s32) = G_ZEXT %6(s1)2180 $r0 = COPY %7(s32)2181 ; CHECK: $r0 = COPY [[REXT]]2182 BX_RET 14, $noreg, implicit $r02183...2184---2185name: test_fcmp_ord_s642186# CHECK-LABEL: name: test_fcmp_ord_s642187legalized: false2188# CHECK: legalized: true2189regBankSelected: false2190selected: false2191tracksRegLiveness: true2192registers:2193 - { id: 0, class: _ }2194 - { id: 1, class: _ }2195 - { id: 2, class: _ }2196 - { id: 3, class: _ }2197 - { id: 4, class: _ }2198 - { id: 5, class: _ }2199 - { id: 6, class: _ }2200 - { id: 7, class: _ }2201body: |2202 bb.0:2203 liveins: $r0, $r1, $r2, $r32204 2205 %0(s32) = COPY $r02206 %1(s32) = COPY $r12207 %2(s32) = COPY $r22208 %3(s32) = COPY $r32209 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02210 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12211 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22212 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32213 %4(s64) = G_MERGE_VALUES %0(s32), %12214 %5(s64) = G_MERGE_VALUES %2(s32), %32215 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2216 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2217 %6(s1) = G_FCMP floatpred(ord), %4(s64), %52218 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[X]](s64), [[Y]]2219 ; SOFT-NOT: G_FCMP2220 ; SOFT: ADJCALLSTACKDOWN2221 ; SOFT-DAG: $r0 = COPY [[X0]]2222 ; SOFT-DAG: $r1 = COPY [[X1]]2223 ; SOFT-DAG: $r2 = COPY [[Y0]]2224 ; SOFT-DAG: $r3 = COPY [[Y1]]2225 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpun, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02226 ; SOFT-DEFAULT: BL{{.*}} &__unorddf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02227 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02228 ; SOFT: ADJCALLSTACKUP2229 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02230 ; SOFT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2231 ; SOFT-NOT: G_FCMP2232 %7(s32) = G_ZEXT %6(s1)2233 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2234 $r0 = COPY %7(s32)2235 ; CHECK: $r0 = COPY [[REXT]]2236 BX_RET 14, $noreg, implicit $r02237...2238---2239name: test_fcmp_ugt_s642240# CHECK-LABEL: name: test_fcmp_ugt_s642241legalized: false2242# CHECK: legalized: true2243regBankSelected: false2244selected: false2245tracksRegLiveness: true2246registers:2247 - { id: 0, class: _ }2248 - { id: 1, class: _ }2249 - { id: 2, class: _ }2250 - { id: 3, class: _ }2251 - { id: 4, class: _ }2252 - { id: 5, class: _ }2253 - { id: 6, class: _ }2254 - { id: 7, class: _ }2255body: |2256 bb.0:2257 liveins: $r0, $r1, $r2, $r32258 2259 %0(s32) = COPY $r02260 %1(s32) = COPY $r12261 %2(s32) = COPY $r22262 %3(s32) = COPY $r32263 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02264 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12265 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22266 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32267 %4(s64) = G_MERGE_VALUES %0(s32), %12268 %5(s64) = G_MERGE_VALUES %2(s32), %32269 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2270 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2271 %6(s1) = G_FCMP floatpred(ugt), %4(s64), %52272 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ugt), [[X]](s64), [[Y]]2273 ; SOFT-NOT: G_FCMP2274 ; SOFT: ADJCALLSTACKDOWN2275 ; SOFT-DAG: $r0 = COPY [[X0]]2276 ; SOFT-DAG: $r1 = COPY [[X1]]2277 ; SOFT-DAG: $r2 = COPY [[Y0]]2278 ; SOFT-DAG: $r3 = COPY [[Y1]]2279 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmple, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02280 ; SOFT-DEFAULT: BL{{.*}} &__ledf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02281 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02282 ; SOFT: ADJCALLSTACKUP2283 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02284 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2285 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]2286 ; SOFT-NOT: G_FCMP2287 %7(s32) = G_ZEXT %6(s1)2288 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2289 $r0 = COPY %7(s32)2290 ; CHECK: $r0 = COPY [[REXT]]2291 BX_RET 14, $noreg, implicit $r02292...2293---2294name: test_fcmp_uge_s642295# CHECK-LABEL: name: test_fcmp_uge_s642296legalized: false2297# CHECK: legalized: true2298regBankSelected: false2299selected: false2300tracksRegLiveness: true2301registers:2302 - { id: 0, class: _ }2303 - { id: 1, class: _ }2304 - { id: 2, class: _ }2305 - { id: 3, class: _ }2306 - { id: 4, class: _ }2307 - { id: 5, class: _ }2308 - { id: 6, class: _ }2309 - { id: 7, class: _ }2310body: |2311 bb.0:2312 liveins: $r0, $r1, $r2, $r32313 2314 %0(s32) = COPY $r02315 %1(s32) = COPY $r12316 %2(s32) = COPY $r22317 %3(s32) = COPY $r32318 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02319 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12320 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22321 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32322 %4(s64) = G_MERGE_VALUES %0(s32), %12323 %5(s64) = G_MERGE_VALUES %2(s32), %32324 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2325 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2326 %6(s1) = G_FCMP floatpred(uge), %4(s64), %52327 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(uge), [[X]](s64), [[Y]]2328 ; SOFT-NOT: G_FCMP2329 ; SOFT: ADJCALLSTACKDOWN2330 ; SOFT-DAG: $r0 = COPY [[X0]]2331 ; SOFT-DAG: $r1 = COPY [[X1]]2332 ; SOFT-DAG: $r2 = COPY [[Y0]]2333 ; SOFT-DAG: $r3 = COPY [[Y1]]2334 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmplt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02335 ; SOFT-DEFAULT: BL{{.*}} &__ltdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02336 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02337 ; SOFT: ADJCALLSTACKUP2338 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02339 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2340 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]2341 ; SOFT-NOT: G_FCMP2342 %7(s32) = G_ZEXT %6(s1)2343 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2344 $r0 = COPY %7(s32)2345 ; CHECK: $r0 = COPY [[REXT]]2346 BX_RET 14, $noreg, implicit $r02347...2348---2349name: test_fcmp_ult_s642350# CHECK-LABEL: name: test_fcmp_ult_s642351legalized: false2352# CHECK: legalized: true2353regBankSelected: false2354selected: false2355tracksRegLiveness: true2356registers:2357 - { id: 0, class: _ }2358 - { id: 1, class: _ }2359 - { id: 2, class: _ }2360 - { id: 3, class: _ }2361 - { id: 4, class: _ }2362 - { id: 5, class: _ }2363 - { id: 6, class: _ }2364 - { id: 7, class: _ }2365body: |2366 bb.0:2367 liveins: $r0, $r1, $r2, $r32368 2369 %0(s32) = COPY $r02370 %1(s32) = COPY $r12371 %2(s32) = COPY $r22372 %3(s32) = COPY $r32373 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02374 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12375 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22376 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32377 %4(s64) = G_MERGE_VALUES %0(s32), %12378 %5(s64) = G_MERGE_VALUES %2(s32), %32379 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2380 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2381 %6(s1) = G_FCMP floatpred(ult), %4(s64), %52382 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ult), [[X]](s64), [[Y]]2383 ; SOFT-NOT: G_FCMP2384 ; SOFT: ADJCALLSTACKDOWN2385 ; SOFT-DAG: $r0 = COPY [[X0]]2386 ; SOFT-DAG: $r1 = COPY [[X1]]2387 ; SOFT-DAG: $r2 = COPY [[Y0]]2388 ; SOFT-DAG: $r3 = COPY [[Y1]]2389 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpge, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02390 ; SOFT-DEFAULT: BL{{.*}} &__gedf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02391 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02392 ; SOFT: ADJCALLSTACKUP2393 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02394 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2395 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]2396 ; SOFT-NOT: G_FCMP2397 %7(s32) = G_ZEXT %6(s1)2398 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2399 $r0 = COPY %7(s32)2400 ; CHECK: $r0 = COPY [[REXT]]2401 BX_RET 14, $noreg, implicit $r02402...2403---2404name: test_fcmp_ule_s642405# CHECK-LABEL: name: test_fcmp_ule_s642406legalized: false2407# CHECK: legalized: true2408regBankSelected: false2409selected: false2410tracksRegLiveness: true2411registers:2412 - { id: 0, class: _ }2413 - { id: 1, class: _ }2414 - { id: 2, class: _ }2415 - { id: 3, class: _ }2416 - { id: 4, class: _ }2417 - { id: 5, class: _ }2418 - { id: 6, class: _ }2419 - { id: 7, class: _ }2420body: |2421 bb.0:2422 liveins: $r0, $r1, $r2, $r32423 2424 %0(s32) = COPY $r02425 %1(s32) = COPY $r12426 %2(s32) = COPY $r22427 %3(s32) = COPY $r32428 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02429 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12430 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22431 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32432 %4(s64) = G_MERGE_VALUES %0(s32), %12433 %5(s64) = G_MERGE_VALUES %2(s32), %32434 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2435 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2436 %6(s1) = G_FCMP floatpred(ule), %4(s64), %52437 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ule), [[X]](s64), [[Y]]2438 ; SOFT-NOT: G_FCMP2439 ; SOFT: ADJCALLSTACKDOWN2440 ; SOFT-DAG: $r0 = COPY [[X0]]2441 ; SOFT-DAG: $r1 = COPY [[X1]]2442 ; SOFT-DAG: $r2 = COPY [[Y0]]2443 ; SOFT-DAG: $r3 = COPY [[Y1]]2444 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02445 ; SOFT-DEFAULT: BL{{.*}} &__gtdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02446 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02447 ; SOFT: ADJCALLSTACKUP2448 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02449 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2450 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]2451 ; SOFT-NOT: G_FCMP2452 %7(s32) = G_ZEXT %6(s1)2453 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2454 $r0 = COPY %7(s32)2455 ; CHECK: $r0 = COPY [[REXT]]2456 BX_RET 14, $noreg, implicit $r02457...2458---2459name: test_fcmp_une_s642460# CHECK-LABEL: name: test_fcmp_une_s642461legalized: false2462# CHECK: legalized: true2463regBankSelected: false2464selected: false2465tracksRegLiveness: true2466registers:2467 - { id: 0, class: _ }2468 - { id: 1, class: _ }2469 - { id: 2, class: _ }2470 - { id: 3, class: _ }2471 - { id: 4, class: _ }2472 - { id: 5, class: _ }2473 - { id: 6, class: _ }2474 - { id: 7, class: _ }2475body: |2476 bb.0:2477 liveins: $r0, $r1, $r2, $r32478 2479 %0(s32) = COPY $r02480 %1(s32) = COPY $r12481 %2(s32) = COPY $r22482 %3(s32) = COPY $r32483 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02484 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12485 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22486 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32487 %4(s64) = G_MERGE_VALUES %0(s32), %12488 %5(s64) = G_MERGE_VALUES %2(s32), %32489 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2490 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2491 %6(s1) = G_FCMP floatpred(une), %4(s64), %52492 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(une), [[X]](s64), [[Y]]2493 ; SOFT-NOT: G_FCMP2494 ; SOFT: ADJCALLSTACKDOWN2495 ; SOFT-DAG: $r0 = COPY [[X0]]2496 ; SOFT-DAG: $r1 = COPY [[X1]]2497 ; SOFT-DAG: $r2 = COPY [[Y0]]2498 ; SOFT-DAG: $r3 = COPY [[Y1]]2499 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02500 ; SOFT-DEFAULT: BL{{.*}} &__nedf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02501 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02502 ; SOFT: ADJCALLSTACKUP2503 ; SOFT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02504 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]2505 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]2506 ; SOFT-NOT: G_FCMP2507 %7(s32) = G_ZEXT %6(s1)2508 ; CHECK: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2509 $r0 = COPY %7(s32)2510 ; CHECK: $r0 = COPY [[REXT]]2511 BX_RET 14, $noreg, implicit $r02512...2513---2514name: test_fcmp_uno_s642515# CHECK-LABEL: name: test_fcmp_uno_s642516legalized: false2517# CHECK: legalized: true2518regBankSelected: false2519selected: false2520tracksRegLiveness: true2521registers:2522 - { id: 0, class: _ }2523 - { id: 1, class: _ }2524 - { id: 2, class: _ }2525 - { id: 3, class: _ }2526 - { id: 4, class: _ }2527 - { id: 5, class: _ }2528 - { id: 6, class: _ }2529 - { id: 7, class: _ }2530body: |2531 bb.0:2532 liveins: $r0, $r1, $r2, $r32533 2534 %0(s32) = COPY $r02535 %1(s32) = COPY $r12536 %2(s32) = COPY $r22537 %3(s32) = COPY $r32538 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02539 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12540 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22541 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32542 %4(s64) = G_MERGE_VALUES %0(s32), %12543 %5(s64) = G_MERGE_VALUES %2(s32), %32544 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2545 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2546 %6(s1) = G_FCMP floatpred(uno), %4(s64), %52547 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(uno), [[X]](s64), [[Y]]2548 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2549 ; SOFT-NOT: G_FCMP2550 ; SOFT: ADJCALLSTACKDOWN2551 ; SOFT-DAG: $r0 = COPY [[X0]]2552 ; SOFT-DAG: $r1 = COPY [[X1]]2553 ; SOFT-DAG: $r2 = COPY [[Y0]]2554 ; SOFT-DAG: $r3 = COPY [[Y1]]2555 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpun, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02556 ; SOFT-DEFAULT: BL{{.*}} &__unorddf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02557 ; SOFT: [[RET:%[0-9]+]]:_(s32) = COPY $r02558 ; SOFT: ADJCALLSTACKUP2559 ; For aeabi, we just need to truncate the result. The combiner changes the2560 ; truncation into the following masking sequence.2561 ; SOFT-AEABI: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12562 ; SOFT-AEABI: [[REXT:%[0-9]+]]:_(s32) = G_AND [[RET]], [[MASK]]2563 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02564 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]2565 ; SOFT-DEFAULT: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2566 ; SOFT-NOT: G_FCMP2567 %7(s32) = G_ZEXT %6(s1)2568 $r0 = COPY %7(s32)2569 ; CHECK: $r0 = COPY [[REXT]]2570 BX_RET 14, $noreg, implicit $r02571...2572---2573name: test_fcmp_one_s642574# CHECK-LABEL: name: test_fcmp_one_s642575legalized: false2576# CHECK: legalized: true2577regBankSelected: false2578selected: false2579tracksRegLiveness: true2580registers:2581 - { id: 0, class: _ }2582 - { id: 1, class: _ }2583 - { id: 2, class: _ }2584 - { id: 3, class: _ }2585 - { id: 4, class: _ }2586 - { id: 5, class: _ }2587 - { id: 6, class: _ }2588 - { id: 7, class: _ }2589body: |2590 bb.0:2591 liveins: $r0, $r1, $r2, $r32592 2593 %0(s32) = COPY $r02594 %1(s32) = COPY $r12595 %2(s32) = COPY $r22596 %3(s32) = COPY $r32597 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02598 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12599 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22600 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32601 %4(s64) = G_MERGE_VALUES %0(s32), %12602 %5(s64) = G_MERGE_VALUES %2(s32), %32603 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2604 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2605 %6(s1) = G_FCMP floatpred(one), %4(s64), %52606 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(one), [[X]](s64), [[Y]]2607 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2608 ; SOFT-NOT: G_FCMP2609 ; SOFT: ADJCALLSTACKDOWN2610 ; SOFT-DAG: $r0 = COPY [[X0]]2611 ; SOFT-DAG: $r1 = COPY [[X1]]2612 ; SOFT-DAG: $r2 = COPY [[Y0]]2613 ; SOFT-DAG: $r3 = COPY [[Y1]]2614 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpgt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02615 ; SOFT-DEFAULT: BL{{.*}} &__gtdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02616 ; SOFT: [[RET1:%[0-9]+]]:_(s32) = COPY $r02617 ; SOFT: ADJCALLSTACKUP2618 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02619 ; SOFT-DEFAULT: [[R1:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]]2620 ; SOFT-NOT: G_FCMP2621 ; SOFT: ADJCALLSTACKDOWN2622 ; SOFT-DAG: $r0 = COPY [[X0]]2623 ; SOFT-DAG: $r1 = COPY [[X1]]2624 ; SOFT-DAG: $r2 = COPY [[Y0]]2625 ; SOFT-DAG: $r3 = COPY [[Y1]]2626 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmplt, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02627 ; SOFT-DEFAULT: BL{{.*}} &__ltdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02628 ; SOFT: [[RET2:%[0-9]+]]:_(s32) = COPY $r02629 ; SOFT: ADJCALLSTACKUP2630 ; SOFT-DEFAULT: [[R2:%[0-9]+]]:_(s1) = G_ICMP intpred(slt), [[RET2]](s32), [[ZERO]]2631 ; SOFT-DEFAULT: [[R1EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R1]]2632 ; SOFT-DEFAULT: [[R2EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R2]]2633 ; SOFT-AEABI: [[R:%[0-9]+]]:_(s32) = G_OR [[RET1]], [[RET2]]2634 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s32) = G_OR [[R1EXT]], [[R2EXT]]2635 ; The result of the G_OR needs to be truncated, and the combiner turns the2636 ; truncation into the following masking sequence.2637 ; SOFT: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12638 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_AND [[R]], [[MASK]]2639 ; SOFT-NOT: G_FCMP2640 %7(s32) = G_ZEXT %6(s1)2641 $r0 = COPY %7(s32)2642 ; CHECK: $r0 = COPY [[REXT]]2643 BX_RET 14, $noreg, implicit $r02644...2645---2646name: test_fcmp_ueq_s642647# CHECK-LABEL: name: test_fcmp_ueq_s642648legalized: false2649# CHECK: legalized: true2650regBankSelected: false2651selected: false2652tracksRegLiveness: true2653registers:2654 - { id: 0, class: _ }2655 - { id: 1, class: _ }2656 - { id: 2, class: _ }2657 - { id: 3, class: _ }2658 - { id: 4, class: _ }2659 - { id: 5, class: _ }2660 - { id: 6, class: _ }2661 - { id: 7, class: _ }2662body: |2663 bb.0:2664 liveins: $r0, $r1, $r2, $r32665 2666 %0(s32) = COPY $r02667 %1(s32) = COPY $r12668 %2(s32) = COPY $r22669 %3(s32) = COPY $r32670 ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r02671 ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r12672 ; CHECK-DAG: [[Y0:%[0-9]+]]:_(s32) = COPY $r22673 ; CHECK-DAG: [[Y1:%[0-9]+]]:_(s32) = COPY $r32674 %4(s64) = G_MERGE_VALUES %0(s32), %12675 %5(s64) = G_MERGE_VALUES %2(s32), %32676 ; HARD-DAG: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]](s32), [[X1]](s32)2677 ; HARD-DAG: [[Y:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)2678 %6(s1) = G_FCMP floatpred(ueq), %4(s64), %52679 ; HARD: [[R:%[0-9]+]]:_(s1) = G_FCMP floatpred(ueq), [[X]](s64), [[Y]]2680 ; HARD: [[REXT:%[0-9]+]]:_(s32) = G_ZEXT [[R]](s1)2681 ; SOFT-NOT: G_FCMP2682 ; SOFT: ADJCALLSTACKDOWN2683 ; SOFT-DAG: $r0 = COPY [[X0]]2684 ; SOFT-DAG: $r1 = COPY [[X1]]2685 ; SOFT-DAG: $r2 = COPY [[Y0]]2686 ; SOFT-DAG: $r3 = COPY [[Y1]]2687 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpeq, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02688 ; SOFT-DEFAULT: BL{{.*}} &__eqdf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02689 ; SOFT: [[RET1:%[0-9]+]]:_(s32) = COPY $r02690 ; SOFT: ADJCALLSTACKUP2691 ; SOFT-DEFAULT: [[ZERO:%[0-9]+]]:_(s32) = G_CONSTANT i32 02692 ; SOFT-DEFAULT: [[R1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]]2693 ; SOFT-NOT: G_FCMP2694 ; SOFT: ADJCALLSTACKDOWN2695 ; SOFT-DAG: $r0 = COPY [[X0]]2696 ; SOFT-DAG: $r1 = COPY [[X1]]2697 ; SOFT-DAG: $r2 = COPY [[Y0]]2698 ; SOFT-DAG: $r3 = COPY [[Y1]]2699 ; SOFT-AEABI: BL{{.*}} &__aeabi_dcmpun, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02700 ; SOFT-DEFAULT: BL{{.*}} &__unorddf2, {{.*}}, implicit $r0, implicit $r1, implicit $r2, implicit $r3, implicit-def $r02701 ; SOFT: [[RET2:%[0-9]+]]:_(s32) = COPY $r02702 ; SOFT: ADJCALLSTACKUP2703 ; SOFT-DEFAULT: [[R2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[RET2]](s32), [[ZERO]]2704 ; SOFT-DEFAULT: [[R1EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R1]]2705 ; SOFT-DEFAULT: [[R2EXT:%[0-9]+]]:_(s32) = G_ANYEXT [[R2]]2706 ; SOFT-AEABI:[[R:%[0-9]+]]:_(s32) = G_OR [[RET1]], [[RET2]]2707 ; SOFT-DEFAULT: [[R:%[0-9]+]]:_(s32) = G_OR [[R1EXT]], [[R2EXT]]2708 ; The result of the G_OR needs to be truncated, and the combiner turns the2709 ; truncation into the following masking sequence.2710 ; SOFT: [[MASK:%[0-9]+]]:_(s32) = G_CONSTANT i32 12711 ; SOFT: [[REXT:%[0-9]+]]:_(s32) = G_AND [[R]], [[MASK]]2712 ; SOFT-NOT: G_FCMP2713 %7(s32) = G_ZEXT %6(s1)2714 $r0 = COPY %7(s32)2715 ; CHECK: $r0 = COPY [[REXT]]2716 BX_RET 14, $noreg, implicit $r02717...2718