3646 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \3; RUN: < %s -mtriple=powerpc64-unknown-linux -mcpu=pwr8 | FileCheck %s \4; RUN: -check-prefix=P85; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \6; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 \7; RUN: | FileCheck %s -check-prefix=P98; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \9; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -mattr=-vsx | \10; RUN: FileCheck %s -check-prefix=NOVSX11 12define i32 @test_f32_oeq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {13; P8-LABEL: test_f32_oeq_q:14; P8: # %bb.0:15; P8-NEXT: fcmpu cr0, f1, f216; P8-NEXT: iseleq r3, r3, r417; P8-NEXT: blr18;19; P9-LABEL: test_f32_oeq_q:20; P9: # %bb.0:21; P9-NEXT: fcmpu cr0, f1, f222; P9-NEXT: iseleq r3, r3, r423; P9-NEXT: blr24;25; NOVSX-LABEL: test_f32_oeq_q:26; NOVSX: # %bb.0:27; NOVSX-NEXT: fcmpu cr0, f1, f228; NOVSX-NEXT: iseleq r3, r3, r429; NOVSX-NEXT: blr30 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(31 float %f1, float %f2, metadata !"oeq",32 metadata !"fpexcept.strict") #033 %res = select i1 %cond, i32 %a, i32 %b34 ret i32 %res35}36 37define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {38; P8-LABEL: test_f32_ogt_q:39; P8: # %bb.0:40; P8-NEXT: fcmpu cr0, f1, f241; P8-NEXT: iselgt r3, r3, r442; P8-NEXT: blr43;44; P9-LABEL: test_f32_ogt_q:45; P9: # %bb.0:46; P9-NEXT: fcmpu cr0, f1, f247; P9-NEXT: iselgt r3, r3, r448; P9-NEXT: blr49;50; NOVSX-LABEL: test_f32_ogt_q:51; NOVSX: # %bb.0:52; NOVSX-NEXT: fcmpu cr0, f1, f253; NOVSX-NEXT: iselgt r3, r3, r454; NOVSX-NEXT: blr55 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(56 float %f1, float %f2, metadata !"ogt",57 metadata !"fpexcept.strict") #058 %res = select i1 %cond, i32 %a, i32 %b59 ret i32 %res60}61 62define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {63; P8-LABEL: test_f32_oge_q:64; P8: # %bb.0:65; P8-NEXT: fcmpu cr0, f1, f266; P8-NEXT: crnor 4*cr5+lt, un, lt67; P8-NEXT: isel r3, r3, r4, 4*cr5+lt68; P8-NEXT: blr69;70; P9-LABEL: test_f32_oge_q:71; P9: # %bb.0:72; P9-NEXT: fcmpu cr0, f1, f273; P9-NEXT: crnor 4*cr5+lt, un, lt74; P9-NEXT: isel r3, r3, r4, 4*cr5+lt75; P9-NEXT: blr76;77; NOVSX-LABEL: test_f32_oge_q:78; NOVSX: # %bb.0:79; NOVSX-NEXT: fcmpu cr0, f1, f280; NOVSX-NEXT: crnor 4*cr5+lt, un, lt81; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt82; NOVSX-NEXT: blr83 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(84 float %f1, float %f2, metadata !"oge",85 metadata !"fpexcept.strict") #086 %res = select i1 %cond, i32 %a, i32 %b87 ret i32 %res88}89 90define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {91; P8-LABEL: test_f32_olt_q:92; P8: # %bb.0:93; P8-NEXT: fcmpu cr0, f1, f294; P8-NEXT: isellt r3, r3, r495; P8-NEXT: blr96;97; P9-LABEL: test_f32_olt_q:98; P9: # %bb.0:99; P9-NEXT: fcmpu cr0, f1, f2100; P9-NEXT: isellt r3, r3, r4101; P9-NEXT: blr102;103; NOVSX-LABEL: test_f32_olt_q:104; NOVSX: # %bb.0:105; NOVSX-NEXT: fcmpu cr0, f1, f2106; NOVSX-NEXT: isellt r3, r3, r4107; NOVSX-NEXT: blr108 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(109 float %f1, float %f2, metadata !"olt",110 metadata !"fpexcept.strict") #0111 %res = select i1 %cond, i32 %a, i32 %b112 ret i32 %res113}114 115define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 {116; P8-LABEL: test_f32_ole_q:117; P8: # %bb.0:118; P8-NEXT: fcmpu cr0, f1, f2119; P8-NEXT: crnor 4*cr5+lt, un, gt120; P8-NEXT: isel r3, r3, r4, 4*cr5+lt121; P8-NEXT: blr122;123; P9-LABEL: test_f32_ole_q:124; P9: # %bb.0:125; P9-NEXT: fcmpu cr0, f1, f2126; P9-NEXT: crnor 4*cr5+lt, un, gt127; P9-NEXT: isel r3, r3, r4, 4*cr5+lt128; P9-NEXT: blr129;130; NOVSX-LABEL: test_f32_ole_q:131; NOVSX: # %bb.0:132; NOVSX-NEXT: fcmpu cr0, f1, f2133; NOVSX-NEXT: crnor 4*cr5+lt, un, gt134; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt135; NOVSX-NEXT: blr136 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(137 float %f1, float %f2, metadata !"ole",138 metadata !"fpexcept.strict") #0139 %res = select i1 %cond, i32 %a, i32 %b140 ret i32 %res141}142 143define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 {144; P8-LABEL: test_f32_one_q:145; P8: # %bb.0:146; P8-NEXT: fcmpu cr0, f1, f2147; P8-NEXT: crnor 4*cr5+lt, un, eq148; P8-NEXT: isel r3, r3, r4, 4*cr5+lt149; P8-NEXT: blr150;151; P9-LABEL: test_f32_one_q:152; P9: # %bb.0:153; P9-NEXT: fcmpu cr0, f1, f2154; P9-NEXT: crnor 4*cr5+lt, un, eq155; P9-NEXT: isel r3, r3, r4, 4*cr5+lt156; P9-NEXT: blr157;158; NOVSX-LABEL: test_f32_one_q:159; NOVSX: # %bb.0:160; NOVSX-NEXT: fcmpu cr0, f1, f2161; NOVSX-NEXT: crnor 4*cr5+lt, un, eq162; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt163; NOVSX-NEXT: blr164 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(165 float %f1, float %f2, metadata !"one",166 metadata !"fpexcept.strict") #0167 %res = select i1 %cond, i32 %a, i32 %b168 ret i32 %res169}170 171define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 {172; P8-LABEL: test_f32_ord_q:173; P8: # %bb.0:174; P8-NEXT: fcmpu cr0, f1, f2175; P8-NEXT: isel r3, r4, r3, un176; P8-NEXT: blr177;178; P9-LABEL: test_f32_ord_q:179; P9: # %bb.0:180; P9-NEXT: fcmpu cr0, f1, f2181; P9-NEXT: isel r3, r4, r3, un182; P9-NEXT: blr183;184; NOVSX-LABEL: test_f32_ord_q:185; NOVSX: # %bb.0:186; NOVSX-NEXT: fcmpu cr0, f1, f2187; NOVSX-NEXT: isel r3, r4, r3, un188; NOVSX-NEXT: blr189 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(190 float %f1, float %f2, metadata !"ord",191 metadata !"fpexcept.strict") #0192 %res = select i1 %cond, i32 %a, i32 %b193 ret i32 %res194}195 196define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {197; P8-LABEL: test_f32_ueq_q:198; P8: # %bb.0:199; P8-NEXT: fcmpu cr0, f1, f2200; P8-NEXT: cror 4*cr5+lt, eq, un201; P8-NEXT: isel r3, r3, r4, 4*cr5+lt202; P8-NEXT: blr203;204; P9-LABEL: test_f32_ueq_q:205; P9: # %bb.0:206; P9-NEXT: fcmpu cr0, f1, f2207; P9-NEXT: cror 4*cr5+lt, eq, un208; P9-NEXT: isel r3, r3, r4, 4*cr5+lt209; P9-NEXT: blr210;211; NOVSX-LABEL: test_f32_ueq_q:212; NOVSX: # %bb.0:213; NOVSX-NEXT: fcmpu cr0, f1, f2214; NOVSX-NEXT: cror 4*cr5+lt, eq, un215; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt216; NOVSX-NEXT: blr217 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(218 float %f1, float %f2, metadata !"ueq",219 metadata !"fpexcept.strict") #0220 %res = select i1 %cond, i32 %a, i32 %b221 ret i32 %res222}223 224define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {225; P8-LABEL: test_f32_ugt_q:226; P8: # %bb.0:227; P8-NEXT: fcmpu cr0, f1, f2228; P8-NEXT: cror 4*cr5+lt, gt, un229; P8-NEXT: isel r3, r3, r4, 4*cr5+lt230; P8-NEXT: blr231;232; P9-LABEL: test_f32_ugt_q:233; P9: # %bb.0:234; P9-NEXT: fcmpu cr0, f1, f2235; P9-NEXT: cror 4*cr5+lt, gt, un236; P9-NEXT: isel r3, r3, r4, 4*cr5+lt237; P9-NEXT: blr238;239; NOVSX-LABEL: test_f32_ugt_q:240; NOVSX: # %bb.0:241; NOVSX-NEXT: fcmpu cr0, f1, f2242; NOVSX-NEXT: cror 4*cr5+lt, gt, un243; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt244; NOVSX-NEXT: blr245 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(246 float %f1, float %f2, metadata !"ugt",247 metadata !"fpexcept.strict") #0248 %res = select i1 %cond, i32 %a, i32 %b249 ret i32 %res250}251 252define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {253; P8-LABEL: test_f32_uge_q:254; P8: # %bb.0:255; P8-NEXT: fcmpu cr0, f1, f2256; P8-NEXT: isellt r3, r4, r3257; P8-NEXT: blr258;259; P9-LABEL: test_f32_uge_q:260; P9: # %bb.0:261; P9-NEXT: fcmpu cr0, f1, f2262; P9-NEXT: isellt r3, r4, r3263; P9-NEXT: blr264;265; NOVSX-LABEL: test_f32_uge_q:266; NOVSX: # %bb.0:267; NOVSX-NEXT: fcmpu cr0, f1, f2268; NOVSX-NEXT: isellt r3, r4, r3269; NOVSX-NEXT: blr270 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(271 float %f1, float %f2, metadata !"uge",272 metadata !"fpexcept.strict") #0273 %res = select i1 %cond, i32 %a, i32 %b274 ret i32 %res275}276 277define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 {278; P8-LABEL: test_f32_ult_q:279; P8: # %bb.0:280; P8-NEXT: fcmpu cr0, f1, f2281; P8-NEXT: cror 4*cr5+lt, lt, un282; P8-NEXT: isel r3, r3, r4, 4*cr5+lt283; P8-NEXT: blr284;285; P9-LABEL: test_f32_ult_q:286; P9: # %bb.0:287; P9-NEXT: fcmpu cr0, f1, f2288; P9-NEXT: cror 4*cr5+lt, lt, un289; P9-NEXT: isel r3, r3, r4, 4*cr5+lt290; P9-NEXT: blr291;292; NOVSX-LABEL: test_f32_ult_q:293; NOVSX: # %bb.0:294; NOVSX-NEXT: fcmpu cr0, f1, f2295; NOVSX-NEXT: cror 4*cr5+lt, lt, un296; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt297; NOVSX-NEXT: blr298 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(299 float %f1, float %f2, metadata !"ult",300 metadata !"fpexcept.strict") #0301 %res = select i1 %cond, i32 %a, i32 %b302 ret i32 %res303}304 305define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 {306; P8-LABEL: test_f32_ule_q:307; P8: # %bb.0:308; P8-NEXT: fcmpu cr0, f1, f2309; P8-NEXT: iselgt r3, r4, r3310; P8-NEXT: blr311;312; P9-LABEL: test_f32_ule_q:313; P9: # %bb.0:314; P9-NEXT: fcmpu cr0, f1, f2315; P9-NEXT: iselgt r3, r4, r3316; P9-NEXT: blr317;318; NOVSX-LABEL: test_f32_ule_q:319; NOVSX: # %bb.0:320; NOVSX-NEXT: fcmpu cr0, f1, f2321; NOVSX-NEXT: iselgt r3, r4, r3322; NOVSX-NEXT: blr323 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(324 float %f1, float %f2, metadata !"ule",325 metadata !"fpexcept.strict") #0326 %res = select i1 %cond, i32 %a, i32 %b327 ret i32 %res328}329 330define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 {331; P8-LABEL: test_f32_une_q:332; P8: # %bb.0:333; P8-NEXT: fcmpu cr0, f1, f2334; P8-NEXT: iseleq r3, r4, r3335; P8-NEXT: blr336;337; P9-LABEL: test_f32_une_q:338; P9: # %bb.0:339; P9-NEXT: fcmpu cr0, f1, f2340; P9-NEXT: iseleq r3, r4, r3341; P9-NEXT: blr342;343; NOVSX-LABEL: test_f32_une_q:344; NOVSX: # %bb.0:345; NOVSX-NEXT: fcmpu cr0, f1, f2346; NOVSX-NEXT: iseleq r3, r4, r3347; NOVSX-NEXT: blr348 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(349 float %f1, float %f2, metadata !"une",350 metadata !"fpexcept.strict") #0351 %res = select i1 %cond, i32 %a, i32 %b352 ret i32 %res353}354 355define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 {356; P8-LABEL: test_f32_uno_q:357; P8: # %bb.0:358; P8-NEXT: fcmpu cr0, f1, f2359; P8-NEXT: isel r3, r3, r4, un360; P8-NEXT: blr361;362; P9-LABEL: test_f32_uno_q:363; P9: # %bb.0:364; P9-NEXT: fcmpu cr0, f1, f2365; P9-NEXT: isel r3, r3, r4, un366; P9-NEXT: blr367;368; NOVSX-LABEL: test_f32_uno_q:369; NOVSX: # %bb.0:370; NOVSX-NEXT: fcmpu cr0, f1, f2371; NOVSX-NEXT: isel r3, r3, r4, un372; NOVSX-NEXT: blr373 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(374 float %f1, float %f2, metadata !"uno",375 metadata !"fpexcept.strict") #0376 %res = select i1 %cond, i32 %a, i32 %b377 ret i32 %res378}379 380define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {381; P8-LABEL: test_f64_oeq_q:382; P8: # %bb.0:383; P8-NEXT: fcmpu cr0, f1, f2384; P8-NEXT: iseleq r3, r3, r4385; P8-NEXT: blr386;387; P9-LABEL: test_f64_oeq_q:388; P9: # %bb.0:389; P9-NEXT: fcmpu cr0, f1, f2390; P9-NEXT: iseleq r3, r3, r4391; P9-NEXT: blr392;393; NOVSX-LABEL: test_f64_oeq_q:394; NOVSX: # %bb.0:395; NOVSX-NEXT: fcmpu cr0, f1, f2396; NOVSX-NEXT: iseleq r3, r3, r4397; NOVSX-NEXT: blr398 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(399 double %f1, double %f2, metadata !"oeq",400 metadata !"fpexcept.strict") #0401 %res = select i1 %cond, i32 %a, i32 %b402 ret i32 %res403}404 405define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {406; P8-LABEL: test_f64_ogt_q:407; P8: # %bb.0:408; P8-NEXT: fcmpu cr0, f1, f2409; P8-NEXT: iselgt r3, r3, r4410; P8-NEXT: blr411;412; P9-LABEL: test_f64_ogt_q:413; P9: # %bb.0:414; P9-NEXT: fcmpu cr0, f1, f2415; P9-NEXT: iselgt r3, r3, r4416; P9-NEXT: blr417;418; NOVSX-LABEL: test_f64_ogt_q:419; NOVSX: # %bb.0:420; NOVSX-NEXT: fcmpu cr0, f1, f2421; NOVSX-NEXT: iselgt r3, r3, r4422; NOVSX-NEXT: blr423 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(424 double %f1, double %f2, metadata !"ogt",425 metadata !"fpexcept.strict") #0426 %res = select i1 %cond, i32 %a, i32 %b427 ret i32 %res428}429 430define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {431; P8-LABEL: test_f64_oge_q:432; P8: # %bb.0:433; P8-NEXT: fcmpu cr0, f1, f2434; P8-NEXT: crnor 4*cr5+lt, un, lt435; P8-NEXT: isel r3, r3, r4, 4*cr5+lt436; P8-NEXT: blr437;438; P9-LABEL: test_f64_oge_q:439; P9: # %bb.0:440; P9-NEXT: fcmpu cr0, f1, f2441; P9-NEXT: crnor 4*cr5+lt, un, lt442; P9-NEXT: isel r3, r3, r4, 4*cr5+lt443; P9-NEXT: blr444;445; NOVSX-LABEL: test_f64_oge_q:446; NOVSX: # %bb.0:447; NOVSX-NEXT: fcmpu cr0, f1, f2448; NOVSX-NEXT: crnor 4*cr5+lt, un, lt449; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt450; NOVSX-NEXT: blr451 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(452 double %f1, double %f2, metadata !"oge",453 metadata !"fpexcept.strict") #0454 %res = select i1 %cond, i32 %a, i32 %b455 ret i32 %res456}457 458define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {459; P8-LABEL: test_f64_olt_q:460; P8: # %bb.0:461; P8-NEXT: fcmpu cr0, f1, f2462; P8-NEXT: isellt r3, r3, r4463; P8-NEXT: blr464;465; P9-LABEL: test_f64_olt_q:466; P9: # %bb.0:467; P9-NEXT: fcmpu cr0, f1, f2468; P9-NEXT: isellt r3, r3, r4469; P9-NEXT: blr470;471; NOVSX-LABEL: test_f64_olt_q:472; NOVSX: # %bb.0:473; NOVSX-NEXT: fcmpu cr0, f1, f2474; NOVSX-NEXT: isellt r3, r3, r4475; NOVSX-NEXT: blr476 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(477 double %f1, double %f2, metadata !"olt",478 metadata !"fpexcept.strict") #0479 %res = select i1 %cond, i32 %a, i32 %b480 ret i32 %res481}482 483define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 {484; P8-LABEL: test_f64_ole_q:485; P8: # %bb.0:486; P8-NEXT: fcmpu cr0, f1, f2487; P8-NEXT: crnor 4*cr5+lt, un, gt488; P8-NEXT: isel r3, r3, r4, 4*cr5+lt489; P8-NEXT: blr490;491; P9-LABEL: test_f64_ole_q:492; P9: # %bb.0:493; P9-NEXT: fcmpu cr0, f1, f2494; P9-NEXT: crnor 4*cr5+lt, un, gt495; P9-NEXT: isel r3, r3, r4, 4*cr5+lt496; P9-NEXT: blr497;498; NOVSX-LABEL: test_f64_ole_q:499; NOVSX: # %bb.0:500; NOVSX-NEXT: fcmpu cr0, f1, f2501; NOVSX-NEXT: crnor 4*cr5+lt, un, gt502; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt503; NOVSX-NEXT: blr504 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(505 double %f1, double %f2, metadata !"ole",506 metadata !"fpexcept.strict") #0507 %res = select i1 %cond, i32 %a, i32 %b508 ret i32 %res509}510 511define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 {512; P8-LABEL: test_f64_one_q:513; P8: # %bb.0:514; P8-NEXT: fcmpu cr0, f1, f2515; P8-NEXT: crnor 4*cr5+lt, un, eq516; P8-NEXT: isel r3, r3, r4, 4*cr5+lt517; P8-NEXT: blr518;519; P9-LABEL: test_f64_one_q:520; P9: # %bb.0:521; P9-NEXT: fcmpu cr0, f1, f2522; P9-NEXT: crnor 4*cr5+lt, un, eq523; P9-NEXT: isel r3, r3, r4, 4*cr5+lt524; P9-NEXT: blr525;526; NOVSX-LABEL: test_f64_one_q:527; NOVSX: # %bb.0:528; NOVSX-NEXT: fcmpu cr0, f1, f2529; NOVSX-NEXT: crnor 4*cr5+lt, un, eq530; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt531; NOVSX-NEXT: blr532 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(533 double %f1, double %f2, metadata !"one",534 metadata !"fpexcept.strict") #0535 %res = select i1 %cond, i32 %a, i32 %b536 ret i32 %res537}538 539define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 {540; P8-LABEL: test_f64_ord_q:541; P8: # %bb.0:542; P8-NEXT: fcmpu cr0, f1, f2543; P8-NEXT: isel r3, r4, r3, un544; P8-NEXT: blr545;546; P9-LABEL: test_f64_ord_q:547; P9: # %bb.0:548; P9-NEXT: fcmpu cr0, f1, f2549; P9-NEXT: isel r3, r4, r3, un550; P9-NEXT: blr551;552; NOVSX-LABEL: test_f64_ord_q:553; NOVSX: # %bb.0:554; NOVSX-NEXT: fcmpu cr0, f1, f2555; NOVSX-NEXT: isel r3, r4, r3, un556; NOVSX-NEXT: blr557 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(558 double %f1, double %f2, metadata !"ord",559 metadata !"fpexcept.strict") #0560 %res = select i1 %cond, i32 %a, i32 %b561 ret i32 %res562}563 564define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {565; P8-LABEL: test_f64_ueq_q:566; P8: # %bb.0:567; P8-NEXT: fcmpu cr0, f1, f2568; P8-NEXT: cror 4*cr5+lt, eq, un569; P8-NEXT: isel r3, r3, r4, 4*cr5+lt570; P8-NEXT: blr571;572; P9-LABEL: test_f64_ueq_q:573; P9: # %bb.0:574; P9-NEXT: fcmpu cr0, f1, f2575; P9-NEXT: cror 4*cr5+lt, eq, un576; P9-NEXT: isel r3, r3, r4, 4*cr5+lt577; P9-NEXT: blr578;579; NOVSX-LABEL: test_f64_ueq_q:580; NOVSX: # %bb.0:581; NOVSX-NEXT: fcmpu cr0, f1, f2582; NOVSX-NEXT: cror 4*cr5+lt, eq, un583; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt584; NOVSX-NEXT: blr585 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(586 double %f1, double %f2, metadata !"ueq",587 metadata !"fpexcept.strict") #0588 %res = select i1 %cond, i32 %a, i32 %b589 ret i32 %res590}591 592define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {593; P8-LABEL: test_f64_ugt_q:594; P8: # %bb.0:595; P8-NEXT: fcmpu cr0, f1, f2596; P8-NEXT: cror 4*cr5+lt, gt, un597; P8-NEXT: isel r3, r3, r4, 4*cr5+lt598; P8-NEXT: blr599;600; P9-LABEL: test_f64_ugt_q:601; P9: # %bb.0:602; P9-NEXT: fcmpu cr0, f1, f2603; P9-NEXT: cror 4*cr5+lt, gt, un604; P9-NEXT: isel r3, r3, r4, 4*cr5+lt605; P9-NEXT: blr606;607; NOVSX-LABEL: test_f64_ugt_q:608; NOVSX: # %bb.0:609; NOVSX-NEXT: fcmpu cr0, f1, f2610; NOVSX-NEXT: cror 4*cr5+lt, gt, un611; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt612; NOVSX-NEXT: blr613 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(614 double %f1, double %f2, metadata !"ugt",615 metadata !"fpexcept.strict") #0616 %res = select i1 %cond, i32 %a, i32 %b617 ret i32 %res618}619 620define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {621; P8-LABEL: test_f64_uge_q:622; P8: # %bb.0:623; P8-NEXT: fcmpu cr0, f1, f2624; P8-NEXT: isellt r3, r4, r3625; P8-NEXT: blr626;627; P9-LABEL: test_f64_uge_q:628; P9: # %bb.0:629; P9-NEXT: fcmpu cr0, f1, f2630; P9-NEXT: isellt r3, r4, r3631; P9-NEXT: blr632;633; NOVSX-LABEL: test_f64_uge_q:634; NOVSX: # %bb.0:635; NOVSX-NEXT: fcmpu cr0, f1, f2636; NOVSX-NEXT: isellt r3, r4, r3637; NOVSX-NEXT: blr638 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(639 double %f1, double %f2, metadata !"uge",640 metadata !"fpexcept.strict") #0641 %res = select i1 %cond, i32 %a, i32 %b642 ret i32 %res643}644 645define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 {646; P8-LABEL: test_f64_ult_q:647; P8: # %bb.0:648; P8-NEXT: fcmpu cr0, f1, f2649; P8-NEXT: cror 4*cr5+lt, lt, un650; P8-NEXT: isel r3, r3, r4, 4*cr5+lt651; P8-NEXT: blr652;653; P9-LABEL: test_f64_ult_q:654; P9: # %bb.0:655; P9-NEXT: fcmpu cr0, f1, f2656; P9-NEXT: cror 4*cr5+lt, lt, un657; P9-NEXT: isel r3, r3, r4, 4*cr5+lt658; P9-NEXT: blr659;660; NOVSX-LABEL: test_f64_ult_q:661; NOVSX: # %bb.0:662; NOVSX-NEXT: fcmpu cr0, f1, f2663; NOVSX-NEXT: cror 4*cr5+lt, lt, un664; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt665; NOVSX-NEXT: blr666 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(667 double %f1, double %f2, metadata !"ult",668 metadata !"fpexcept.strict") #0669 %res = select i1 %cond, i32 %a, i32 %b670 ret i32 %res671}672 673define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 {674; P8-LABEL: test_f64_ule_q:675; P8: # %bb.0:676; P8-NEXT: fcmpu cr0, f1, f2677; P8-NEXT: iselgt r3, r4, r3678; P8-NEXT: blr679;680; P9-LABEL: test_f64_ule_q:681; P9: # %bb.0:682; P9-NEXT: fcmpu cr0, f1, f2683; P9-NEXT: iselgt r3, r4, r3684; P9-NEXT: blr685;686; NOVSX-LABEL: test_f64_ule_q:687; NOVSX: # %bb.0:688; NOVSX-NEXT: fcmpu cr0, f1, f2689; NOVSX-NEXT: iselgt r3, r4, r3690; NOVSX-NEXT: blr691 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(692 double %f1, double %f2, metadata !"ule",693 metadata !"fpexcept.strict") #0694 %res = select i1 %cond, i32 %a, i32 %b695 ret i32 %res696}697 698define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 {699; P8-LABEL: test_f64_une_q:700; P8: # %bb.0:701; P8-NEXT: fcmpu cr0, f1, f2702; P8-NEXT: iseleq r3, r4, r3703; P8-NEXT: blr704;705; P9-LABEL: test_f64_une_q:706; P9: # %bb.0:707; P9-NEXT: fcmpu cr0, f1, f2708; P9-NEXT: iseleq r3, r4, r3709; P9-NEXT: blr710;711; NOVSX-LABEL: test_f64_une_q:712; NOVSX: # %bb.0:713; NOVSX-NEXT: fcmpu cr0, f1, f2714; NOVSX-NEXT: iseleq r3, r4, r3715; NOVSX-NEXT: blr716 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(717 double %f1, double %f2, metadata !"une",718 metadata !"fpexcept.strict") #0719 %res = select i1 %cond, i32 %a, i32 %b720 ret i32 %res721}722 723define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 {724; P8-LABEL: test_f64_uno_q:725; P8: # %bb.0:726; P8-NEXT: fcmpu cr0, f1, f2727; P8-NEXT: isel r3, r3, r4, un728; P8-NEXT: blr729;730; P9-LABEL: test_f64_uno_q:731; P9: # %bb.0:732; P9-NEXT: fcmpu cr0, f1, f2733; P9-NEXT: isel r3, r3, r4, un734; P9-NEXT: blr735;736; NOVSX-LABEL: test_f64_uno_q:737; NOVSX: # %bb.0:738; NOVSX-NEXT: fcmpu cr0, f1, f2739; NOVSX-NEXT: isel r3, r3, r4, un740; NOVSX-NEXT: blr741 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(742 double %f1, double %f2, metadata !"uno",743 metadata !"fpexcept.strict") #0744 %res = select i1 %cond, i32 %a, i32 %b745 ret i32 %res746}747 748define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {749; P8-LABEL: test_f32_oeq_s:750; P8: # %bb.0:751; P8-NEXT: fcmpo cr0, f1, f2752; P8-NEXT: iseleq r3, r3, r4753; P8-NEXT: blr754;755; P9-LABEL: test_f32_oeq_s:756; P9: # %bb.0:757; P9-NEXT: fcmpo cr0, f1, f2758; P9-NEXT: iseleq r3, r3, r4759; P9-NEXT: blr760;761; NOVSX-LABEL: test_f32_oeq_s:762; NOVSX: # %bb.0:763; NOVSX-NEXT: fcmpo cr0, f1, f2764; NOVSX-NEXT: iseleq r3, r3, r4765; NOVSX-NEXT: blr766 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(767 float %f1, float %f2, metadata !"oeq",768 metadata !"fpexcept.strict") #0769 %res = select i1 %cond, i32 %a, i32 %b770 ret i32 %res771}772 773define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {774; P8-LABEL: test_f32_ogt_s:775; P8: # %bb.0:776; P8-NEXT: fcmpo cr0, f1, f2777; P8-NEXT: iselgt r3, r3, r4778; P8-NEXT: blr779;780; P9-LABEL: test_f32_ogt_s:781; P9: # %bb.0:782; P9-NEXT: fcmpo cr0, f1, f2783; P9-NEXT: iselgt r3, r3, r4784; P9-NEXT: blr785;786; NOVSX-LABEL: test_f32_ogt_s:787; NOVSX: # %bb.0:788; NOVSX-NEXT: fcmpo cr0, f1, f2789; NOVSX-NEXT: iselgt r3, r3, r4790; NOVSX-NEXT: blr791 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(792 float %f1, float %f2, metadata !"ogt",793 metadata !"fpexcept.strict") #0794 %res = select i1 %cond, i32 %a, i32 %b795 ret i32 %res796}797 798define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {799; P8-LABEL: test_f32_oge_s:800; P8: # %bb.0:801; P8-NEXT: fcmpo cr0, f1, f2802; P8-NEXT: crnor 4*cr5+lt, un, lt803; P8-NEXT: isel r3, r3, r4, 4*cr5+lt804; P8-NEXT: blr805;806; P9-LABEL: test_f32_oge_s:807; P9: # %bb.0:808; P9-NEXT: fcmpo cr0, f1, f2809; P9-NEXT: crnor 4*cr5+lt, un, lt810; P9-NEXT: isel r3, r3, r4, 4*cr5+lt811; P9-NEXT: blr812;813; NOVSX-LABEL: test_f32_oge_s:814; NOVSX: # %bb.0:815; NOVSX-NEXT: fcmpo cr0, f1, f2816; NOVSX-NEXT: crnor 4*cr5+lt, un, lt817; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt818; NOVSX-NEXT: blr819 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(820 float %f1, float %f2, metadata !"oge",821 metadata !"fpexcept.strict") #0822 %res = select i1 %cond, i32 %a, i32 %b823 ret i32 %res824}825 826define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {827; P8-LABEL: test_f32_olt_s:828; P8: # %bb.0:829; P8-NEXT: fcmpo cr0, f1, f2830; P8-NEXT: isellt r3, r3, r4831; P8-NEXT: blr832;833; P9-LABEL: test_f32_olt_s:834; P9: # %bb.0:835; P9-NEXT: fcmpo cr0, f1, f2836; P9-NEXT: isellt r3, r3, r4837; P9-NEXT: blr838;839; NOVSX-LABEL: test_f32_olt_s:840; NOVSX: # %bb.0:841; NOVSX-NEXT: fcmpo cr0, f1, f2842; NOVSX-NEXT: isellt r3, r3, r4843; NOVSX-NEXT: blr844 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(845 float %f1, float %f2, metadata !"olt",846 metadata !"fpexcept.strict") #0847 %res = select i1 %cond, i32 %a, i32 %b848 ret i32 %res849}850 851define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {852; P8-LABEL: test_f32_ole_s:853; P8: # %bb.0:854; P8-NEXT: fcmpo cr0, f1, f2855; P8-NEXT: crnor 4*cr5+lt, un, gt856; P8-NEXT: isel r3, r3, r4, 4*cr5+lt857; P8-NEXT: blr858;859; P9-LABEL: test_f32_ole_s:860; P9: # %bb.0:861; P9-NEXT: fcmpo cr0, f1, f2862; P9-NEXT: crnor 4*cr5+lt, un, gt863; P9-NEXT: isel r3, r3, r4, 4*cr5+lt864; P9-NEXT: blr865;866; NOVSX-LABEL: test_f32_ole_s:867; NOVSX: # %bb.0:868; NOVSX-NEXT: fcmpo cr0, f1, f2869; NOVSX-NEXT: crnor 4*cr5+lt, un, gt870; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt871; NOVSX-NEXT: blr872 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(873 float %f1, float %f2, metadata !"ole",874 metadata !"fpexcept.strict") #0875 %res = select i1 %cond, i32 %a, i32 %b876 ret i32 %res877}878 879define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {880; P8-LABEL: test_f32_one_s:881; P8: # %bb.0:882; P8-NEXT: fcmpo cr0, f1, f2883; P8-NEXT: crnor 4*cr5+lt, un, eq884; P8-NEXT: isel r3, r3, r4, 4*cr5+lt885; P8-NEXT: blr886;887; P9-LABEL: test_f32_one_s:888; P9: # %bb.0:889; P9-NEXT: fcmpo cr0, f1, f2890; P9-NEXT: crnor 4*cr5+lt, un, eq891; P9-NEXT: isel r3, r3, r4, 4*cr5+lt892; P9-NEXT: blr893;894; NOVSX-LABEL: test_f32_one_s:895; NOVSX: # %bb.0:896; NOVSX-NEXT: fcmpo cr0, f1, f2897; NOVSX-NEXT: crnor 4*cr5+lt, un, eq898; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt899; NOVSX-NEXT: blr900 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(901 float %f1, float %f2, metadata !"one",902 metadata !"fpexcept.strict") #0903 %res = select i1 %cond, i32 %a, i32 %b904 ret i32 %res905}906 907define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {908; P8-LABEL: test_f32_ord_s:909; P8: # %bb.0:910; P8-NEXT: fcmpo cr0, f1, f2911; P8-NEXT: isel r3, r4, r3, un912; P8-NEXT: blr913;914; P9-LABEL: test_f32_ord_s:915; P9: # %bb.0:916; P9-NEXT: fcmpo cr0, f1, f2917; P9-NEXT: isel r3, r4, r3, un918; P9-NEXT: blr919;920; NOVSX-LABEL: test_f32_ord_s:921; NOVSX: # %bb.0:922; NOVSX-NEXT: fcmpo cr0, f1, f2923; NOVSX-NEXT: isel r3, r4, r3, un924; NOVSX-NEXT: blr925 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(926 float %f1, float %f2, metadata !"ord",927 metadata !"fpexcept.strict") #0928 %res = select i1 %cond, i32 %a, i32 %b929 ret i32 %res930}931 932define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {933; P8-LABEL: test_f32_ueq_s:934; P8: # %bb.0:935; P8-NEXT: fcmpo cr0, f1, f2936; P8-NEXT: cror 4*cr5+lt, eq, un937; P8-NEXT: isel r3, r3, r4, 4*cr5+lt938; P8-NEXT: blr939;940; P9-LABEL: test_f32_ueq_s:941; P9: # %bb.0:942; P9-NEXT: fcmpo cr0, f1, f2943; P9-NEXT: cror 4*cr5+lt, eq, un944; P9-NEXT: isel r3, r3, r4, 4*cr5+lt945; P9-NEXT: blr946;947; NOVSX-LABEL: test_f32_ueq_s:948; NOVSX: # %bb.0:949; NOVSX-NEXT: fcmpo cr0, f1, f2950; NOVSX-NEXT: cror 4*cr5+lt, eq, un951; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt952; NOVSX-NEXT: blr953 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(954 float %f1, float %f2, metadata !"ueq",955 metadata !"fpexcept.strict") #0956 %res = select i1 %cond, i32 %a, i32 %b957 ret i32 %res958}959 960define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {961; P8-LABEL: test_f32_ugt_s:962; P8: # %bb.0:963; P8-NEXT: fcmpo cr0, f1, f2964; P8-NEXT: cror 4*cr5+lt, gt, un965; P8-NEXT: isel r3, r3, r4, 4*cr5+lt966; P8-NEXT: blr967;968; P9-LABEL: test_f32_ugt_s:969; P9: # %bb.0:970; P9-NEXT: fcmpo cr0, f1, f2971; P9-NEXT: cror 4*cr5+lt, gt, un972; P9-NEXT: isel r3, r3, r4, 4*cr5+lt973; P9-NEXT: blr974;975; NOVSX-LABEL: test_f32_ugt_s:976; NOVSX: # %bb.0:977; NOVSX-NEXT: fcmpo cr0, f1, f2978; NOVSX-NEXT: cror 4*cr5+lt, gt, un979; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt980; NOVSX-NEXT: blr981 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(982 float %f1, float %f2, metadata !"ugt",983 metadata !"fpexcept.strict") #0984 %res = select i1 %cond, i32 %a, i32 %b985 ret i32 %res986}987 988define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {989; P8-LABEL: test_f32_uge_s:990; P8: # %bb.0:991; P8-NEXT: fcmpo cr0, f1, f2992; P8-NEXT: isellt r3, r4, r3993; P8-NEXT: blr994;995; P9-LABEL: test_f32_uge_s:996; P9: # %bb.0:997; P9-NEXT: fcmpo cr0, f1, f2998; P9-NEXT: isellt r3, r4, r3999; P9-NEXT: blr1000;1001; NOVSX-LABEL: test_f32_uge_s:1002; NOVSX: # %bb.0:1003; NOVSX-NEXT: fcmpo cr0, f1, f21004; NOVSX-NEXT: isellt r3, r4, r31005; NOVSX-NEXT: blr1006 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(1007 float %f1, float %f2, metadata !"uge",1008 metadata !"fpexcept.strict") #01009 %res = select i1 %cond, i32 %a, i32 %b1010 ret i32 %res1011}1012 1013define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {1014; P8-LABEL: test_f32_ult_s:1015; P8: # %bb.0:1016; P8-NEXT: fcmpo cr0, f1, f21017; P8-NEXT: cror 4*cr5+lt, lt, un1018; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1019; P8-NEXT: blr1020;1021; P9-LABEL: test_f32_ult_s:1022; P9: # %bb.0:1023; P9-NEXT: fcmpo cr0, f1, f21024; P9-NEXT: cror 4*cr5+lt, lt, un1025; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1026; P9-NEXT: blr1027;1028; NOVSX-LABEL: test_f32_ult_s:1029; NOVSX: # %bb.0:1030; NOVSX-NEXT: fcmpo cr0, f1, f21031; NOVSX-NEXT: cror 4*cr5+lt, lt, un1032; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1033; NOVSX-NEXT: blr1034 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(1035 float %f1, float %f2, metadata !"ult",1036 metadata !"fpexcept.strict") #01037 %res = select i1 %cond, i32 %a, i32 %b1038 ret i32 %res1039}1040 1041define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {1042; P8-LABEL: test_f32_ule_s:1043; P8: # %bb.0:1044; P8-NEXT: fcmpo cr0, f1, f21045; P8-NEXT: iselgt r3, r4, r31046; P8-NEXT: blr1047;1048; P9-LABEL: test_f32_ule_s:1049; P9: # %bb.0:1050; P9-NEXT: fcmpo cr0, f1, f21051; P9-NEXT: iselgt r3, r4, r31052; P9-NEXT: blr1053;1054; NOVSX-LABEL: test_f32_ule_s:1055; NOVSX: # %bb.0:1056; NOVSX-NEXT: fcmpo cr0, f1, f21057; NOVSX-NEXT: iselgt r3, r4, r31058; NOVSX-NEXT: blr1059 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(1060 float %f1, float %f2, metadata !"ule",1061 metadata !"fpexcept.strict") #01062 %res = select i1 %cond, i32 %a, i32 %b1063 ret i32 %res1064}1065 1066define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {1067; P8-LABEL: test_f32_une_s:1068; P8: # %bb.0:1069; P8-NEXT: fcmpo cr0, f1, f21070; P8-NEXT: iseleq r3, r4, r31071; P8-NEXT: blr1072;1073; P9-LABEL: test_f32_une_s:1074; P9: # %bb.0:1075; P9-NEXT: fcmpo cr0, f1, f21076; P9-NEXT: iseleq r3, r4, r31077; P9-NEXT: blr1078;1079; NOVSX-LABEL: test_f32_une_s:1080; NOVSX: # %bb.0:1081; NOVSX-NEXT: fcmpo cr0, f1, f21082; NOVSX-NEXT: iseleq r3, r4, r31083; NOVSX-NEXT: blr1084 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(1085 float %f1, float %f2, metadata !"une",1086 metadata !"fpexcept.strict") #01087 %res = select i1 %cond, i32 %a, i32 %b1088 ret i32 %res1089}1090 1091define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {1092; P8-LABEL: test_f32_uno_s:1093; P8: # %bb.0:1094; P8-NEXT: fcmpo cr0, f1, f21095; P8-NEXT: isel r3, r3, r4, un1096; P8-NEXT: blr1097;1098; P9-LABEL: test_f32_uno_s:1099; P9: # %bb.0:1100; P9-NEXT: fcmpo cr0, f1, f21101; P9-NEXT: isel r3, r3, r4, un1102; P9-NEXT: blr1103;1104; NOVSX-LABEL: test_f32_uno_s:1105; NOVSX: # %bb.0:1106; NOVSX-NEXT: fcmpo cr0, f1, f21107; NOVSX-NEXT: isel r3, r3, r4, un1108; NOVSX-NEXT: blr1109 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(1110 float %f1, float %f2, metadata !"uno",1111 metadata !"fpexcept.strict") #01112 %res = select i1 %cond, i32 %a, i32 %b1113 ret i32 %res1114}1115 1116define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1117; P8-LABEL: test_f64_oeq_s:1118; P8: # %bb.0:1119; P8-NEXT: fcmpo cr0, f1, f21120; P8-NEXT: iseleq r3, r3, r41121; P8-NEXT: blr1122;1123; P9-LABEL: test_f64_oeq_s:1124; P9: # %bb.0:1125; P9-NEXT: fcmpo cr0, f1, f21126; P9-NEXT: iseleq r3, r3, r41127; P9-NEXT: blr1128;1129; NOVSX-LABEL: test_f64_oeq_s:1130; NOVSX: # %bb.0:1131; NOVSX-NEXT: fcmpo cr0, f1, f21132; NOVSX-NEXT: iseleq r3, r3, r41133; NOVSX-NEXT: blr1134 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1135 double %f1, double %f2, metadata !"oeq",1136 metadata !"fpexcept.strict") #01137 %res = select i1 %cond, i32 %a, i32 %b1138 ret i32 %res1139}1140 1141define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1142; P8-LABEL: test_f64_ogt_s:1143; P8: # %bb.0:1144; P8-NEXT: fcmpo cr0, f1, f21145; P8-NEXT: iselgt r3, r3, r41146; P8-NEXT: blr1147;1148; P9-LABEL: test_f64_ogt_s:1149; P9: # %bb.0:1150; P9-NEXT: fcmpo cr0, f1, f21151; P9-NEXT: iselgt r3, r3, r41152; P9-NEXT: blr1153;1154; NOVSX-LABEL: test_f64_ogt_s:1155; NOVSX: # %bb.0:1156; NOVSX-NEXT: fcmpo cr0, f1, f21157; NOVSX-NEXT: iselgt r3, r3, r41158; NOVSX-NEXT: blr1159 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1160 double %f1, double %f2, metadata !"ogt",1161 metadata !"fpexcept.strict") #01162 %res = select i1 %cond, i32 %a, i32 %b1163 ret i32 %res1164}1165 1166define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1167; P8-LABEL: test_f64_oge_s:1168; P8: # %bb.0:1169; P8-NEXT: fcmpo cr0, f1, f21170; P8-NEXT: crnor 4*cr5+lt, un, lt1171; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1172; P8-NEXT: blr1173;1174; P9-LABEL: test_f64_oge_s:1175; P9: # %bb.0:1176; P9-NEXT: fcmpo cr0, f1, f21177; P9-NEXT: crnor 4*cr5+lt, un, lt1178; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1179; P9-NEXT: blr1180;1181; NOVSX-LABEL: test_f64_oge_s:1182; NOVSX: # %bb.0:1183; NOVSX-NEXT: fcmpo cr0, f1, f21184; NOVSX-NEXT: crnor 4*cr5+lt, un, lt1185; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1186; NOVSX-NEXT: blr1187 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1188 double %f1, double %f2, metadata !"oge",1189 metadata !"fpexcept.strict") #01190 %res = select i1 %cond, i32 %a, i32 %b1191 ret i32 %res1192}1193 1194define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1195; P8-LABEL: test_f64_olt_s:1196; P8: # %bb.0:1197; P8-NEXT: fcmpo cr0, f1, f21198; P8-NEXT: isellt r3, r3, r41199; P8-NEXT: blr1200;1201; P9-LABEL: test_f64_olt_s:1202; P9: # %bb.0:1203; P9-NEXT: fcmpo cr0, f1, f21204; P9-NEXT: isellt r3, r3, r41205; P9-NEXT: blr1206;1207; NOVSX-LABEL: test_f64_olt_s:1208; NOVSX: # %bb.0:1209; NOVSX-NEXT: fcmpo cr0, f1, f21210; NOVSX-NEXT: isellt r3, r3, r41211; NOVSX-NEXT: blr1212 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1213 double %f1, double %f2, metadata !"olt",1214 metadata !"fpexcept.strict") #01215 %res = select i1 %cond, i32 %a, i32 %b1216 ret i32 %res1217}1218 1219define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1220; P8-LABEL: test_f64_ole_s:1221; P8: # %bb.0:1222; P8-NEXT: fcmpo cr0, f1, f21223; P8-NEXT: crnor 4*cr5+lt, un, gt1224; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1225; P8-NEXT: blr1226;1227; P9-LABEL: test_f64_ole_s:1228; P9: # %bb.0:1229; P9-NEXT: fcmpo cr0, f1, f21230; P9-NEXT: crnor 4*cr5+lt, un, gt1231; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1232; P9-NEXT: blr1233;1234; NOVSX-LABEL: test_f64_ole_s:1235; NOVSX: # %bb.0:1236; NOVSX-NEXT: fcmpo cr0, f1, f21237; NOVSX-NEXT: crnor 4*cr5+lt, un, gt1238; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1239; NOVSX-NEXT: blr1240 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1241 double %f1, double %f2, metadata !"ole",1242 metadata !"fpexcept.strict") #01243 %res = select i1 %cond, i32 %a, i32 %b1244 ret i32 %res1245}1246 1247define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1248; P8-LABEL: test_f64_one_s:1249; P8: # %bb.0:1250; P8-NEXT: fcmpo cr0, f1, f21251; P8-NEXT: crnor 4*cr5+lt, un, eq1252; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1253; P8-NEXT: blr1254;1255; P9-LABEL: test_f64_one_s:1256; P9: # %bb.0:1257; P9-NEXT: fcmpo cr0, f1, f21258; P9-NEXT: crnor 4*cr5+lt, un, eq1259; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1260; P9-NEXT: blr1261;1262; NOVSX-LABEL: test_f64_one_s:1263; NOVSX: # %bb.0:1264; NOVSX-NEXT: fcmpo cr0, f1, f21265; NOVSX-NEXT: crnor 4*cr5+lt, un, eq1266; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1267; NOVSX-NEXT: blr1268 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1269 double %f1, double %f2, metadata !"one",1270 metadata !"fpexcept.strict") #01271 %res = select i1 %cond, i32 %a, i32 %b1272 ret i32 %res1273}1274 1275define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1276; P8-LABEL: test_f64_ord_s:1277; P8: # %bb.0:1278; P8-NEXT: fcmpo cr0, f1, f21279; P8-NEXT: isel r3, r4, r3, un1280; P8-NEXT: blr1281;1282; P9-LABEL: test_f64_ord_s:1283; P9: # %bb.0:1284; P9-NEXT: fcmpo cr0, f1, f21285; P9-NEXT: isel r3, r4, r3, un1286; P9-NEXT: blr1287;1288; NOVSX-LABEL: test_f64_ord_s:1289; NOVSX: # %bb.0:1290; NOVSX-NEXT: fcmpo cr0, f1, f21291; NOVSX-NEXT: isel r3, r4, r3, un1292; NOVSX-NEXT: blr1293 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1294 double %f1, double %f2, metadata !"ord",1295 metadata !"fpexcept.strict") #01296 %res = select i1 %cond, i32 %a, i32 %b1297 ret i32 %res1298}1299 1300define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1301; P8-LABEL: test_f64_ueq_s:1302; P8: # %bb.0:1303; P8-NEXT: fcmpo cr0, f1, f21304; P8-NEXT: cror 4*cr5+lt, eq, un1305; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1306; P8-NEXT: blr1307;1308; P9-LABEL: test_f64_ueq_s:1309; P9: # %bb.0:1310; P9-NEXT: fcmpo cr0, f1, f21311; P9-NEXT: cror 4*cr5+lt, eq, un1312; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1313; P9-NEXT: blr1314;1315; NOVSX-LABEL: test_f64_ueq_s:1316; NOVSX: # %bb.0:1317; NOVSX-NEXT: fcmpo cr0, f1, f21318; NOVSX-NEXT: cror 4*cr5+lt, eq, un1319; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1320; NOVSX-NEXT: blr1321 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1322 double %f1, double %f2, metadata !"ueq",1323 metadata !"fpexcept.strict") #01324 %res = select i1 %cond, i32 %a, i32 %b1325 ret i32 %res1326}1327 1328define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1329; P8-LABEL: test_f64_ugt_s:1330; P8: # %bb.0:1331; P8-NEXT: fcmpo cr0, f1, f21332; P8-NEXT: cror 4*cr5+lt, gt, un1333; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1334; P8-NEXT: blr1335;1336; P9-LABEL: test_f64_ugt_s:1337; P9: # %bb.0:1338; P9-NEXT: fcmpo cr0, f1, f21339; P9-NEXT: cror 4*cr5+lt, gt, un1340; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1341; P9-NEXT: blr1342;1343; NOVSX-LABEL: test_f64_ugt_s:1344; NOVSX: # %bb.0:1345; NOVSX-NEXT: fcmpo cr0, f1, f21346; NOVSX-NEXT: cror 4*cr5+lt, gt, un1347; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1348; NOVSX-NEXT: blr1349 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1350 double %f1, double %f2, metadata !"ugt",1351 metadata !"fpexcept.strict") #01352 %res = select i1 %cond, i32 %a, i32 %b1353 ret i32 %res1354}1355 1356define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1357; P8-LABEL: test_f64_uge_s:1358; P8: # %bb.0:1359; P8-NEXT: fcmpo cr0, f1, f21360; P8-NEXT: isellt r3, r4, r31361; P8-NEXT: blr1362;1363; P9-LABEL: test_f64_uge_s:1364; P9: # %bb.0:1365; P9-NEXT: fcmpo cr0, f1, f21366; P9-NEXT: isellt r3, r4, r31367; P9-NEXT: blr1368;1369; NOVSX-LABEL: test_f64_uge_s:1370; NOVSX: # %bb.0:1371; NOVSX-NEXT: fcmpo cr0, f1, f21372; NOVSX-NEXT: isellt r3, r4, r31373; NOVSX-NEXT: blr1374 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1375 double %f1, double %f2, metadata !"uge",1376 metadata !"fpexcept.strict") #01377 %res = select i1 %cond, i32 %a, i32 %b1378 ret i32 %res1379}1380 1381define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1382; P8-LABEL: test_f64_ult_s:1383; P8: # %bb.0:1384; P8-NEXT: fcmpo cr0, f1, f21385; P8-NEXT: cror 4*cr5+lt, lt, un1386; P8-NEXT: isel r3, r3, r4, 4*cr5+lt1387; P8-NEXT: blr1388;1389; P9-LABEL: test_f64_ult_s:1390; P9: # %bb.0:1391; P9-NEXT: fcmpo cr0, f1, f21392; P9-NEXT: cror 4*cr5+lt, lt, un1393; P9-NEXT: isel r3, r3, r4, 4*cr5+lt1394; P9-NEXT: blr1395;1396; NOVSX-LABEL: test_f64_ult_s:1397; NOVSX: # %bb.0:1398; NOVSX-NEXT: fcmpo cr0, f1, f21399; NOVSX-NEXT: cror 4*cr5+lt, lt, un1400; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt1401; NOVSX-NEXT: blr1402 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1403 double %f1, double %f2, metadata !"ult",1404 metadata !"fpexcept.strict") #01405 %res = select i1 %cond, i32 %a, i32 %b1406 ret i32 %res1407}1408 1409define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1410; P8-LABEL: test_f64_ule_s:1411; P8: # %bb.0:1412; P8-NEXT: fcmpo cr0, f1, f21413; P8-NEXT: iselgt r3, r4, r31414; P8-NEXT: blr1415;1416; P9-LABEL: test_f64_ule_s:1417; P9: # %bb.0:1418; P9-NEXT: fcmpo cr0, f1, f21419; P9-NEXT: iselgt r3, r4, r31420; P9-NEXT: blr1421;1422; NOVSX-LABEL: test_f64_ule_s:1423; NOVSX: # %bb.0:1424; NOVSX-NEXT: fcmpo cr0, f1, f21425; NOVSX-NEXT: iselgt r3, r4, r31426; NOVSX-NEXT: blr1427 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1428 double %f1, double %f2, metadata !"ule",1429 metadata !"fpexcept.strict") #01430 %res = select i1 %cond, i32 %a, i32 %b1431 ret i32 %res1432}1433 1434define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1435; P8-LABEL: test_f64_une_s:1436; P8: # %bb.0:1437; P8-NEXT: fcmpo cr0, f1, f21438; P8-NEXT: iseleq r3, r4, r31439; P8-NEXT: blr1440;1441; P9-LABEL: test_f64_une_s:1442; P9: # %bb.0:1443; P9-NEXT: fcmpo cr0, f1, f21444; P9-NEXT: iseleq r3, r4, r31445; P9-NEXT: blr1446;1447; NOVSX-LABEL: test_f64_une_s:1448; NOVSX: # %bb.0:1449; NOVSX-NEXT: fcmpo cr0, f1, f21450; NOVSX-NEXT: iseleq r3, r4, r31451; NOVSX-NEXT: blr1452 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1453 double %f1, double %f2, metadata !"une",1454 metadata !"fpexcept.strict") #01455 %res = select i1 %cond, i32 %a, i32 %b1456 ret i32 %res1457}1458 1459define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {1460; P8-LABEL: test_f64_uno_s:1461; P8: # %bb.0:1462; P8-NEXT: fcmpo cr0, f1, f21463; P8-NEXT: isel r3, r3, r4, un1464; P8-NEXT: blr1465;1466; P9-LABEL: test_f64_uno_s:1467; P9: # %bb.0:1468; P9-NEXT: fcmpo cr0, f1, f21469; P9-NEXT: isel r3, r3, r4, un1470; P9-NEXT: blr1471;1472; NOVSX-LABEL: test_f64_uno_s:1473; NOVSX: # %bb.0:1474; NOVSX-NEXT: fcmpo cr0, f1, f21475; NOVSX-NEXT: isel r3, r3, r4, un1476; NOVSX-NEXT: blr1477 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(1478 double %f1, double %f2, metadata !"uno",1479 metadata !"fpexcept.strict") #01480 %res = select i1 %cond, i32 %a, i32 %b1481 ret i32 %res1482}1483 1484define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {1485; P8-LABEL: fcmp_olt_f128:1486; P8: # %bb.0:1487; P8-NEXT: mflr r01488; P8-NEXT: stdu r1, -112(r1)1489; P8-NEXT: std r0, 128(r1)1490; P8-NEXT: bl __ltkf21491; P8-NEXT: nop1492; P8-NEXT: rlwinm r3, r3, 1, 31, 311493; P8-NEXT: addi r1, r1, 1121494; P8-NEXT: ld r0, 16(r1)1495; P8-NEXT: mtlr r01496; P8-NEXT: blr1497;1498; P9-LABEL: fcmp_olt_f128:1499; P9: # %bb.0:1500; P9-NEXT: xscmpuqp cr0, v2, v31501; P9-NEXT: li r3, 01502; P9-NEXT: li r4, 11503; P9-NEXT: isellt r3, r4, r31504; P9-NEXT: blr1505;1506; NOVSX-LABEL: fcmp_olt_f128:1507; NOVSX: # %bb.0:1508; NOVSX-NEXT: mflr r01509; NOVSX-NEXT: stdu r1, -32(r1)1510; NOVSX-NEXT: std r0, 48(r1)1511; NOVSX-NEXT: bl __ltkf21512; NOVSX-NEXT: nop1513; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 311514; NOVSX-NEXT: addi r1, r1, 321515; NOVSX-NEXT: ld r0, 16(r1)1516; NOVSX-NEXT: mtlr r01517; NOVSX-NEXT: blr1518 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #01519 %conv = zext i1 %cmp to i321520 ret i32 %conv1521}1522 1523define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {1524; P8-LABEL: fcmp_ole_f128:1525; P8: # %bb.0:1526; P8-NEXT: mflr r01527; P8-NEXT: stdu r1, -112(r1)1528; P8-NEXT: std r0, 128(r1)1529; P8-NEXT: bl __lekf21530; P8-NEXT: nop1531; P8-NEXT: extsw r3, r31532; P8-NEXT: neg r3, r31533; P8-NEXT: rldicl r3, r3, 1, 631534; P8-NEXT: xori r3, r3, 11535; P8-NEXT: addi r1, r1, 1121536; P8-NEXT: ld r0, 16(r1)1537; P8-NEXT: mtlr r01538; P8-NEXT: blr1539;1540; P9-LABEL: fcmp_ole_f128:1541; P9: # %bb.0:1542; P9-NEXT: xscmpuqp cr0, v2, v31543; P9-NEXT: li r3, 11544; P9-NEXT: cror 4*cr5+lt, un, gt1545; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1546; P9-NEXT: blr1547;1548; NOVSX-LABEL: fcmp_ole_f128:1549; NOVSX: # %bb.0:1550; NOVSX-NEXT: mflr r01551; NOVSX-NEXT: stdu r1, -32(r1)1552; NOVSX-NEXT: std r0, 48(r1)1553; NOVSX-NEXT: bl __lekf21554; NOVSX-NEXT: nop1555; NOVSX-NEXT: extsw r3, r31556; NOVSX-NEXT: neg r3, r31557; NOVSX-NEXT: rldicl r3, r3, 1, 631558; NOVSX-NEXT: xori r3, r3, 11559; NOVSX-NEXT: addi r1, r1, 321560; NOVSX-NEXT: ld r0, 16(r1)1561; NOVSX-NEXT: mtlr r01562; NOVSX-NEXT: blr1563 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #01564 %conv = zext i1 %cmp to i321565 ret i32 %conv1566}1567 1568define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {1569; P8-LABEL: fcmp_ogt_f128:1570; P8: # %bb.0:1571; P8-NEXT: mflr r01572; P8-NEXT: stdu r1, -112(r1)1573; P8-NEXT: std r0, 128(r1)1574; P8-NEXT: bl __gtkf21575; P8-NEXT: nop1576; P8-NEXT: extsw r3, r31577; P8-NEXT: neg r3, r31578; P8-NEXT: rldicl r3, r3, 1, 631579; P8-NEXT: addi r1, r1, 1121580; P8-NEXT: ld r0, 16(r1)1581; P8-NEXT: mtlr r01582; P8-NEXT: blr1583;1584; P9-LABEL: fcmp_ogt_f128:1585; P9: # %bb.0:1586; P9-NEXT: xscmpuqp cr0, v2, v31587; P9-NEXT: li r3, 01588; P9-NEXT: li r4, 11589; P9-NEXT: iselgt r3, r4, r31590; P9-NEXT: blr1591;1592; NOVSX-LABEL: fcmp_ogt_f128:1593; NOVSX: # %bb.0:1594; NOVSX-NEXT: mflr r01595; NOVSX-NEXT: stdu r1, -32(r1)1596; NOVSX-NEXT: std r0, 48(r1)1597; NOVSX-NEXT: bl __gtkf21598; NOVSX-NEXT: nop1599; NOVSX-NEXT: extsw r3, r31600; NOVSX-NEXT: neg r3, r31601; NOVSX-NEXT: rldicl r3, r3, 1, 631602; NOVSX-NEXT: addi r1, r1, 321603; NOVSX-NEXT: ld r0, 16(r1)1604; NOVSX-NEXT: mtlr r01605; NOVSX-NEXT: blr1606 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #01607 %conv = zext i1 %cmp to i321608 ret i32 %conv1609}1610 1611define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {1612; P8-LABEL: fcmp_oge_f128:1613; P8: # %bb.0:1614; P8-NEXT: mflr r01615; P8-NEXT: stdu r1, -112(r1)1616; P8-NEXT: std r0, 128(r1)1617; P8-NEXT: bl __gekf21618; P8-NEXT: nop1619; P8-NEXT: rlwinm r3, r3, 1, 31, 311620; P8-NEXT: xori r3, r3, 11621; P8-NEXT: addi r1, r1, 1121622; P8-NEXT: ld r0, 16(r1)1623; P8-NEXT: mtlr r01624; P8-NEXT: blr1625;1626; P9-LABEL: fcmp_oge_f128:1627; P9: # %bb.0:1628; P9-NEXT: xscmpuqp cr0, v2, v31629; P9-NEXT: li r3, 11630; P9-NEXT: cror 4*cr5+lt, un, lt1631; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1632; P9-NEXT: blr1633;1634; NOVSX-LABEL: fcmp_oge_f128:1635; NOVSX: # %bb.0:1636; NOVSX-NEXT: mflr r01637; NOVSX-NEXT: stdu r1, -32(r1)1638; NOVSX-NEXT: std r0, 48(r1)1639; NOVSX-NEXT: bl __gekf21640; NOVSX-NEXT: nop1641; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 311642; NOVSX-NEXT: xori r3, r3, 11643; NOVSX-NEXT: addi r1, r1, 321644; NOVSX-NEXT: ld r0, 16(r1)1645; NOVSX-NEXT: mtlr r01646; NOVSX-NEXT: blr1647 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #01648 %conv = zext i1 %cmp to i321649 ret i32 %conv1650}1651 1652define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {1653; P8-LABEL: fcmp_oeq_f128:1654; P8: # %bb.0:1655; P8-NEXT: mflr r01656; P8-NEXT: stdu r1, -112(r1)1657; P8-NEXT: std r0, 128(r1)1658; P8-NEXT: bl __eqkf21659; P8-NEXT: nop1660; P8-NEXT: cntlzw r3, r31661; P8-NEXT: srwi r3, r3, 51662; P8-NEXT: addi r1, r1, 1121663; P8-NEXT: ld r0, 16(r1)1664; P8-NEXT: mtlr r01665; P8-NEXT: blr1666;1667; P9-LABEL: fcmp_oeq_f128:1668; P9: # %bb.0:1669; P9-NEXT: xscmpuqp cr0, v2, v31670; P9-NEXT: li r3, 01671; P9-NEXT: li r4, 11672; P9-NEXT: iseleq r3, r4, r31673; P9-NEXT: blr1674;1675; NOVSX-LABEL: fcmp_oeq_f128:1676; NOVSX: # %bb.0:1677; NOVSX-NEXT: mflr r01678; NOVSX-NEXT: stdu r1, -32(r1)1679; NOVSX-NEXT: std r0, 48(r1)1680; NOVSX-NEXT: bl __eqkf21681; NOVSX-NEXT: nop1682; NOVSX-NEXT: cntlzw r3, r31683; NOVSX-NEXT: srwi r3, r3, 51684; NOVSX-NEXT: addi r1, r1, 321685; NOVSX-NEXT: ld r0, 16(r1)1686; NOVSX-NEXT: mtlr r01687; NOVSX-NEXT: blr1688 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #01689 %conv = zext i1 %cmp to i321690 ret i32 %conv1691}1692 1693define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {1694; P8-LABEL: fcmp_one_f128:1695; P8: # %bb.0:1696; P8-NEXT: mflr r01697; P8-NEXT: stdu r1, -176(r1)1698; P8-NEXT: li r3, 1281699; P8-NEXT: std r0, 192(r1)1700; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill1701; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill1702; P8-NEXT: li r3, 1441703; P8-NEXT: vmr v30, v21704; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill1705; P8-NEXT: vmr v31, v31706; P8-NEXT: bl __unordkf21707; P8-NEXT: nop1708; P8-NEXT: cntlzw r3, r31709; P8-NEXT: vmr v2, v301710; P8-NEXT: vmr v3, v311711; P8-NEXT: srwi r30, r3, 51712; P8-NEXT: bl __eqkf21713; P8-NEXT: nop1714; P8-NEXT: cntlzw r3, r31715; P8-NEXT: li r4, 1441716; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload1717; P8-NEXT: li r4, 1281718; P8-NEXT: srwi r3, r3, 51719; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload1720; P8-NEXT: xori r3, r3, 11721; P8-NEXT: and r3, r30, r31722; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload1723; P8-NEXT: addi r1, r1, 1761724; P8-NEXT: ld r0, 16(r1)1725; P8-NEXT: mtlr r01726; P8-NEXT: blr1727;1728; P9-LABEL: fcmp_one_f128:1729; P9: # %bb.0:1730; P9-NEXT: xscmpuqp cr0, v2, v31731; P9-NEXT: li r3, 11732; P9-NEXT: cror 4*cr5+lt, un, eq1733; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1734; P9-NEXT: blr1735;1736; NOVSX-LABEL: fcmp_one_f128:1737; NOVSX: # %bb.0:1738; NOVSX-NEXT: mflr r01739; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill1740; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill1741; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill1742; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill1743; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill1744; NOVSX-NEXT: stdu r1, -80(r1)1745; NOVSX-NEXT: std r0, 96(r1)1746; NOVSX-NEXT: mr r30, r61747; NOVSX-NEXT: mr r29, r51748; NOVSX-NEXT: mr r28, r41749; NOVSX-NEXT: mr r27, r31750; NOVSX-NEXT: bl __unordkf21751; NOVSX-NEXT: nop1752; NOVSX-NEXT: cntlzw r3, r31753; NOVSX-NEXT: mr r4, r281754; NOVSX-NEXT: mr r5, r291755; NOVSX-NEXT: mr r6, r301756; NOVSX-NEXT: srwi r26, r3, 51757; NOVSX-NEXT: mr r3, r271758; NOVSX-NEXT: bl __eqkf21759; NOVSX-NEXT: nop1760; NOVSX-NEXT: cntlzw r3, r31761; NOVSX-NEXT: srwi r3, r3, 51762; NOVSX-NEXT: xori r3, r3, 11763; NOVSX-NEXT: and r3, r26, r31764; NOVSX-NEXT: addi r1, r1, 801765; NOVSX-NEXT: ld r0, 16(r1)1766; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1767; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload1768; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload1769; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload1770; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload1771; NOVSX-NEXT: mtlr r01772; NOVSX-NEXT: blr1773 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #01774 %conv = zext i1 %cmp to i321775 ret i32 %conv1776}1777 1778define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {1779; P8-LABEL: fcmp_ult_f128:1780; P8: # %bb.0:1781; P8-NEXT: mflr r01782; P8-NEXT: stdu r1, -112(r1)1783; P8-NEXT: std r0, 128(r1)1784; P8-NEXT: bl __gekf21785; P8-NEXT: nop1786; P8-NEXT: rlwinm r3, r3, 1, 31, 311787; P8-NEXT: addi r1, r1, 1121788; P8-NEXT: ld r0, 16(r1)1789; P8-NEXT: mtlr r01790; P8-NEXT: blr1791;1792; P9-LABEL: fcmp_ult_f128:1793; P9: # %bb.0:1794; P9-NEXT: xscmpuqp cr0, v2, v31795; P9-NEXT: li r3, 11796; P9-NEXT: crnor 4*cr5+lt, lt, un1797; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1798; P9-NEXT: blr1799;1800; NOVSX-LABEL: fcmp_ult_f128:1801; NOVSX: # %bb.0:1802; NOVSX-NEXT: mflr r01803; NOVSX-NEXT: stdu r1, -32(r1)1804; NOVSX-NEXT: std r0, 48(r1)1805; NOVSX-NEXT: bl __gekf21806; NOVSX-NEXT: nop1807; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 311808; NOVSX-NEXT: addi r1, r1, 321809; NOVSX-NEXT: ld r0, 16(r1)1810; NOVSX-NEXT: mtlr r01811; NOVSX-NEXT: blr1812 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #01813 %conv = zext i1 %cmp to i321814 ret i32 %conv1815}1816 1817define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {1818; P8-LABEL: fcmp_ule_f128:1819; P8: # %bb.0:1820; P8-NEXT: mflr r01821; P8-NEXT: stdu r1, -112(r1)1822; P8-NEXT: std r0, 128(r1)1823; P8-NEXT: bl __gtkf21824; P8-NEXT: nop1825; P8-NEXT: extsw r3, r31826; P8-NEXT: neg r3, r31827; P8-NEXT: rldicl r3, r3, 1, 631828; P8-NEXT: xori r3, r3, 11829; P8-NEXT: addi r1, r1, 1121830; P8-NEXT: ld r0, 16(r1)1831; P8-NEXT: mtlr r01832; P8-NEXT: blr1833;1834; P9-LABEL: fcmp_ule_f128:1835; P9: # %bb.0:1836; P9-NEXT: xscmpuqp cr0, v2, v31837; P9-NEXT: li r3, 11838; P9-NEXT: iselgt r3, 0, r31839; P9-NEXT: blr1840;1841; NOVSX-LABEL: fcmp_ule_f128:1842; NOVSX: # %bb.0:1843; NOVSX-NEXT: mflr r01844; NOVSX-NEXT: stdu r1, -32(r1)1845; NOVSX-NEXT: std r0, 48(r1)1846; NOVSX-NEXT: bl __gtkf21847; NOVSX-NEXT: nop1848; NOVSX-NEXT: extsw r3, r31849; NOVSX-NEXT: neg r3, r31850; NOVSX-NEXT: rldicl r3, r3, 1, 631851; NOVSX-NEXT: xori r3, r3, 11852; NOVSX-NEXT: addi r1, r1, 321853; NOVSX-NEXT: ld r0, 16(r1)1854; NOVSX-NEXT: mtlr r01855; NOVSX-NEXT: blr1856 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #01857 %conv = zext i1 %cmp to i321858 ret i32 %conv1859}1860 1861define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {1862; P8-LABEL: fcmp_ugt_f128:1863; P8: # %bb.0:1864; P8-NEXT: mflr r01865; P8-NEXT: stdu r1, -112(r1)1866; P8-NEXT: std r0, 128(r1)1867; P8-NEXT: bl __lekf21868; P8-NEXT: nop1869; P8-NEXT: extsw r3, r31870; P8-NEXT: neg r3, r31871; P8-NEXT: rldicl r3, r3, 1, 631872; P8-NEXT: addi r1, r1, 1121873; P8-NEXT: ld r0, 16(r1)1874; P8-NEXT: mtlr r01875; P8-NEXT: blr1876;1877; P9-LABEL: fcmp_ugt_f128:1878; P9: # %bb.0:1879; P9-NEXT: xscmpuqp cr0, v2, v31880; P9-NEXT: li r3, 11881; P9-NEXT: crnor 4*cr5+lt, gt, un1882; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1883; P9-NEXT: blr1884;1885; NOVSX-LABEL: fcmp_ugt_f128:1886; NOVSX: # %bb.0:1887; NOVSX-NEXT: mflr r01888; NOVSX-NEXT: stdu r1, -32(r1)1889; NOVSX-NEXT: std r0, 48(r1)1890; NOVSX-NEXT: bl __lekf21891; NOVSX-NEXT: nop1892; NOVSX-NEXT: extsw r3, r31893; NOVSX-NEXT: neg r3, r31894; NOVSX-NEXT: rldicl r3, r3, 1, 631895; NOVSX-NEXT: addi r1, r1, 321896; NOVSX-NEXT: ld r0, 16(r1)1897; NOVSX-NEXT: mtlr r01898; NOVSX-NEXT: blr1899 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #01900 %conv = zext i1 %cmp to i321901 ret i32 %conv1902}1903 1904define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {1905; P8-LABEL: fcmp_uge_f128:1906; P8: # %bb.0:1907; P8-NEXT: mflr r01908; P8-NEXT: stdu r1, -112(r1)1909; P8-NEXT: std r0, 128(r1)1910; P8-NEXT: bl __ltkf21911; P8-NEXT: nop1912; P8-NEXT: rlwinm r3, r3, 1, 31, 311913; P8-NEXT: xori r3, r3, 11914; P8-NEXT: addi r1, r1, 1121915; P8-NEXT: ld r0, 16(r1)1916; P8-NEXT: mtlr r01917; P8-NEXT: blr1918;1919; P9-LABEL: fcmp_uge_f128:1920; P9: # %bb.0:1921; P9-NEXT: xscmpuqp cr0, v2, v31922; P9-NEXT: li r3, 11923; P9-NEXT: isellt r3, 0, r31924; P9-NEXT: blr1925;1926; NOVSX-LABEL: fcmp_uge_f128:1927; NOVSX: # %bb.0:1928; NOVSX-NEXT: mflr r01929; NOVSX-NEXT: stdu r1, -32(r1)1930; NOVSX-NEXT: std r0, 48(r1)1931; NOVSX-NEXT: bl __ltkf21932; NOVSX-NEXT: nop1933; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 311934; NOVSX-NEXT: xori r3, r3, 11935; NOVSX-NEXT: addi r1, r1, 321936; NOVSX-NEXT: ld r0, 16(r1)1937; NOVSX-NEXT: mtlr r01938; NOVSX-NEXT: blr1939 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #01940 %conv = zext i1 %cmp to i321941 ret i32 %conv1942}1943 1944define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {1945; P8-LABEL: fcmp_ueq_f128:1946; P8: # %bb.0:1947; P8-NEXT: mflr r01948; P8-NEXT: stdu r1, -176(r1)1949; P8-NEXT: li r3, 1281950; P8-NEXT: std r0, 192(r1)1951; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill1952; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill1953; P8-NEXT: li r3, 1441954; P8-NEXT: vmr v30, v21955; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill1956; P8-NEXT: vmr v31, v31957; P8-NEXT: bl __eqkf21958; P8-NEXT: nop1959; P8-NEXT: cntlzw r3, r31960; P8-NEXT: vmr v2, v301961; P8-NEXT: vmr v3, v311962; P8-NEXT: srwi r30, r3, 51963; P8-NEXT: bl __unordkf21964; P8-NEXT: nop1965; P8-NEXT: cntlzw r3, r31966; P8-NEXT: li r4, 1441967; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload1968; P8-NEXT: li r4, 1281969; P8-NEXT: srwi r3, r3, 51970; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload1971; P8-NEXT: xori r3, r3, 11972; P8-NEXT: or r3, r3, r301973; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload1974; P8-NEXT: addi r1, r1, 1761975; P8-NEXT: ld r0, 16(r1)1976; P8-NEXT: mtlr r01977; P8-NEXT: blr1978;1979; P9-LABEL: fcmp_ueq_f128:1980; P9: # %bb.0:1981; P9-NEXT: xscmpuqp cr0, v2, v31982; P9-NEXT: li r3, 11983; P9-NEXT: crnor 4*cr5+lt, eq, un1984; P9-NEXT: isel r3, 0, r3, 4*cr5+lt1985; P9-NEXT: blr1986;1987; NOVSX-LABEL: fcmp_ueq_f128:1988; NOVSX: # %bb.0:1989; NOVSX-NEXT: mflr r01990; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill1991; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill1992; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill1993; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill1994; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill1995; NOVSX-NEXT: stdu r1, -80(r1)1996; NOVSX-NEXT: std r0, 96(r1)1997; NOVSX-NEXT: mr r30, r61998; NOVSX-NEXT: mr r29, r51999; NOVSX-NEXT: mr r28, r42000; NOVSX-NEXT: mr r27, r32001; NOVSX-NEXT: bl __eqkf22002; NOVSX-NEXT: nop2003; NOVSX-NEXT: cntlzw r3, r32004; NOVSX-NEXT: mr r4, r282005; NOVSX-NEXT: mr r5, r292006; NOVSX-NEXT: mr r6, r302007; NOVSX-NEXT: srwi r26, r3, 52008; NOVSX-NEXT: mr r3, r272009; NOVSX-NEXT: bl __unordkf22010; NOVSX-NEXT: nop2011; NOVSX-NEXT: cntlzw r3, r32012; NOVSX-NEXT: srwi r3, r3, 52013; NOVSX-NEXT: xori r3, r3, 12014; NOVSX-NEXT: or r3, r3, r262015; NOVSX-NEXT: addi r1, r1, 802016; NOVSX-NEXT: ld r0, 16(r1)2017; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload2018; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload2019; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload2020; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload2021; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload2022; NOVSX-NEXT: mtlr r02023; NOVSX-NEXT: blr2024 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #02025 %conv = zext i1 %cmp to i322026 ret i32 %conv2027}2028 2029define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {2030; P8-LABEL: fcmp_une_f128:2031; P8: # %bb.0:2032; P8-NEXT: mflr r02033; P8-NEXT: stdu r1, -112(r1)2034; P8-NEXT: std r0, 128(r1)2035; P8-NEXT: bl __nekf22036; P8-NEXT: nop2037; P8-NEXT: cntlzw r3, r32038; P8-NEXT: srwi r3, r3, 52039; P8-NEXT: xori r3, r3, 12040; P8-NEXT: addi r1, r1, 1122041; P8-NEXT: ld r0, 16(r1)2042; P8-NEXT: mtlr r02043; P8-NEXT: blr2044;2045; P9-LABEL: fcmp_une_f128:2046; P9: # %bb.0:2047; P9-NEXT: xscmpuqp cr0, v2, v32048; P9-NEXT: li r3, 12049; P9-NEXT: iseleq r3, 0, r32050; P9-NEXT: blr2051;2052; NOVSX-LABEL: fcmp_une_f128:2053; NOVSX: # %bb.0:2054; NOVSX-NEXT: mflr r02055; NOVSX-NEXT: stdu r1, -32(r1)2056; NOVSX-NEXT: std r0, 48(r1)2057; NOVSX-NEXT: bl __nekf22058; NOVSX-NEXT: nop2059; NOVSX-NEXT: cntlzw r3, r32060; NOVSX-NEXT: srwi r3, r3, 52061; NOVSX-NEXT: xori r3, r3, 12062; NOVSX-NEXT: addi r1, r1, 322063; NOVSX-NEXT: ld r0, 16(r1)2064; NOVSX-NEXT: mtlr r02065; NOVSX-NEXT: blr2066 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #02067 %conv = zext i1 %cmp to i322068 ret i32 %conv2069}2070 2071define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {2072; P8-LABEL: fcmps_olt_f128:2073; P8: # %bb.0:2074; P8-NEXT: mflr r02075; P8-NEXT: stdu r1, -112(r1)2076; P8-NEXT: std r0, 128(r1)2077; P8-NEXT: bl __ltkf22078; P8-NEXT: nop2079; P8-NEXT: rlwinm r3, r3, 1, 31, 312080; P8-NEXT: addi r1, r1, 1122081; P8-NEXT: ld r0, 16(r1)2082; P8-NEXT: mtlr r02083; P8-NEXT: blr2084;2085; P9-LABEL: fcmps_olt_f128:2086; P9: # %bb.0:2087; P9-NEXT: xscmpoqp cr0, v2, v32088; P9-NEXT: li r3, 02089; P9-NEXT: li r4, 12090; P9-NEXT: isellt r3, r4, r32091; P9-NEXT: blr2092;2093; NOVSX-LABEL: fcmps_olt_f128:2094; NOVSX: # %bb.0:2095; NOVSX-NEXT: mflr r02096; NOVSX-NEXT: stdu r1, -32(r1)2097; NOVSX-NEXT: std r0, 48(r1)2098; NOVSX-NEXT: bl __ltkf22099; NOVSX-NEXT: nop2100; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 312101; NOVSX-NEXT: addi r1, r1, 322102; NOVSX-NEXT: ld r0, 16(r1)2103; NOVSX-NEXT: mtlr r02104; NOVSX-NEXT: blr2105 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #02106 %conv = zext i1 %cmp to i322107 ret i32 %conv2108}2109 2110define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {2111; P8-LABEL: fcmps_ole_f128:2112; P8: # %bb.0:2113; P8-NEXT: mflr r02114; P8-NEXT: stdu r1, -112(r1)2115; P8-NEXT: std r0, 128(r1)2116; P8-NEXT: bl __lekf22117; P8-NEXT: nop2118; P8-NEXT: extsw r3, r32119; P8-NEXT: neg r3, r32120; P8-NEXT: rldicl r3, r3, 1, 632121; P8-NEXT: xori r3, r3, 12122; P8-NEXT: addi r1, r1, 1122123; P8-NEXT: ld r0, 16(r1)2124; P8-NEXT: mtlr r02125; P8-NEXT: blr2126;2127; P9-LABEL: fcmps_ole_f128:2128; P9: # %bb.0:2129; P9-NEXT: xscmpoqp cr0, v2, v32130; P9-NEXT: li r3, 12131; P9-NEXT: cror 4*cr5+lt, un, gt2132; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2133; P9-NEXT: blr2134;2135; NOVSX-LABEL: fcmps_ole_f128:2136; NOVSX: # %bb.0:2137; NOVSX-NEXT: mflr r02138; NOVSX-NEXT: stdu r1, -32(r1)2139; NOVSX-NEXT: std r0, 48(r1)2140; NOVSX-NEXT: bl __lekf22141; NOVSX-NEXT: nop2142; NOVSX-NEXT: extsw r3, r32143; NOVSX-NEXT: neg r3, r32144; NOVSX-NEXT: rldicl r3, r3, 1, 632145; NOVSX-NEXT: xori r3, r3, 12146; NOVSX-NEXT: addi r1, r1, 322147; NOVSX-NEXT: ld r0, 16(r1)2148; NOVSX-NEXT: mtlr r02149; NOVSX-NEXT: blr2150 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #02151 %conv = zext i1 %cmp to i322152 ret i32 %conv2153}2154 2155define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {2156; P8-LABEL: fcmps_ogt_f128:2157; P8: # %bb.0:2158; P8-NEXT: mflr r02159; P8-NEXT: stdu r1, -112(r1)2160; P8-NEXT: std r0, 128(r1)2161; P8-NEXT: bl __gtkf22162; P8-NEXT: nop2163; P8-NEXT: extsw r3, r32164; P8-NEXT: neg r3, r32165; P8-NEXT: rldicl r3, r3, 1, 632166; P8-NEXT: addi r1, r1, 1122167; P8-NEXT: ld r0, 16(r1)2168; P8-NEXT: mtlr r02169; P8-NEXT: blr2170;2171; P9-LABEL: fcmps_ogt_f128:2172; P9: # %bb.0:2173; P9-NEXT: xscmpoqp cr0, v2, v32174; P9-NEXT: li r3, 02175; P9-NEXT: li r4, 12176; P9-NEXT: iselgt r3, r4, r32177; P9-NEXT: blr2178;2179; NOVSX-LABEL: fcmps_ogt_f128:2180; NOVSX: # %bb.0:2181; NOVSX-NEXT: mflr r02182; NOVSX-NEXT: stdu r1, -32(r1)2183; NOVSX-NEXT: std r0, 48(r1)2184; NOVSX-NEXT: bl __gtkf22185; NOVSX-NEXT: nop2186; NOVSX-NEXT: extsw r3, r32187; NOVSX-NEXT: neg r3, r32188; NOVSX-NEXT: rldicl r3, r3, 1, 632189; NOVSX-NEXT: addi r1, r1, 322190; NOVSX-NEXT: ld r0, 16(r1)2191; NOVSX-NEXT: mtlr r02192; NOVSX-NEXT: blr2193 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #02194 %conv = zext i1 %cmp to i322195 ret i32 %conv2196}2197 2198define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {2199; P8-LABEL: fcmps_oge_f128:2200; P8: # %bb.0:2201; P8-NEXT: mflr r02202; P8-NEXT: stdu r1, -112(r1)2203; P8-NEXT: std r0, 128(r1)2204; P8-NEXT: bl __gekf22205; P8-NEXT: nop2206; P8-NEXT: rlwinm r3, r3, 1, 31, 312207; P8-NEXT: xori r3, r3, 12208; P8-NEXT: addi r1, r1, 1122209; P8-NEXT: ld r0, 16(r1)2210; P8-NEXT: mtlr r02211; P8-NEXT: blr2212;2213; P9-LABEL: fcmps_oge_f128:2214; P9: # %bb.0:2215; P9-NEXT: xscmpoqp cr0, v2, v32216; P9-NEXT: li r3, 12217; P9-NEXT: cror 4*cr5+lt, un, lt2218; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2219; P9-NEXT: blr2220;2221; NOVSX-LABEL: fcmps_oge_f128:2222; NOVSX: # %bb.0:2223; NOVSX-NEXT: mflr r02224; NOVSX-NEXT: stdu r1, -32(r1)2225; NOVSX-NEXT: std r0, 48(r1)2226; NOVSX-NEXT: bl __gekf22227; NOVSX-NEXT: nop2228; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 312229; NOVSX-NEXT: xori r3, r3, 12230; NOVSX-NEXT: addi r1, r1, 322231; NOVSX-NEXT: ld r0, 16(r1)2232; NOVSX-NEXT: mtlr r02233; NOVSX-NEXT: blr2234 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #02235 %conv = zext i1 %cmp to i322236 ret i32 %conv2237}2238 2239define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {2240; P8-LABEL: fcmps_oeq_f128:2241; P8: # %bb.0:2242; P8-NEXT: mflr r02243; P8-NEXT: stdu r1, -112(r1)2244; P8-NEXT: std r0, 128(r1)2245; P8-NEXT: bl __eqkf22246; P8-NEXT: nop2247; P8-NEXT: cntlzw r3, r32248; P8-NEXT: srwi r3, r3, 52249; P8-NEXT: addi r1, r1, 1122250; P8-NEXT: ld r0, 16(r1)2251; P8-NEXT: mtlr r02252; P8-NEXT: blr2253;2254; P9-LABEL: fcmps_oeq_f128:2255; P9: # %bb.0:2256; P9-NEXT: xscmpoqp cr0, v2, v32257; P9-NEXT: li r3, 02258; P9-NEXT: li r4, 12259; P9-NEXT: iseleq r3, r4, r32260; P9-NEXT: blr2261;2262; NOVSX-LABEL: fcmps_oeq_f128:2263; NOVSX: # %bb.0:2264; NOVSX-NEXT: mflr r02265; NOVSX-NEXT: stdu r1, -32(r1)2266; NOVSX-NEXT: std r0, 48(r1)2267; NOVSX-NEXT: bl __eqkf22268; NOVSX-NEXT: nop2269; NOVSX-NEXT: cntlzw r3, r32270; NOVSX-NEXT: srwi r3, r3, 52271; NOVSX-NEXT: addi r1, r1, 322272; NOVSX-NEXT: ld r0, 16(r1)2273; NOVSX-NEXT: mtlr r02274; NOVSX-NEXT: blr2275 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #02276 %conv = zext i1 %cmp to i322277 ret i32 %conv2278}2279 2280define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {2281; P8-LABEL: fcmps_one_f128:2282; P8: # %bb.0:2283; P8-NEXT: mflr r02284; P8-NEXT: stdu r1, -176(r1)2285; P8-NEXT: li r3, 1282286; P8-NEXT: std r0, 192(r1)2287; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill2288; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill2289; P8-NEXT: li r3, 1442290; P8-NEXT: vmr v30, v22291; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill2292; P8-NEXT: vmr v31, v32293; P8-NEXT: bl __unordkf22294; P8-NEXT: nop2295; P8-NEXT: cntlzw r3, r32296; P8-NEXT: vmr v2, v302297; P8-NEXT: vmr v3, v312298; P8-NEXT: srwi r30, r3, 52299; P8-NEXT: bl __eqkf22300; P8-NEXT: nop2301; P8-NEXT: cntlzw r3, r32302; P8-NEXT: li r4, 1442303; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload2304; P8-NEXT: li r4, 1282305; P8-NEXT: srwi r3, r3, 52306; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload2307; P8-NEXT: xori r3, r3, 12308; P8-NEXT: and r3, r30, r32309; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload2310; P8-NEXT: addi r1, r1, 1762311; P8-NEXT: ld r0, 16(r1)2312; P8-NEXT: mtlr r02313; P8-NEXT: blr2314;2315; P9-LABEL: fcmps_one_f128:2316; P9: # %bb.0:2317; P9-NEXT: xscmpoqp cr0, v2, v32318; P9-NEXT: li r3, 12319; P9-NEXT: cror 4*cr5+lt, un, eq2320; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2321; P9-NEXT: blr2322;2323; NOVSX-LABEL: fcmps_one_f128:2324; NOVSX: # %bb.0:2325; NOVSX-NEXT: mflr r02326; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill2327; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill2328; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill2329; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill2330; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill2331; NOVSX-NEXT: stdu r1, -80(r1)2332; NOVSX-NEXT: std r0, 96(r1)2333; NOVSX-NEXT: mr r30, r62334; NOVSX-NEXT: mr r29, r52335; NOVSX-NEXT: mr r28, r42336; NOVSX-NEXT: mr r27, r32337; NOVSX-NEXT: bl __unordkf22338; NOVSX-NEXT: nop2339; NOVSX-NEXT: cntlzw r3, r32340; NOVSX-NEXT: mr r4, r282341; NOVSX-NEXT: mr r5, r292342; NOVSX-NEXT: mr r6, r302343; NOVSX-NEXT: srwi r26, r3, 52344; NOVSX-NEXT: mr r3, r272345; NOVSX-NEXT: bl __eqkf22346; NOVSX-NEXT: nop2347; NOVSX-NEXT: cntlzw r3, r32348; NOVSX-NEXT: srwi r3, r3, 52349; NOVSX-NEXT: xori r3, r3, 12350; NOVSX-NEXT: and r3, r26, r32351; NOVSX-NEXT: addi r1, r1, 802352; NOVSX-NEXT: ld r0, 16(r1)2353; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload2354; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload2355; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload2356; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload2357; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload2358; NOVSX-NEXT: mtlr r02359; NOVSX-NEXT: blr2360 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #02361 %conv = zext i1 %cmp to i322362 ret i32 %conv2363}2364 2365define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {2366; P8-LABEL: fcmps_ult_f128:2367; P8: # %bb.0:2368; P8-NEXT: mflr r02369; P8-NEXT: stdu r1, -112(r1)2370; P8-NEXT: std r0, 128(r1)2371; P8-NEXT: bl __gekf22372; P8-NEXT: nop2373; P8-NEXT: rlwinm r3, r3, 1, 31, 312374; P8-NEXT: addi r1, r1, 1122375; P8-NEXT: ld r0, 16(r1)2376; P8-NEXT: mtlr r02377; P8-NEXT: blr2378;2379; P9-LABEL: fcmps_ult_f128:2380; P9: # %bb.0:2381; P9-NEXT: xscmpoqp cr0, v2, v32382; P9-NEXT: li r3, 12383; P9-NEXT: crnor 4*cr5+lt, lt, un2384; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2385; P9-NEXT: blr2386;2387; NOVSX-LABEL: fcmps_ult_f128:2388; NOVSX: # %bb.0:2389; NOVSX-NEXT: mflr r02390; NOVSX-NEXT: stdu r1, -32(r1)2391; NOVSX-NEXT: std r0, 48(r1)2392; NOVSX-NEXT: bl __gekf22393; NOVSX-NEXT: nop2394; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 312395; NOVSX-NEXT: addi r1, r1, 322396; NOVSX-NEXT: ld r0, 16(r1)2397; NOVSX-NEXT: mtlr r02398; NOVSX-NEXT: blr2399 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #02400 %conv = zext i1 %cmp to i322401 ret i32 %conv2402}2403 2404define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {2405; P8-LABEL: fcmps_ule_f128:2406; P8: # %bb.0:2407; P8-NEXT: mflr r02408; P8-NEXT: stdu r1, -112(r1)2409; P8-NEXT: std r0, 128(r1)2410; P8-NEXT: bl __gtkf22411; P8-NEXT: nop2412; P8-NEXT: extsw r3, r32413; P8-NEXT: neg r3, r32414; P8-NEXT: rldicl r3, r3, 1, 632415; P8-NEXT: xori r3, r3, 12416; P8-NEXT: addi r1, r1, 1122417; P8-NEXT: ld r0, 16(r1)2418; P8-NEXT: mtlr r02419; P8-NEXT: blr2420;2421; P9-LABEL: fcmps_ule_f128:2422; P9: # %bb.0:2423; P9-NEXT: xscmpoqp cr0, v2, v32424; P9-NEXT: li r3, 12425; P9-NEXT: iselgt r3, 0, r32426; P9-NEXT: blr2427;2428; NOVSX-LABEL: fcmps_ule_f128:2429; NOVSX: # %bb.0:2430; NOVSX-NEXT: mflr r02431; NOVSX-NEXT: stdu r1, -32(r1)2432; NOVSX-NEXT: std r0, 48(r1)2433; NOVSX-NEXT: bl __gtkf22434; NOVSX-NEXT: nop2435; NOVSX-NEXT: extsw r3, r32436; NOVSX-NEXT: neg r3, r32437; NOVSX-NEXT: rldicl r3, r3, 1, 632438; NOVSX-NEXT: xori r3, r3, 12439; NOVSX-NEXT: addi r1, r1, 322440; NOVSX-NEXT: ld r0, 16(r1)2441; NOVSX-NEXT: mtlr r02442; NOVSX-NEXT: blr2443 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #02444 %conv = zext i1 %cmp to i322445 ret i32 %conv2446}2447 2448define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {2449; P8-LABEL: fcmps_ugt_f128:2450; P8: # %bb.0:2451; P8-NEXT: mflr r02452; P8-NEXT: stdu r1, -112(r1)2453; P8-NEXT: std r0, 128(r1)2454; P8-NEXT: bl __lekf22455; P8-NEXT: nop2456; P8-NEXT: extsw r3, r32457; P8-NEXT: neg r3, r32458; P8-NEXT: rldicl r3, r3, 1, 632459; P8-NEXT: addi r1, r1, 1122460; P8-NEXT: ld r0, 16(r1)2461; P8-NEXT: mtlr r02462; P8-NEXT: blr2463;2464; P9-LABEL: fcmps_ugt_f128:2465; P9: # %bb.0:2466; P9-NEXT: xscmpoqp cr0, v2, v32467; P9-NEXT: li r3, 12468; P9-NEXT: crnor 4*cr5+lt, gt, un2469; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2470; P9-NEXT: blr2471;2472; NOVSX-LABEL: fcmps_ugt_f128:2473; NOVSX: # %bb.0:2474; NOVSX-NEXT: mflr r02475; NOVSX-NEXT: stdu r1, -32(r1)2476; NOVSX-NEXT: std r0, 48(r1)2477; NOVSX-NEXT: bl __lekf22478; NOVSX-NEXT: nop2479; NOVSX-NEXT: extsw r3, r32480; NOVSX-NEXT: neg r3, r32481; NOVSX-NEXT: rldicl r3, r3, 1, 632482; NOVSX-NEXT: addi r1, r1, 322483; NOVSX-NEXT: ld r0, 16(r1)2484; NOVSX-NEXT: mtlr r02485; NOVSX-NEXT: blr2486 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #02487 %conv = zext i1 %cmp to i322488 ret i32 %conv2489}2490 2491define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {2492; P8-LABEL: fcmps_uge_f128:2493; P8: # %bb.0:2494; P8-NEXT: mflr r02495; P8-NEXT: stdu r1, -112(r1)2496; P8-NEXT: std r0, 128(r1)2497; P8-NEXT: bl __ltkf22498; P8-NEXT: nop2499; P8-NEXT: rlwinm r3, r3, 1, 31, 312500; P8-NEXT: xori r3, r3, 12501; P8-NEXT: addi r1, r1, 1122502; P8-NEXT: ld r0, 16(r1)2503; P8-NEXT: mtlr r02504; P8-NEXT: blr2505;2506; P9-LABEL: fcmps_uge_f128:2507; P9: # %bb.0:2508; P9-NEXT: xscmpoqp cr0, v2, v32509; P9-NEXT: li r3, 12510; P9-NEXT: isellt r3, 0, r32511; P9-NEXT: blr2512;2513; NOVSX-LABEL: fcmps_uge_f128:2514; NOVSX: # %bb.0:2515; NOVSX-NEXT: mflr r02516; NOVSX-NEXT: stdu r1, -32(r1)2517; NOVSX-NEXT: std r0, 48(r1)2518; NOVSX-NEXT: bl __ltkf22519; NOVSX-NEXT: nop2520; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 312521; NOVSX-NEXT: xori r3, r3, 12522; NOVSX-NEXT: addi r1, r1, 322523; NOVSX-NEXT: ld r0, 16(r1)2524; NOVSX-NEXT: mtlr r02525; NOVSX-NEXT: blr2526 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #02527 %conv = zext i1 %cmp to i322528 ret i32 %conv2529}2530 2531define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {2532; P8-LABEL: fcmps_ueq_f128:2533; P8: # %bb.0:2534; P8-NEXT: mflr r02535; P8-NEXT: stdu r1, -176(r1)2536; P8-NEXT: li r3, 1282537; P8-NEXT: std r0, 192(r1)2538; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill2539; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill2540; P8-NEXT: li r3, 1442541; P8-NEXT: vmr v30, v22542; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill2543; P8-NEXT: vmr v31, v32544; P8-NEXT: bl __eqkf22545; P8-NEXT: nop2546; P8-NEXT: cntlzw r3, r32547; P8-NEXT: vmr v2, v302548; P8-NEXT: vmr v3, v312549; P8-NEXT: srwi r30, r3, 52550; P8-NEXT: bl __unordkf22551; P8-NEXT: nop2552; P8-NEXT: cntlzw r3, r32553; P8-NEXT: li r4, 1442554; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload2555; P8-NEXT: li r4, 1282556; P8-NEXT: srwi r3, r3, 52557; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload2558; P8-NEXT: xori r3, r3, 12559; P8-NEXT: or r3, r3, r302560; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload2561; P8-NEXT: addi r1, r1, 1762562; P8-NEXT: ld r0, 16(r1)2563; P8-NEXT: mtlr r02564; P8-NEXT: blr2565;2566; P9-LABEL: fcmps_ueq_f128:2567; P9: # %bb.0:2568; P9-NEXT: xscmpoqp cr0, v2, v32569; P9-NEXT: li r3, 12570; P9-NEXT: crnor 4*cr5+lt, eq, un2571; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2572; P9-NEXT: blr2573;2574; NOVSX-LABEL: fcmps_ueq_f128:2575; NOVSX: # %bb.0:2576; NOVSX-NEXT: mflr r02577; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill2578; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill2579; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill2580; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill2581; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill2582; NOVSX-NEXT: stdu r1, -80(r1)2583; NOVSX-NEXT: std r0, 96(r1)2584; NOVSX-NEXT: mr r30, r62585; NOVSX-NEXT: mr r29, r52586; NOVSX-NEXT: mr r28, r42587; NOVSX-NEXT: mr r27, r32588; NOVSX-NEXT: bl __eqkf22589; NOVSX-NEXT: nop2590; NOVSX-NEXT: cntlzw r3, r32591; NOVSX-NEXT: mr r4, r282592; NOVSX-NEXT: mr r5, r292593; NOVSX-NEXT: mr r6, r302594; NOVSX-NEXT: srwi r26, r3, 52595; NOVSX-NEXT: mr r3, r272596; NOVSX-NEXT: bl __unordkf22597; NOVSX-NEXT: nop2598; NOVSX-NEXT: cntlzw r3, r32599; NOVSX-NEXT: srwi r3, r3, 52600; NOVSX-NEXT: xori r3, r3, 12601; NOVSX-NEXT: or r3, r3, r262602; NOVSX-NEXT: addi r1, r1, 802603; NOVSX-NEXT: ld r0, 16(r1)2604; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload2605; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload2606; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload2607; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload2608; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload2609; NOVSX-NEXT: mtlr r02610; NOVSX-NEXT: blr2611 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #02612 %conv = zext i1 %cmp to i322613 ret i32 %conv2614}2615 2616define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {2617; P8-LABEL: fcmps_une_f128:2618; P8: # %bb.0:2619; P8-NEXT: mflr r02620; P8-NEXT: stdu r1, -112(r1)2621; P8-NEXT: std r0, 128(r1)2622; P8-NEXT: bl __nekf22623; P8-NEXT: nop2624; P8-NEXT: cntlzw r3, r32625; P8-NEXT: srwi r3, r3, 52626; P8-NEXT: xori r3, r3, 12627; P8-NEXT: addi r1, r1, 1122628; P8-NEXT: ld r0, 16(r1)2629; P8-NEXT: mtlr r02630; P8-NEXT: blr2631;2632; P9-LABEL: fcmps_une_f128:2633; P9: # %bb.0:2634; P9-NEXT: xscmpoqp cr0, v2, v32635; P9-NEXT: li r3, 12636; P9-NEXT: iseleq r3, 0, r32637; P9-NEXT: blr2638;2639; NOVSX-LABEL: fcmps_une_f128:2640; NOVSX: # %bb.0:2641; NOVSX-NEXT: mflr r02642; NOVSX-NEXT: stdu r1, -32(r1)2643; NOVSX-NEXT: std r0, 48(r1)2644; NOVSX-NEXT: bl __nekf22645; NOVSX-NEXT: nop2646; NOVSX-NEXT: cntlzw r3, r32647; NOVSX-NEXT: srwi r3, r3, 52648; NOVSX-NEXT: xori r3, r3, 12649; NOVSX-NEXT: addi r1, r1, 322650; NOVSX-NEXT: ld r0, 16(r1)2651; NOVSX-NEXT: mtlr r02652; NOVSX-NEXT: blr2653 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #02654 %conv = zext i1 %cmp to i322655 ret i32 %conv2656}2657 2658define i32 @fcmp_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2659; P8-LABEL: fcmp_olt_ppcf128:2660; P8: # %bb.0:2661; P8-NEXT: fcmpu cr0, f1, f32662; P8-NEXT: li r3, 12663; P8-NEXT: crandc 4*cr5+gt, lt, eq2664; P8-NEXT: fcmpu cr1, f2, f42665; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt2666; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2667; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2668; P8-NEXT: blr2669;2670; P9-LABEL: fcmp_olt_ppcf128:2671; P9: # %bb.0:2672; P9-NEXT: fcmpu cr0, f1, f32673; P9-NEXT: fcmpu cr1, f2, f42674; P9-NEXT: li r3, 12675; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt2676; P9-NEXT: crandc 4*cr5+gt, lt, eq2677; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2678; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2679; P9-NEXT: blr2680;2681; NOVSX-LABEL: fcmp_olt_ppcf128:2682; NOVSX: # %bb.0:2683; NOVSX-NEXT: fcmpu cr0, f1, f32684; NOVSX-NEXT: li r3, 12685; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq2686; NOVSX-NEXT: fcmpu cr1, f2, f42687; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt2688; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2689; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2690; NOVSX-NEXT: blr2691 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #02692 %conv = zext i1 %cmp to i322693 ret i32 %conv2694}2695 2696define i32 @fcmp_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2697; P8-LABEL: fcmp_ole_ppcf128:2698; P8: # %bb.0:2699; P8-NEXT: fcmpu cr0, f2, f42700; P8-NEXT: li r3, 12701; P8-NEXT: crnor 4*cr5+lt, un, gt2702; P8-NEXT: fcmpu cr0, f1, f32703; P8-NEXT: crnor 4*cr5+gt, un, gt2704; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2705; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2706; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2707; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2708; P8-NEXT: blr2709;2710; P9-LABEL: fcmp_ole_ppcf128:2711; P9: # %bb.0:2712; P9-NEXT: fcmpu cr0, f2, f42713; P9-NEXT: li r3, 12714; P9-NEXT: crnor 4*cr5+lt, un, gt2715; P9-NEXT: fcmpu cr0, f1, f32716; P9-NEXT: crnor 4*cr5+gt, un, gt2717; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2718; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2719; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2720; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2721; P9-NEXT: blr2722;2723; NOVSX-LABEL: fcmp_ole_ppcf128:2724; NOVSX: # %bb.0:2725; NOVSX-NEXT: fcmpu cr0, f2, f42726; NOVSX-NEXT: li r3, 12727; NOVSX-NEXT: crnor 4*cr5+lt, un, gt2728; NOVSX-NEXT: fcmpu cr0, f1, f32729; NOVSX-NEXT: crnor 4*cr5+gt, un, gt2730; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2731; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2732; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2733; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2734; NOVSX-NEXT: blr2735 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #02736 %conv = zext i1 %cmp to i322737 ret i32 %conv2738}2739 2740define i32 @fcmp_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2741; P8-LABEL: fcmp_ogt_ppcf128:2742; P8: # %bb.0:2743; P8-NEXT: fcmpu cr0, f1, f32744; P8-NEXT: li r3, 12745; P8-NEXT: crandc 4*cr5+gt, gt, eq2746; P8-NEXT: fcmpu cr1, f2, f42747; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt2748; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2749; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2750; P8-NEXT: blr2751;2752; P9-LABEL: fcmp_ogt_ppcf128:2753; P9: # %bb.0:2754; P9-NEXT: fcmpu cr0, f1, f32755; P9-NEXT: fcmpu cr1, f2, f42756; P9-NEXT: li r3, 12757; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt2758; P9-NEXT: crandc 4*cr5+gt, gt, eq2759; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2760; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2761; P9-NEXT: blr2762;2763; NOVSX-LABEL: fcmp_ogt_ppcf128:2764; NOVSX: # %bb.0:2765; NOVSX-NEXT: fcmpu cr0, f1, f32766; NOVSX-NEXT: li r3, 12767; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq2768; NOVSX-NEXT: fcmpu cr1, f2, f42769; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt2770; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2771; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2772; NOVSX-NEXT: blr2773 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #02774 %conv = zext i1 %cmp to i322775 ret i32 %conv2776}2777 2778define i32 @fcmp_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2779; P8-LABEL: fcmp_oge_ppcf128:2780; P8: # %bb.0:2781; P8-NEXT: fcmpu cr0, f2, f42782; P8-NEXT: li r3, 12783; P8-NEXT: crnor 4*cr5+lt, un, lt2784; P8-NEXT: fcmpu cr0, f1, f32785; P8-NEXT: crnor 4*cr5+gt, un, lt2786; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2787; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2788; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2789; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2790; P8-NEXT: blr2791;2792; P9-LABEL: fcmp_oge_ppcf128:2793; P9: # %bb.0:2794; P9-NEXT: fcmpu cr0, f2, f42795; P9-NEXT: li r3, 12796; P9-NEXT: crnor 4*cr5+lt, un, lt2797; P9-NEXT: fcmpu cr0, f1, f32798; P9-NEXT: crnor 4*cr5+gt, un, lt2799; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2800; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2801; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2802; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2803; P9-NEXT: blr2804;2805; NOVSX-LABEL: fcmp_oge_ppcf128:2806; NOVSX: # %bb.0:2807; NOVSX-NEXT: fcmpu cr0, f2, f42808; NOVSX-NEXT: li r3, 12809; NOVSX-NEXT: crnor 4*cr5+lt, un, lt2810; NOVSX-NEXT: fcmpu cr0, f1, f32811; NOVSX-NEXT: crnor 4*cr5+gt, un, lt2812; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2813; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2814; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2815; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2816; NOVSX-NEXT: blr2817 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #02818 %conv = zext i1 %cmp to i322819 ret i32 %conv2820}2821 2822define i32 @fcmp_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2823; P8-LABEL: fcmp_oeq_ppcf128:2824; P8: # %bb.0:2825; P8-NEXT: fcmpu cr0, f1, f32826; P8-NEXT: li r3, 12827; P8-NEXT: crandc 4*cr5+gt, eq, eq2828; P8-NEXT: fcmpu cr1, f2, f42829; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq2830; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2831; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2832; P8-NEXT: blr2833;2834; P9-LABEL: fcmp_oeq_ppcf128:2835; P9: # %bb.0:2836; P9-NEXT: fcmpu cr0, f1, f32837; P9-NEXT: fcmpu cr1, f2, f42838; P9-NEXT: li r3, 12839; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq2840; P9-NEXT: crandc 4*cr5+gt, eq, eq2841; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2842; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2843; P9-NEXT: blr2844;2845; NOVSX-LABEL: fcmp_oeq_ppcf128:2846; NOVSX: # %bb.0:2847; NOVSX-NEXT: fcmpu cr0, f1, f32848; NOVSX-NEXT: li r3, 12849; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq2850; NOVSX-NEXT: fcmpu cr1, f2, f42851; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq2852; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2853; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2854; NOVSX-NEXT: blr2855 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #02856 %conv = zext i1 %cmp to i322857 ret i32 %conv2858}2859 2860define i32 @fcmp_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2861; P8-LABEL: fcmp_one_ppcf128:2862; P8: # %bb.0:2863; P8-NEXT: fcmpu cr0, f2, f42864; P8-NEXT: li r3, 12865; P8-NEXT: crnor 4*cr5+lt, un, eq2866; P8-NEXT: fcmpu cr0, f1, f32867; P8-NEXT: crnor 4*cr5+gt, un, eq2868; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2869; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2870; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2871; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2872; P8-NEXT: blr2873;2874; P9-LABEL: fcmp_one_ppcf128:2875; P9: # %bb.0:2876; P9-NEXT: fcmpu cr0, f2, f42877; P9-NEXT: li r3, 12878; P9-NEXT: crnor 4*cr5+lt, un, eq2879; P9-NEXT: fcmpu cr0, f1, f32880; P9-NEXT: crnor 4*cr5+gt, un, eq2881; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2882; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2883; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2884; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2885; P9-NEXT: blr2886;2887; NOVSX-LABEL: fcmp_one_ppcf128:2888; NOVSX: # %bb.0:2889; NOVSX-NEXT: fcmpu cr0, f2, f42890; NOVSX-NEXT: li r3, 12891; NOVSX-NEXT: crnor 4*cr5+lt, un, eq2892; NOVSX-NEXT: fcmpu cr0, f1, f32893; NOVSX-NEXT: crnor 4*cr5+gt, un, eq2894; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2895; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2896; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2897; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2898; NOVSX-NEXT: blr2899 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #02900 %conv = zext i1 %cmp to i322901 ret i32 %conv2902}2903 2904define i32 @fcmp_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2905; P8-LABEL: fcmp_ult_ppcf128:2906; P8: # %bb.0:2907; P8-NEXT: fcmpu cr0, f1, f32908; P8-NEXT: li r3, 12909; P8-NEXT: cror 4*cr5+gt, lt, un2910; P8-NEXT: fcmpu cr1, f2, f42911; P8-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un2912; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2913; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2914; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2915; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2916; P8-NEXT: blr2917;2918; P9-LABEL: fcmp_ult_ppcf128:2919; P9: # %bb.0:2920; P9-NEXT: fcmpu cr0, f1, f32921; P9-NEXT: fcmpu cr1, f2, f42922; P9-NEXT: li r3, 12923; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un2924; P9-NEXT: cror 4*cr5+gt, lt, un2925; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2926; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2927; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2928; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2929; P9-NEXT: blr2930;2931; NOVSX-LABEL: fcmp_ult_ppcf128:2932; NOVSX: # %bb.0:2933; NOVSX-NEXT: fcmpu cr0, f1, f32934; NOVSX-NEXT: li r3, 12935; NOVSX-NEXT: cror 4*cr5+gt, lt, un2936; NOVSX-NEXT: fcmpu cr1, f2, f42937; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un2938; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2939; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2940; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2941; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2942; NOVSX-NEXT: blr2943 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #02944 %conv = zext i1 %cmp to i322945 ret i32 %conv2946}2947 2948define i32 @fcmp_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2949; P8-LABEL: fcmp_ule_ppcf128:2950; P8: # %bb.0:2951; P8-NEXT: fcmpu cr0, f2, f42952; P8-NEXT: li r3, 12953; P8-NEXT: fcmpu cr1, f1, f32954; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt2955; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq2956; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2957; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2958; P8-NEXT: blr2959;2960; P9-LABEL: fcmp_ule_ppcf128:2961; P9: # %bb.0:2962; P9-NEXT: fcmpu cr0, f2, f42963; P9-NEXT: fcmpu cr1, f1, f32964; P9-NEXT: li r3, 12965; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt2966; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq2967; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2968; P9-NEXT: isel r3, 0, r3, 4*cr5+lt2969; P9-NEXT: blr2970;2971; NOVSX-LABEL: fcmp_ule_ppcf128:2972; NOVSX: # %bb.0:2973; NOVSX-NEXT: fcmpu cr0, f2, f42974; NOVSX-NEXT: li r3, 12975; NOVSX-NEXT: fcmpu cr1, f1, f32976; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt2977; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq2978; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2979; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt2980; NOVSX-NEXT: blr2981 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #02982 %conv = zext i1 %cmp to i322983 ret i32 %conv2984}2985 2986define i32 @fcmp_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {2987; P8-LABEL: fcmp_ugt_ppcf128:2988; P8: # %bb.0:2989; P8-NEXT: fcmpu cr0, f1, f32990; P8-NEXT: li r3, 12991; P8-NEXT: cror 4*cr5+gt, gt, un2992; P8-NEXT: fcmpu cr1, f2, f42993; P8-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un2994; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt2995; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq2996; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt2997; P8-NEXT: isel r3, 0, r3, 4*cr5+lt2998; P8-NEXT: blr2999;3000; P9-LABEL: fcmp_ugt_ppcf128:3001; P9: # %bb.0:3002; P9-NEXT: fcmpu cr0, f1, f33003; P9-NEXT: fcmpu cr1, f2, f43004; P9-NEXT: li r3, 13005; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un3006; P9-NEXT: cror 4*cr5+gt, gt, un3007; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3008; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3009; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3010; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3011; P9-NEXT: blr3012;3013; NOVSX-LABEL: fcmp_ugt_ppcf128:3014; NOVSX: # %bb.0:3015; NOVSX-NEXT: fcmpu cr0, f1, f33016; NOVSX-NEXT: li r3, 13017; NOVSX-NEXT: cror 4*cr5+gt, gt, un3018; NOVSX-NEXT: fcmpu cr1, f2, f43019; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un3020; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3021; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3022; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3023; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3024; NOVSX-NEXT: blr3025 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #03026 %conv = zext i1 %cmp to i323027 ret i32 %conv3028}3029 3030define i32 @fcmp_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3031; P8-LABEL: fcmp_uge_ppcf128:3032; P8: # %bb.0:3033; P8-NEXT: fcmpu cr0, f2, f43034; P8-NEXT: li r3, 13035; P8-NEXT: fcmpu cr1, f1, f33036; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3037; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3038; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3039; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3040; P8-NEXT: blr3041;3042; P9-LABEL: fcmp_uge_ppcf128:3043; P9: # %bb.0:3044; P9-NEXT: fcmpu cr0, f2, f43045; P9-NEXT: fcmpu cr1, f1, f33046; P9-NEXT: li r3, 13047; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3048; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3049; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3050; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3051; P9-NEXT: blr3052;3053; NOVSX-LABEL: fcmp_uge_ppcf128:3054; NOVSX: # %bb.0:3055; NOVSX-NEXT: fcmpu cr0, f2, f43056; NOVSX-NEXT: li r3, 13057; NOVSX-NEXT: fcmpu cr1, f1, f33058; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3059; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3060; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3061; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3062; NOVSX-NEXT: blr3063 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #03064 %conv = zext i1 %cmp to i323065 ret i32 %conv3066}3067 3068define i32 @fcmp_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3069; P8-LABEL: fcmp_ueq_ppcf128:3070; P8: # %bb.0:3071; P8-NEXT: fcmpu cr0, f1, f33072; P8-NEXT: li r3, 13073; P8-NEXT: cror 4*cr5+gt, eq, un3074; P8-NEXT: fcmpu cr1, f2, f43075; P8-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3076; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3077; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3078; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3079; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3080; P8-NEXT: blr3081;3082; P9-LABEL: fcmp_ueq_ppcf128:3083; P9: # %bb.0:3084; P9-NEXT: fcmpu cr0, f1, f33085; P9-NEXT: fcmpu cr1, f2, f43086; P9-NEXT: li r3, 13087; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3088; P9-NEXT: cror 4*cr5+gt, eq, un3089; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3090; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3091; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3092; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3093; P9-NEXT: blr3094;3095; NOVSX-LABEL: fcmp_ueq_ppcf128:3096; NOVSX: # %bb.0:3097; NOVSX-NEXT: fcmpu cr0, f1, f33098; NOVSX-NEXT: li r3, 13099; NOVSX-NEXT: cror 4*cr5+gt, eq, un3100; NOVSX-NEXT: fcmpu cr1, f2, f43101; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3102; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3103; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3104; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3105; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3106; NOVSX-NEXT: blr3107 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #03108 %conv = zext i1 %cmp to i323109 ret i32 %conv3110}3111 3112define i32 @fcmp_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3113; P8-LABEL: fcmp_une_ppcf128:3114; P8: # %bb.0:3115; P8-NEXT: fcmpu cr0, f2, f43116; P8-NEXT: li r3, 13117; P8-NEXT: fcmpu cr1, f1, f33118; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3119; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3120; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3121; P8-NEXT: blr3122;3123; P9-LABEL: fcmp_une_ppcf128:3124; P9: # %bb.0:3125; P9-NEXT: fcmpu cr0, f2, f43126; P9-NEXT: fcmpu cr1, f1, f33127; P9-NEXT: li r3, 13128; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3129; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3130; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3131; P9-NEXT: blr3132;3133; NOVSX-LABEL: fcmp_une_ppcf128:3134; NOVSX: # %bb.0:3135; NOVSX-NEXT: fcmpu cr0, f2, f43136; NOVSX-NEXT: li r3, 13137; NOVSX-NEXT: fcmpu cr1, f1, f33138; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3139; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3140; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3141; NOVSX-NEXT: blr3142 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #03143 %conv = zext i1 %cmp to i323144 ret i32 %conv3145}3146 3147define i32 @fcmps_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3148; P8-LABEL: fcmps_olt_ppcf128:3149; P8: # %bb.0:3150; P8-NEXT: fcmpo cr0, f1, f33151; P8-NEXT: li r3, 13152; P8-NEXT: crandc 4*cr5+gt, lt, eq3153; P8-NEXT: fcmpo cr1, f2, f43154; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt3155; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3156; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3157; P8-NEXT: blr3158;3159; P9-LABEL: fcmps_olt_ppcf128:3160; P9: # %bb.0:3161; P9-NEXT: fcmpo cr0, f1, f33162; P9-NEXT: fcmpo cr1, f2, f43163; P9-NEXT: li r3, 13164; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt3165; P9-NEXT: crandc 4*cr5+gt, lt, eq3166; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3167; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3168; P9-NEXT: blr3169;3170; NOVSX-LABEL: fcmps_olt_ppcf128:3171; NOVSX: # %bb.0:3172; NOVSX-NEXT: fcmpo cr0, f1, f33173; NOVSX-NEXT: li r3, 13174; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq3175; NOVSX-NEXT: fcmpo cr1, f2, f43176; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt3177; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3178; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3179; NOVSX-NEXT: blr3180 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #03181 %conv = zext i1 %cmp to i323182 ret i32 %conv3183}3184 3185define i32 @fcmps_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3186; P8-LABEL: fcmps_ole_ppcf128:3187; P8: # %bb.0:3188; P8-NEXT: fcmpo cr0, f2, f43189; P8-NEXT: li r3, 13190; P8-NEXT: crnor 4*cr5+lt, un, gt3191; P8-NEXT: fcmpo cr0, f1, f33192; P8-NEXT: crnor 4*cr5+gt, un, gt3193; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3194; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3195; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3196; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3197; P8-NEXT: blr3198;3199; P9-LABEL: fcmps_ole_ppcf128:3200; P9: # %bb.0:3201; P9-NEXT: fcmpo cr0, f2, f43202; P9-NEXT: li r3, 13203; P9-NEXT: crnor 4*cr5+lt, un, gt3204; P9-NEXT: fcmpo cr0, f1, f33205; P9-NEXT: crnor 4*cr5+gt, un, gt3206; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3207; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3208; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3209; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3210; P9-NEXT: blr3211;3212; NOVSX-LABEL: fcmps_ole_ppcf128:3213; NOVSX: # %bb.0:3214; NOVSX-NEXT: fcmpo cr0, f2, f43215; NOVSX-NEXT: li r3, 13216; NOVSX-NEXT: crnor 4*cr5+lt, un, gt3217; NOVSX-NEXT: fcmpo cr0, f1, f33218; NOVSX-NEXT: crnor 4*cr5+gt, un, gt3219; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3220; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3221; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3222; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3223; NOVSX-NEXT: blr3224 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #03225 %conv = zext i1 %cmp to i323226 ret i32 %conv3227}3228 3229define i32 @fcmps_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3230; P8-LABEL: fcmps_ogt_ppcf128:3231; P8: # %bb.0:3232; P8-NEXT: fcmpo cr0, f1, f33233; P8-NEXT: li r3, 13234; P8-NEXT: crandc 4*cr5+gt, gt, eq3235; P8-NEXT: fcmpo cr1, f2, f43236; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt3237; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3238; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3239; P8-NEXT: blr3240;3241; P9-LABEL: fcmps_ogt_ppcf128:3242; P9: # %bb.0:3243; P9-NEXT: fcmpo cr0, f1, f33244; P9-NEXT: fcmpo cr1, f2, f43245; P9-NEXT: li r3, 13246; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt3247; P9-NEXT: crandc 4*cr5+gt, gt, eq3248; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3249; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3250; P9-NEXT: blr3251;3252; NOVSX-LABEL: fcmps_ogt_ppcf128:3253; NOVSX: # %bb.0:3254; NOVSX-NEXT: fcmpo cr0, f1, f33255; NOVSX-NEXT: li r3, 13256; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq3257; NOVSX-NEXT: fcmpo cr1, f2, f43258; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt3259; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3260; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3261; NOVSX-NEXT: blr3262 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #03263 %conv = zext i1 %cmp to i323264 ret i32 %conv3265}3266 3267define i32 @fcmps_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3268; P8-LABEL: fcmps_oge_ppcf128:3269; P8: # %bb.0:3270; P8-NEXT: fcmpo cr0, f2, f43271; P8-NEXT: li r3, 13272; P8-NEXT: crnor 4*cr5+lt, un, lt3273; P8-NEXT: fcmpo cr0, f1, f33274; P8-NEXT: crnor 4*cr5+gt, un, lt3275; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3276; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3277; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3278; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3279; P8-NEXT: blr3280;3281; P9-LABEL: fcmps_oge_ppcf128:3282; P9: # %bb.0:3283; P9-NEXT: fcmpo cr0, f2, f43284; P9-NEXT: li r3, 13285; P9-NEXT: crnor 4*cr5+lt, un, lt3286; P9-NEXT: fcmpo cr0, f1, f33287; P9-NEXT: crnor 4*cr5+gt, un, lt3288; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3289; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3290; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3291; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3292; P9-NEXT: blr3293;3294; NOVSX-LABEL: fcmps_oge_ppcf128:3295; NOVSX: # %bb.0:3296; NOVSX-NEXT: fcmpo cr0, f2, f43297; NOVSX-NEXT: li r3, 13298; NOVSX-NEXT: crnor 4*cr5+lt, un, lt3299; NOVSX-NEXT: fcmpo cr0, f1, f33300; NOVSX-NEXT: crnor 4*cr5+gt, un, lt3301; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3302; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3303; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3304; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3305; NOVSX-NEXT: blr3306 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #03307 %conv = zext i1 %cmp to i323308 ret i32 %conv3309}3310 3311define i32 @fcmps_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3312; P8-LABEL: fcmps_oeq_ppcf128:3313; P8: # %bb.0:3314; P8-NEXT: fcmpo cr0, f1, f33315; P8-NEXT: li r3, 13316; P8-NEXT: crandc 4*cr5+gt, eq, eq3317; P8-NEXT: fcmpo cr1, f2, f43318; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq3319; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3320; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3321; P8-NEXT: blr3322;3323; P9-LABEL: fcmps_oeq_ppcf128:3324; P9: # %bb.0:3325; P9-NEXT: fcmpo cr0, f1, f33326; P9-NEXT: fcmpo cr1, f2, f43327; P9-NEXT: li r3, 13328; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq3329; P9-NEXT: crandc 4*cr5+gt, eq, eq3330; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3331; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3332; P9-NEXT: blr3333;3334; NOVSX-LABEL: fcmps_oeq_ppcf128:3335; NOVSX: # %bb.0:3336; NOVSX-NEXT: fcmpo cr0, f1, f33337; NOVSX-NEXT: li r3, 13338; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq3339; NOVSX-NEXT: fcmpo cr1, f2, f43340; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq3341; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3342; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3343; NOVSX-NEXT: blr3344 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #03345 %conv = zext i1 %cmp to i323346 ret i32 %conv3347}3348 3349define i32 @fcmps_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3350; P8-LABEL: fcmps_one_ppcf128:3351; P8: # %bb.0:3352; P8-NEXT: fcmpo cr0, f2, f43353; P8-NEXT: li r3, 13354; P8-NEXT: crnor 4*cr5+lt, un, eq3355; P8-NEXT: fcmpo cr0, f1, f33356; P8-NEXT: crnor 4*cr5+gt, un, eq3357; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3358; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3359; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3360; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3361; P8-NEXT: blr3362;3363; P9-LABEL: fcmps_one_ppcf128:3364; P9: # %bb.0:3365; P9-NEXT: fcmpo cr0, f2, f43366; P9-NEXT: li r3, 13367; P9-NEXT: crnor 4*cr5+lt, un, eq3368; P9-NEXT: fcmpo cr0, f1, f33369; P9-NEXT: crnor 4*cr5+gt, un, eq3370; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3371; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3372; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3373; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3374; P9-NEXT: blr3375;3376; NOVSX-LABEL: fcmps_one_ppcf128:3377; NOVSX: # %bb.0:3378; NOVSX-NEXT: fcmpo cr0, f2, f43379; NOVSX-NEXT: li r3, 13380; NOVSX-NEXT: crnor 4*cr5+lt, un, eq3381; NOVSX-NEXT: fcmpo cr0, f1, f33382; NOVSX-NEXT: crnor 4*cr5+gt, un, eq3383; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3384; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3385; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3386; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3387; NOVSX-NEXT: blr3388 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #03389 %conv = zext i1 %cmp to i323390 ret i32 %conv3391}3392 3393define i32 @fcmps_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3394; P8-LABEL: fcmps_ult_ppcf128:3395; P8: # %bb.0:3396; P8-NEXT: fcmpo cr0, f1, f33397; P8-NEXT: li r3, 13398; P8-NEXT: cror 4*cr5+gt, lt, un3399; P8-NEXT: fcmpo cr1, f2, f43400; P8-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un3401; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3402; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3403; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3404; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3405; P8-NEXT: blr3406;3407; P9-LABEL: fcmps_ult_ppcf128:3408; P9: # %bb.0:3409; P9-NEXT: fcmpo cr0, f1, f33410; P9-NEXT: fcmpo cr1, f2, f43411; P9-NEXT: li r3, 13412; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un3413; P9-NEXT: cror 4*cr5+gt, lt, un3414; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3415; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3416; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3417; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3418; P9-NEXT: blr3419;3420; NOVSX-LABEL: fcmps_ult_ppcf128:3421; NOVSX: # %bb.0:3422; NOVSX-NEXT: fcmpo cr0, f1, f33423; NOVSX-NEXT: li r3, 13424; NOVSX-NEXT: cror 4*cr5+gt, lt, un3425; NOVSX-NEXT: fcmpo cr1, f2, f43426; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un3427; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3428; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3429; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3430; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3431; NOVSX-NEXT: blr3432 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #03433 %conv = zext i1 %cmp to i323434 ret i32 %conv3435}3436 3437define i32 @fcmps_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3438; P8-LABEL: fcmps_ule_ppcf128:3439; P8: # %bb.0:3440; P8-NEXT: fcmpo cr0, f2, f43441; P8-NEXT: li r3, 13442; P8-NEXT: fcmpo cr1, f1, f33443; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt3444; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq3445; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3446; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3447; P8-NEXT: blr3448;3449; P9-LABEL: fcmps_ule_ppcf128:3450; P9: # %bb.0:3451; P9-NEXT: fcmpo cr0, f2, f43452; P9-NEXT: fcmpo cr1, f1, f33453; P9-NEXT: li r3, 13454; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt3455; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq3456; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3457; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3458; P9-NEXT: blr3459;3460; NOVSX-LABEL: fcmps_ule_ppcf128:3461; NOVSX: # %bb.0:3462; NOVSX-NEXT: fcmpo cr0, f2, f43463; NOVSX-NEXT: li r3, 13464; NOVSX-NEXT: fcmpo cr1, f1, f33465; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt3466; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq3467; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3468; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3469; NOVSX-NEXT: blr3470 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #03471 %conv = zext i1 %cmp to i323472 ret i32 %conv3473}3474 3475define i32 @fcmps_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3476; P8-LABEL: fcmps_ugt_ppcf128:3477; P8: # %bb.0:3478; P8-NEXT: fcmpo cr0, f1, f33479; P8-NEXT: li r3, 13480; P8-NEXT: cror 4*cr5+gt, gt, un3481; P8-NEXT: fcmpo cr1, f2, f43482; P8-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un3483; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3484; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3485; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3486; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3487; P8-NEXT: blr3488;3489; P9-LABEL: fcmps_ugt_ppcf128:3490; P9: # %bb.0:3491; P9-NEXT: fcmpo cr0, f1, f33492; P9-NEXT: fcmpo cr1, f2, f43493; P9-NEXT: li r3, 13494; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un3495; P9-NEXT: cror 4*cr5+gt, gt, un3496; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3497; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3498; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3499; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3500; P9-NEXT: blr3501;3502; NOVSX-LABEL: fcmps_ugt_ppcf128:3503; NOVSX: # %bb.0:3504; NOVSX-NEXT: fcmpo cr0, f1, f33505; NOVSX-NEXT: li r3, 13506; NOVSX-NEXT: cror 4*cr5+gt, gt, un3507; NOVSX-NEXT: fcmpo cr1, f2, f43508; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un3509; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3510; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3511; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3512; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3513; NOVSX-NEXT: blr3514 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #03515 %conv = zext i1 %cmp to i323516 ret i32 %conv3517}3518 3519define i32 @fcmps_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3520; P8-LABEL: fcmps_uge_ppcf128:3521; P8: # %bb.0:3522; P8-NEXT: fcmpo cr0, f2, f43523; P8-NEXT: li r3, 13524; P8-NEXT: fcmpo cr1, f1, f33525; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3526; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3527; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3528; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3529; P8-NEXT: blr3530;3531; P9-LABEL: fcmps_uge_ppcf128:3532; P9: # %bb.0:3533; P9-NEXT: fcmpo cr0, f2, f43534; P9-NEXT: fcmpo cr1, f1, f33535; P9-NEXT: li r3, 13536; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3537; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3538; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3539; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3540; P9-NEXT: blr3541;3542; NOVSX-LABEL: fcmps_uge_ppcf128:3543; NOVSX: # %bb.0:3544; NOVSX-NEXT: fcmpo cr0, f2, f43545; NOVSX-NEXT: li r3, 13546; NOVSX-NEXT: fcmpo cr1, f1, f33547; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt3548; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq3549; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3550; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3551; NOVSX-NEXT: blr3552 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #03553 %conv = zext i1 %cmp to i323554 ret i32 %conv3555}3556 3557define i32 @fcmps_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3558; P8-LABEL: fcmps_ueq_ppcf128:3559; P8: # %bb.0:3560; P8-NEXT: fcmpo cr0, f1, f33561; P8-NEXT: li r3, 13562; P8-NEXT: cror 4*cr5+gt, eq, un3563; P8-NEXT: fcmpo cr1, f2, f43564; P8-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3565; P8-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3566; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3567; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3568; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3569; P8-NEXT: blr3570;3571; P9-LABEL: fcmps_ueq_ppcf128:3572; P9: # %bb.0:3573; P9-NEXT: fcmpo cr0, f1, f33574; P9-NEXT: fcmpo cr1, f2, f43575; P9-NEXT: li r3, 13576; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3577; P9-NEXT: cror 4*cr5+gt, eq, un3578; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3579; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3580; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3581; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3582; P9-NEXT: blr3583;3584; NOVSX-LABEL: fcmps_ueq_ppcf128:3585; NOVSX: # %bb.0:3586; NOVSX-NEXT: fcmpo cr0, f1, f33587; NOVSX-NEXT: li r3, 13588; NOVSX-NEXT: cror 4*cr5+gt, eq, un3589; NOVSX-NEXT: fcmpo cr1, f2, f43590; NOVSX-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un3591; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt3592; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq3593; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt3594; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3595; NOVSX-NEXT: blr3596 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #03597 %conv = zext i1 %cmp to i323598 ret i32 %conv3599}3600 3601define i32 @fcmps_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {3602; P8-LABEL: fcmps_une_ppcf128:3603; P8: # %bb.0:3604; P8-NEXT: fcmpo cr0, f2, f43605; P8-NEXT: li r3, 13606; P8-NEXT: fcmpo cr1, f1, f33607; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3608; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3609; P8-NEXT: isel r3, 0, r3, 4*cr5+lt3610; P8-NEXT: blr3611;3612; P9-LABEL: fcmps_une_ppcf128:3613; P9: # %bb.0:3614; P9-NEXT: fcmpo cr0, f2, f43615; P9-NEXT: fcmpo cr1, f1, f33616; P9-NEXT: li r3, 13617; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3618; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3619; P9-NEXT: isel r3, 0, r3, 4*cr5+lt3620; P9-NEXT: blr3621;3622; NOVSX-LABEL: fcmps_une_ppcf128:3623; NOVSX: # %bb.0:3624; NOVSX-NEXT: fcmpo cr0, f2, f43625; NOVSX-NEXT: li r3, 13626; NOVSX-NEXT: fcmpo cr1, f1, f33627; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq3628; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt3629; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt3630; NOVSX-NEXT: blr3631 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #03632 %conv = zext i1 %cmp to i323633 ret i32 %conv3634}3635 3636attributes #0 = { strictfp nounwind }3637 3638declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)3639declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)3640declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)3641declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)3642declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)3643declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)3644declare i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)3645declare i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)3646