; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%0(s32) = COPY %r0
%1(s32) = COPY %r1
+ ; CHECK-NOT: G_FREM
; CHECK: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[R:%[0-9]+]](s32) = COPY %r0
; HARD: [[R:%[0-9]+]](s32) = COPY %s0
; CHECK: ADJCALLSTACKUP
+ ; CHECK-NOT: G_FREM
%2(s32) = G_FREM %0, %1
; CHECK: %r0 = COPY [[R]]
%r0 = COPY %2(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]]
%4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
%5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
+ ; CHECK-NOT: G_FREM
; CHECK: ADJCALLSTACKDOWN
; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]]
; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]]
; SOFT: BLX $fmod, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1
; HARD: BLX $fmod, {{.*}}, implicit %d0, implicit %d1, implicit-def %d0
; CHECK: ADJCALLSTACKUP
+ ; CHECK-NOT: G_FREM
%6(s64) = G_FREM %4, %5
%7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)
%r0 = COPY %7(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%0(s32) = COPY %r0
%1(s32) = COPY %r1
+ ; CHECK-NOT: G_FPOW
; CHECK: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[R:%[0-9]+]](s32) = COPY %r0
; HARD: [[R:%[0-9]+]](s32) = COPY %s0
; CHECK: ADJCALLSTACKUP
+ ; CHECK-NOT: G_FPOW
%2(s32) = G_FPOW %0, %1
; CHECK: %r0 = COPY [[R]]
%r0 = COPY %2(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]]
%4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
%5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
+ ; CHECK-NOT: G_FPOW
; CHECK: ADJCALLSTACKDOWN
; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]]
; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]]
; SOFT: BLX $pow, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1
; HARD: BLX $pow, {{.*}}, implicit %d0, implicit %d1, implicit-def %d0
; CHECK: ADJCALLSTACKUP
+ ; CHECK-NOT: G_FPOW
%6(s64) = G_FPOW %4, %5
%7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)
%r0 = COPY %7(s32)
%0(s32) = COPY %r0
%1(s32) = COPY %r1
; HARD: [[R:%[0-9]+]](s32) = G_FADD [[X]], [[Y]]
+ ; SOFT-NOT: G_FADD
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-DEFAULT: BLX $__addsf3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0
; SOFT: [[R:%[0-9]+]](s32) = COPY %r0
; SOFT: ADJCALLSTACKUP
+ ; SOFT-NOT: G_FADD
%2(s32) = G_FADD %0, %1
; CHECK: %r0 = COPY [[R]]
%r0 = COPY %2(s32)
%4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
%5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
; HARD: [[R:%[0-9]+]](s64) = G_FADD [[X]], [[Y]]
+ ; SOFT-NOT: G_FADD
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]]
; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]]
; SOFT-AEABI: BLX $__aeabi_dadd, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1
; SOFT-DEFAULT: BLX $__adddf3, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1
; SOFT: ADJCALLSTACKUP
+ ; SOFT-NOT: G_FADD
%6(s64) = G_FADD %4, %5
; HARD-DAG: G_UNMERGE_VALUES [[R]](s64)
%7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(oeq), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oeq), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ogt), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ogt), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(oge), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oge), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(olt), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(olt), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ole), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ole), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ord), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ord), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: ADJCALLSTACKUP
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ugt), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ugt), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(uge), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uge), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ult), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ult), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ule), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ule), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(une), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(une), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(uno), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uno), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(one), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(one), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]]
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]]
; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]]
; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
%2(s1) = G_FCMP floatpred(ueq), %0(s32), %1
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ueq), [[X]](s32), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]]
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X]]
; SOFT-DAG: %r1 = COPY [[Y]]
; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]]
; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]]
; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]]
+ ; SOFT-NOT: G_FCMP
%3(s32) = G_ZEXT %2(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %3(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(oeq), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oeq), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ogt), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ogt), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(oge), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oge), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(olt), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(olt), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ole), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ole), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ord), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ord), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: ADJCALLSTACKUP
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ugt), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ugt), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(uge), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uge), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ult), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ult), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ule), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ule), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(une), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(une), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]]
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(uno), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uno), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(one), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(one), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]]
; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]]
; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)
; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
%6(s1) = G_FCMP floatpred(ueq), %4(s64), %5
; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ueq), [[X]](s64), [[Y]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]](s32)
; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0
; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]]
+ ; SOFT-NOT: G_FCMP
; SOFT: ADJCALLSTACKDOWN
; SOFT-DAG: %r0 = COPY [[X0]]
; SOFT-DAG: %r1 = COPY [[X1]]
; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]]
; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]]
; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]]
+ ; SOFT-NOT: G_FCMP
%7(s32) = G_ZEXT %6(s1)
; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
%r0 = COPY %7(s32)