brintos

brintos / llvm-project-archived public Read only

0
0
Text · 94.8 KiB · a35f827 Raw
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