; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: < %s -mtriple=powerpc64-unknown-linux -mcpu=pwr8 | FileCheck %s \ ; RUN: -check-prefix=P8 ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 \ ; RUN: | FileCheck %s -check-prefix=P9 ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ ; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -mattr=-vsx | \ ; RUN: FileCheck %s -check-prefix=NOVSX define i32 @test_f32_oeq_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_oeq_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iseleq r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_oeq_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iseleq r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_oeq_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ogt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iselgt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ogt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iselgt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ogt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_oge_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_oge_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_oge_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"oge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_olt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isellt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_olt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isellt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_olt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"olt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ole_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ole_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ole_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ole", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_one_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_one_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_one_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"one", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ord_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isel r3, r4, r3, un ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ord_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isel r3, r4, r3, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ord_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isel r3, r4, r3, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ord", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ueq_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ueq_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, eq, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ueq_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ugt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ugt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, gt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ugt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_uge_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isellt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_uge_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_uge_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"uge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ult_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ult_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, lt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ult_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ult", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ule_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iselgt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ule_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ule_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"ule", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_une_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iseleq r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_une_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_une_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"une", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_uno_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isel r3, r3, r4, un ; P8-NEXT: blr ; ; P9-LABEL: test_f32_uno_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isel r3, r3, r4, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_uno_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isel r3, r3, r4, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f32( float %f1, float %f2, metadata !"uno", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_oeq_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iseleq r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_oeq_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iseleq r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_oeq_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ogt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iselgt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ogt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iselgt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ogt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_oge_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_oge_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_oge_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"oge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_olt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isellt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_olt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isellt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_olt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"olt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ole_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ole_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ole_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ole", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_one_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_one_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_one_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"one", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ord_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isel r3, r4, r3, un ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ord_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isel r3, r4, r3, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ord_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isel r3, r4, r3, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ord", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ueq_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ueq_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, eq, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ueq_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ugt_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ugt_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, gt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ugt_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_uge_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isellt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_uge_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_uge_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"uge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ult_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ult_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, lt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ult_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ult", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ule_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iselgt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ule_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ule_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"ule", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_une_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: iseleq r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_une_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_une_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"une", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_uno_q: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f2 ; P8-NEXT: isel r3, r3, r4, un ; P8-NEXT: blr ; ; P9-LABEL: test_f64_uno_q: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f2 ; P9-NEXT: isel r3, r3, r4, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_uno_q: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f2 ; NOVSX-NEXT: isel r3, r3, r4, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmp.f64( double %f1, double %f2, metadata !"uno", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_oeq_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iseleq r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_oeq_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iseleq r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_oeq_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ogt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iselgt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ogt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iselgt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ogt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_oge_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_oge_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_oge_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"oge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_olt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isellt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_olt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isellt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_olt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"olt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ole_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ole_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ole_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ole", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_one_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_one_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_one_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"one", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ord_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isel r3, r4, r3, un ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ord_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isel r3, r4, r3, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ord_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isel r3, r4, r3, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ord", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ueq_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ueq_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, eq, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ueq_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ugt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ugt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, gt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ugt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_uge_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isellt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_uge_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_uge_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"uge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ult_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ult_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, lt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ult_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ult", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_ule_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iselgt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_ule_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_ule_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"ule", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_une_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iseleq r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f32_une_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_une_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"une", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 { ; P8-LABEL: test_f32_uno_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isel r3, r3, r4, un ; P8-NEXT: blr ; ; P9-LABEL: test_f32_uno_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isel r3, r3, r4, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f32_uno_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isel r3, r3, r4, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f32( float %f1, float %f2, metadata !"uno", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_oeq_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iseleq r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_oeq_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iseleq r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_oeq_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"oeq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ogt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iselgt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ogt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iselgt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ogt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ogt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_oge_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_oge_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_oge_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"oge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_olt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isellt r3, r3, r4 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_olt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isellt r3, r3, r4 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_olt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r3, r4 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"olt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ole_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ole_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ole_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ole", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_one_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_one_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_one_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"one", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ord_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isel r3, r4, r3, un ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ord_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isel r3, r4, r3, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ord_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isel r3, r4, r3, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ord", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ueq_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ueq_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, eq, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ueq_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ueq", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ugt_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ugt_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, gt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ugt_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ugt", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_uge_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isellt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_uge_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_uge_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isellt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"uge", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ult_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ult_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: cror 4*cr5+lt, lt, un ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ult_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ult", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_ule_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iselgt r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_ule_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_ule_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iselgt r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"ule", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_une_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: iseleq r3, r4, r3 ; P8-NEXT: blr ; ; P9-LABEL: test_f64_une_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_une_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: iseleq r3, r4, r3 ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"une", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 { ; P8-LABEL: test_f64_uno_s: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f2 ; P8-NEXT: isel r3, r3, r4, un ; P8-NEXT: blr ; ; P9-LABEL: test_f64_uno_s: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f2 ; P9-NEXT: isel r3, r3, r4, un ; P9-NEXT: blr ; ; NOVSX-LABEL: test_f64_uno_s: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f2 ; NOVSX-NEXT: isel r3, r3, r4, un ; NOVSX-NEXT: blr %cond = call i1 @llvm.experimental.constrained.fcmps.f64( double %f1, double %f2, metadata !"uno", metadata !"fpexcept.strict") #0 %res = select i1 %cond, i32 %a, i32 %b ret i32 %res } define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_olt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __ltkf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_olt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_olt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __ltkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ole_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __lekf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ole_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: xscmpuqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ole_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __lekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ogt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gtkf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ogt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ogt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gtkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_oge_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gekf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_oge_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: xscmpuqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, lt, 4*cr1+lt ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_oge_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_oeq_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_oeq_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_oeq_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_one_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -176(r1) ; P8-NEXT: li r3, 128 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill ; P8-NEXT: li r3, 144 ; P8-NEXT: vmr v30, v2 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill ; P8-NEXT: vmr v31, v3 ; P8-NEXT: bl __unordkf2 ; P8-NEXT: nop ; P8-NEXT: vmr v2, v30 ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: vmr v3, v31 ; P8-NEXT: srwi r30, r3, 5 ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: li r4, 144 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload ; P8-NEXT: li r4, 128 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload ; P8-NEXT: and r3, r30, r3 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload ; P8-NEXT: addi r1, r1, 176 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_one_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: xscmpuqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, eq, 4*cr1+eq ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_one_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -80(r1) ; NOVSX-NEXT: mr r30, r6 ; NOVSX-NEXT: mr r29, r5 ; NOVSX-NEXT: mr r28, r4 ; NOVSX-NEXT: mr r27, r3 ; NOVSX-NEXT: bl __unordkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: mr r4, r28 ; NOVSX-NEXT: mr r5, r29 ; NOVSX-NEXT: mr r6, r30 ; NOVSX-NEXT: srwi r26, r3, 5 ; NOVSX-NEXT: mr r3, r27 ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: and r3, r26, r3 ; NOVSX-NEXT: addi r1, r1, 80 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ult_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gekf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ult_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, lt, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ult_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ule_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gtkf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ule_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: iselgt r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ule_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gtkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ugt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __lekf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ugt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, gt, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ugt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __lekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_uge_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __ltkf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_uge_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: isellt r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_uge_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __ltkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_ueq_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -176(r1) ; P8-NEXT: li r3, 128 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill ; P8-NEXT: li r3, 144 ; P8-NEXT: vmr v30, v2 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill ; P8-NEXT: vmr v31, v3 ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: vmr v2, v30 ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: vmr v3, v31 ; P8-NEXT: srwi r30, r3, 5 ; P8-NEXT: bl __unordkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: li r4, 144 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload ; P8-NEXT: li r4, 128 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload ; P8-NEXT: or r3, r3, r30 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload ; P8-NEXT: addi r1, r1, 176 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ueq_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, eq, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ueq_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -80(r1) ; NOVSX-NEXT: mr r30, r6 ; NOVSX-NEXT: mr r29, r5 ; NOVSX-NEXT: mr r28, r4 ; NOVSX-NEXT: mr r27, r3 ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: mr r4, r28 ; NOVSX-NEXT: mr r5, r29 ; NOVSX-NEXT: mr r6, r30 ; NOVSX-NEXT: srwi r26, r3, 5 ; NOVSX-NEXT: mr r3, r27 ; NOVSX-NEXT: bl __unordkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: or r3, r3, r26 ; NOVSX-NEXT: addi r1, r1, 80 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmp_une_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __nekf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmp_une_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpuqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: iseleq r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_une_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __nekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_olt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __ltkf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_olt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: isellt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_olt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __ltkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ole_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __lekf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ole_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: xscmpoqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ole_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __lekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ogt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gtkf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ogt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: iselgt r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ogt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gtkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_oge_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gekf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_oge_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: xscmpoqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, lt, 4*cr1+lt ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_oge_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_oeq_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_oeq_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 0 ; P9-NEXT: li r4, 1 ; P9-NEXT: iseleq r3, r4, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_oeq_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_one_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -176(r1) ; P8-NEXT: li r3, 128 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill ; P8-NEXT: li r3, 144 ; P8-NEXT: vmr v30, v2 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill ; P8-NEXT: vmr v31, v3 ; P8-NEXT: bl __unordkf2 ; P8-NEXT: nop ; P8-NEXT: vmr v2, v30 ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: vmr v3, v31 ; P8-NEXT: srwi r30, r3, 5 ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: li r4, 144 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload ; P8-NEXT: li r4, 128 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload ; P8-NEXT: and r3, r30, r3 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload ; P8-NEXT: addi r1, r1, 176 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_one_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: xscmpoqp cr1, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un ; P9-NEXT: crnor 4*cr5+gt, eq, 4*cr1+eq ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_one_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -80(r1) ; NOVSX-NEXT: mr r30, r6 ; NOVSX-NEXT: mr r29, r5 ; NOVSX-NEXT: mr r28, r4 ; NOVSX-NEXT: mr r27, r3 ; NOVSX-NEXT: bl __unordkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: mr r4, r28 ; NOVSX-NEXT: mr r5, r29 ; NOVSX-NEXT: mr r6, r30 ; NOVSX-NEXT: srwi r26, r3, 5 ; NOVSX-NEXT: mr r3, r27 ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: and r3, r26, r3 ; NOVSX-NEXT: addi r1, r1, 80 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ult_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gekf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ult_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, lt, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ult_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ule_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __gtkf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ule_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: iselgt r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ule_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __gtkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ugt_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __lekf2 ; P8-NEXT: nop ; P8-NEXT: extsw r3, r3 ; P8-NEXT: neg r3, r3 ; P8-NEXT: rldicl r3, r3, 1, 63 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ugt_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, gt, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ugt_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __lekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: extsw r3, r3 ; NOVSX-NEXT: neg r3, r3 ; NOVSX-NEXT: rldicl r3, r3, 1, 63 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_uge_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __ltkf2 ; P8-NEXT: nop ; P8-NEXT: rlwinm r3, r3, 1, 31, 31 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_uge_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: isellt r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_uge_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __ltkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_ueq_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -176(r1) ; P8-NEXT: li r3, 128 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill ; P8-NEXT: li r3, 144 ; P8-NEXT: vmr v30, v2 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill ; P8-NEXT: vmr v31, v3 ; P8-NEXT: bl __eqkf2 ; P8-NEXT: nop ; P8-NEXT: vmr v2, v30 ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: vmr v3, v31 ; P8-NEXT: srwi r30, r3, 5 ; P8-NEXT: bl __unordkf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: li r4, 144 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload ; P8-NEXT: li r4, 128 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload ; P8-NEXT: or r3, r3, r30 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload ; P8-NEXT: addi r1, r1, 176 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ueq_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, eq, un ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ueq_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -80(r1) ; NOVSX-NEXT: mr r30, r6 ; NOVSX-NEXT: mr r29, r5 ; NOVSX-NEXT: mr r28, r4 ; NOVSX-NEXT: mr r27, r3 ; NOVSX-NEXT: bl __eqkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: mr r4, r28 ; NOVSX-NEXT: mr r5, r29 ; NOVSX-NEXT: mr r6, r30 ; NOVSX-NEXT: srwi r26, r3, 5 ; NOVSX-NEXT: mr r3, r27 ; NOVSX-NEXT: bl __unordkf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: or r3, r3, r26 ; NOVSX-NEXT: addi r1, r1, 80 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 { ; P8-LABEL: fcmps_une_f128: ; P8: # %bb.0: ; P8-NEXT: mflr r0 ; P8-NEXT: std r0, 16(r1) ; P8-NEXT: stdu r1, -112(r1) ; P8-NEXT: bl __nekf2 ; P8-NEXT: nop ; P8-NEXT: cntlzw r3, r3 ; P8-NEXT: srwi r3, r3, 5 ; P8-NEXT: xori r3, r3, 1 ; P8-NEXT: addi r1, r1, 112 ; P8-NEXT: ld r0, 16(r1) ; P8-NEXT: mtlr r0 ; P8-NEXT: blr ; ; P9-LABEL: fcmps_une_f128: ; P9: # %bb.0: ; P9-NEXT: xscmpoqp cr0, v2, v3 ; P9-NEXT: li r3, 1 ; P9-NEXT: iseleq r3, 0, r3 ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_une_f128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: mflr r0 ; NOVSX-NEXT: std r0, 16(r1) ; NOVSX-NEXT: stdu r1, -32(r1) ; NOVSX-NEXT: bl __nekf2 ; NOVSX-NEXT: nop ; NOVSX-NEXT: cntlzw r3, r3 ; NOVSX-NEXT: srwi r3, r3, 5 ; NOVSX-NEXT: xori r3, r3, 1 ; NOVSX-NEXT: addi r1, r1, 32 ; NOVSX-NEXT: ld r0, 16(r1) ; NOVSX-NEXT: mtlr r0 ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_olt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f3 ; P8-NEXT: fcmpu cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; P8-NEXT: crandc 4*cr5+gt, lt, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_olt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; P9-NEXT: crandc 4*cr5+gt, lt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_olt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f3 ; NOVSX-NEXT: fcmpu cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ole_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ole_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, gt ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ole_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ogt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f3 ; P8-NEXT: fcmpu cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; P8-NEXT: crandc 4*cr5+gt, gt, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ogt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; P9-NEXT: crandc 4*cr5+gt, gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ogt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f3 ; NOVSX-NEXT: fcmpu cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_oge_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_oge_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, lt ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_oge_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_oeq_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f1, f3 ; P8-NEXT: fcmpu cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; P8-NEXT: crandc 4*cr5+gt, eq, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_oeq_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; P9-NEXT: crandc 4*cr5+gt, eq, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_oeq_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f1, f3 ; NOVSX-NEXT: fcmpu cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_one_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_one_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, eq ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_one_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ult_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ult_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, lt, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ult_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ule_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ule_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: fcmpu cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ule_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ugt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ugt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, gt, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ugt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_uge_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_uge_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: fcmpu cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_uge_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_ueq_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_ueq_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f1, f3 ; P9-NEXT: fcmpu cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, eq, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_ueq_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmp_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmp_une_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpu cr0, f2, f4 ; P8-NEXT: fcmpu cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmp_une_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpu cr0, f2, f4 ; P9-NEXT: fcmpu cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmp_une_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpu cr0, f2, f4 ; NOVSX-NEXT: fcmpu cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_olt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f3 ; P8-NEXT: fcmpo cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; P8-NEXT: crandc 4*cr5+gt, lt, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_olt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; P9-NEXT: crandc 4*cr5+gt, lt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_olt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f3 ; NOVSX-NEXT: fcmpo cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt ; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ole_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, gt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ole_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, gt ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, gt ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ole_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ogt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f3 ; P8-NEXT: fcmpo cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; P8-NEXT: crandc 4*cr5+gt, gt, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ogt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; P9-NEXT: crandc 4*cr5+gt, gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ogt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f3 ; NOVSX-NEXT: fcmpo cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt ; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_oge_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, lt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_oge_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, lt ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, lt ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_oge_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_oeq_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f1, f3 ; P8-NEXT: fcmpo cr1, f2, f4 ; P8-NEXT: li r3, 1 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; P8-NEXT: crandc 4*cr5+gt, eq, eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_oeq_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; P9-NEXT: crandc 4*cr5+gt, eq, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_oeq_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f1, f3 ; NOVSX-NEXT: fcmpo cr1, f2, f4 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq ; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_one_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crnor 4*cr5+lt, un, eq ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_one_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: crnor 4*cr5+lt, un, eq ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: crnor 4*cr5+gt, un, eq ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_one_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ult_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, lt, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ult_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, lt, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ult_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ule_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ule_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: fcmpo cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ule_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ugt_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, gt, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ugt_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, gt, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ugt_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_uge_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_uge_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: fcmpo cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_uge_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_ueq_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: cror 4*cr5+lt, eq, un ; P8-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_ueq_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f1, f3 ; P9-NEXT: fcmpo cr1, f2, f4 ; P9-NEXT: li r3, 1 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un ; P9-NEXT: cror 4*cr5+gt, eq, un ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_ueq_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @fcmps_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 { ; P8-LABEL: fcmps_une_ppcf128: ; P8: # %bb.0: ; P8-NEXT: fcmpo cr0, f2, f4 ; P8-NEXT: fcmpo cr1, f1, f3 ; P8-NEXT: li r3, 1 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt ; P8-NEXT: blr ; ; P9-LABEL: fcmps_une_ppcf128: ; P9: # %bb.0: ; P9-NEXT: fcmpo cr0, f2, f4 ; P9-NEXT: fcmpo cr1, f1, f3 ; P9-NEXT: li r3, 1 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt ; P9-NEXT: blr ; ; NOVSX-LABEL: fcmps_une_ppcf128: ; NOVSX: # %bb.0: ; NOVSX-NEXT: fcmpo cr0, f2, f4 ; NOVSX-NEXT: fcmpo cr1, f1, f3 ; NOVSX-NEXT: li r3, 1 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt ; NOVSX-NEXT: blr %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0 %conv = zext i1 %cmp to i32 ret i32 %conv } attributes #0 = { strictfp nounwind } declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) declare i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)