803 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \3; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \5; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s \6; RUN: -check-prefix=CHECK-P87 8@a_qp = common dso_local global fp128 0xL00000000000000000000000000000000, align 169@b_qp = common dso_local global fp128 0xL00000000000000000000000000000000, align 1610 11; Function Attrs: noinline nounwind optnone12define dso_local signext i32 @greater_qp() {13; CHECK-LABEL: greater_qp:14; CHECK: # %bb.0: # %entry15; CHECK-NEXT: addis r3, r2, a_qp@toc@ha16; CHECK-NEXT: li r4, 117; CHECK-NEXT: addi r3, r3, a_qp@toc@l18; CHECK-NEXT: lxv v2, 0(r3)19; CHECK-NEXT: addis r3, r2, b_qp@toc@ha20; CHECK-NEXT: addi r3, r3, b_qp@toc@l21; CHECK-NEXT: lxv v3, 0(r3)22; CHECK-NEXT: li r3, 023; CHECK-NEXT: xscmpuqp cr0, v2, v324; CHECK-NEXT: iselgt r3, r4, r325; CHECK-NEXT: blr26;27; CHECK-P8-LABEL: greater_qp:28; CHECK-P8: # %bb.0: # %entry29; CHECK-P8-NEXT: mflr r030; CHECK-P8-NEXT: stdu r1, -32(r1)31; CHECK-P8-NEXT: std r0, 48(r1)32; CHECK-P8-NEXT: .cfi_def_cfa_offset 3233; CHECK-P8-NEXT: .cfi_offset lr, 1634; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha35; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l36; CHECK-P8-NEXT: lxvd2x vs0, 0, r337; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha38; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l39; CHECK-P8-NEXT: xxswapd v2, vs040; CHECK-P8-NEXT: lxvd2x vs0, 0, r341; CHECK-P8-NEXT: xxswapd v3, vs042; CHECK-P8-NEXT: bl __gtkf243; CHECK-P8-NEXT: nop44; CHECK-P8-NEXT: extsw r3, r345; CHECK-P8-NEXT: neg r3, r346; CHECK-P8-NEXT: rldicl r3, r3, 1, 6347; CHECK-P8-NEXT: addi r1, r1, 3248; CHECK-P8-NEXT: ld r0, 16(r1)49; CHECK-P8-NEXT: mtlr r050; CHECK-P8-NEXT: blr51entry:52 %0 = load fp128, ptr @a_qp, align 1653 %1 = load fp128, ptr @b_qp, align 1654 %cmp = fcmp ogt fp128 %0, %155 %conv = zext i1 %cmp to i3256 ret i32 %conv57}58 59; Function Attrs: noinline nounwind optnone60define dso_local signext i32 @less_qp() {61; CHECK-LABEL: less_qp:62; CHECK: # %bb.0: # %entry63; CHECK-NEXT: addis r3, r2, a_qp@toc@ha64; CHECK-NEXT: li r4, 165; CHECK-NEXT: addi r3, r3, a_qp@toc@l66; CHECK-NEXT: lxv v2, 0(r3)67; CHECK-NEXT: addis r3, r2, b_qp@toc@ha68; CHECK-NEXT: addi r3, r3, b_qp@toc@l69; CHECK-NEXT: lxv v3, 0(r3)70; CHECK-NEXT: li r3, 071; CHECK-NEXT: xscmpuqp cr0, v2, v372; CHECK-NEXT: isellt r3, r4, r373; CHECK-NEXT: blr74;75; CHECK-P8-LABEL: less_qp:76; CHECK-P8: # %bb.0: # %entry77; CHECK-P8-NEXT: mflr r078; CHECK-P8-NEXT: stdu r1, -32(r1)79; CHECK-P8-NEXT: std r0, 48(r1)80; CHECK-P8-NEXT: .cfi_def_cfa_offset 3281; CHECK-P8-NEXT: .cfi_offset lr, 1682; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha83; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l84; CHECK-P8-NEXT: lxvd2x vs0, 0, r385; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha86; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l87; CHECK-P8-NEXT: xxswapd v2, vs088; CHECK-P8-NEXT: lxvd2x vs0, 0, r389; CHECK-P8-NEXT: xxswapd v3, vs090; CHECK-P8-NEXT: bl __ltkf291; CHECK-P8-NEXT: nop92; CHECK-P8-NEXT: rlwinm r3, r3, 1, 31, 3193; CHECK-P8-NEXT: addi r1, r1, 3294; CHECK-P8-NEXT: ld r0, 16(r1)95; CHECK-P8-NEXT: mtlr r096; CHECK-P8-NEXT: blr97entry:98 %0 = load fp128, ptr @a_qp, align 1699 %1 = load fp128, ptr @b_qp, align 16100 %cmp = fcmp olt fp128 %0, %1101 %conv = zext i1 %cmp to i32102 ret i32 %conv103}104 105; Function Attrs: noinline nounwind optnone106define dso_local signext i32 @greater_eq_qp() {107; CHECK-LABEL: greater_eq_qp:108; CHECK: # %bb.0: # %entry109; CHECK-NEXT: addis r3, r2, a_qp@toc@ha110; CHECK-NEXT: addi r3, r3, a_qp@toc@l111; CHECK-NEXT: lxv v2, 0(r3)112; CHECK-NEXT: addis r3, r2, b_qp@toc@ha113; CHECK-NEXT: addi r3, r3, b_qp@toc@l114; CHECK-NEXT: lxv v3, 0(r3)115; CHECK-NEXT: li r3, 1116; CHECK-NEXT: xscmpuqp cr0, v2, v3117; CHECK-NEXT: cror 4*cr5+lt, un, lt118; CHECK-NEXT: isel r3, 0, r3, 4*cr5+lt119; CHECK-NEXT: blr120;121; CHECK-P8-LABEL: greater_eq_qp:122; CHECK-P8: # %bb.0: # %entry123; CHECK-P8-NEXT: mflr r0124; CHECK-P8-NEXT: stdu r1, -32(r1)125; CHECK-P8-NEXT: std r0, 48(r1)126; CHECK-P8-NEXT: .cfi_def_cfa_offset 32127; CHECK-P8-NEXT: .cfi_offset lr, 16128; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha129; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l130; CHECK-P8-NEXT: lxvd2x vs0, 0, r3131; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha132; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l133; CHECK-P8-NEXT: xxswapd v2, vs0134; CHECK-P8-NEXT: lxvd2x vs0, 0, r3135; CHECK-P8-NEXT: xxswapd v3, vs0136; CHECK-P8-NEXT: bl __gekf2137; CHECK-P8-NEXT: nop138; CHECK-P8-NEXT: rlwinm r3, r3, 1, 31, 31139; CHECK-P8-NEXT: xori r3, r3, 1140; CHECK-P8-NEXT: addi r1, r1, 32141; CHECK-P8-NEXT: ld r0, 16(r1)142; CHECK-P8-NEXT: mtlr r0143; CHECK-P8-NEXT: blr144entry:145 %0 = load fp128, ptr @a_qp, align 16146 %1 = load fp128, ptr @b_qp, align 16147 %cmp = fcmp oge fp128 %0, %1148 %conv = zext i1 %cmp to i32149 ret i32 %conv150}151 152; Function Attrs: noinline nounwind optnone153define dso_local signext i32 @less_eq_qp() {154; CHECK-LABEL: less_eq_qp:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: addis r3, r2, a_qp@toc@ha157; CHECK-NEXT: addi r3, r3, a_qp@toc@l158; CHECK-NEXT: lxv v2, 0(r3)159; CHECK-NEXT: addis r3, r2, b_qp@toc@ha160; CHECK-NEXT: addi r3, r3, b_qp@toc@l161; CHECK-NEXT: lxv v3, 0(r3)162; CHECK-NEXT: li r3, 1163; CHECK-NEXT: xscmpuqp cr0, v2, v3164; CHECK-NEXT: cror 4*cr5+lt, un, gt165; CHECK-NEXT: isel r3, 0, r3, 4*cr5+lt166; CHECK-NEXT: blr167;168; CHECK-P8-LABEL: less_eq_qp:169; CHECK-P8: # %bb.0: # %entry170; CHECK-P8-NEXT: mflr r0171; CHECK-P8-NEXT: stdu r1, -32(r1)172; CHECK-P8-NEXT: std r0, 48(r1)173; CHECK-P8-NEXT: .cfi_def_cfa_offset 32174; CHECK-P8-NEXT: .cfi_offset lr, 16175; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha176; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l177; CHECK-P8-NEXT: lxvd2x vs0, 0, r3178; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha179; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l180; CHECK-P8-NEXT: xxswapd v2, vs0181; CHECK-P8-NEXT: lxvd2x vs0, 0, r3182; CHECK-P8-NEXT: xxswapd v3, vs0183; CHECK-P8-NEXT: bl __lekf2184; CHECK-P8-NEXT: nop185; CHECK-P8-NEXT: extsw r3, r3186; CHECK-P8-NEXT: neg r3, r3187; CHECK-P8-NEXT: rldicl r3, r3, 1, 63188; CHECK-P8-NEXT: xori r3, r3, 1189; CHECK-P8-NEXT: addi r1, r1, 32190; CHECK-P8-NEXT: ld r0, 16(r1)191; CHECK-P8-NEXT: mtlr r0192; CHECK-P8-NEXT: blr193entry:194 %0 = load fp128, ptr @a_qp, align 16195 %1 = load fp128, ptr @b_qp, align 16196 %cmp = fcmp ole fp128 %0, %1197 %conv = zext i1 %cmp to i32198 ret i32 %conv199}200 201; Function Attrs: noinline nounwind optnone202define dso_local signext i32 @equal_qp() {203; CHECK-LABEL: equal_qp:204; CHECK: # %bb.0: # %entry205; CHECK-NEXT: addis r3, r2, a_qp@toc@ha206; CHECK-NEXT: li r4, 1207; CHECK-NEXT: addi r3, r3, a_qp@toc@l208; CHECK-NEXT: lxv v2, 0(r3)209; CHECK-NEXT: addis r3, r2, b_qp@toc@ha210; CHECK-NEXT: addi r3, r3, b_qp@toc@l211; CHECK-NEXT: lxv v3, 0(r3)212; CHECK-NEXT: li r3, 0213; CHECK-NEXT: xscmpuqp cr0, v2, v3214; CHECK-NEXT: iseleq r3, r4, r3215; CHECK-NEXT: blr216;217; CHECK-P8-LABEL: equal_qp:218; CHECK-P8: # %bb.0: # %entry219; CHECK-P8-NEXT: mflr r0220; CHECK-P8-NEXT: stdu r1, -32(r1)221; CHECK-P8-NEXT: std r0, 48(r1)222; CHECK-P8-NEXT: .cfi_def_cfa_offset 32223; CHECK-P8-NEXT: .cfi_offset lr, 16224; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha225; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l226; CHECK-P8-NEXT: lxvd2x vs0, 0, r3227; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha228; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l229; CHECK-P8-NEXT: xxswapd v2, vs0230; CHECK-P8-NEXT: lxvd2x vs0, 0, r3231; CHECK-P8-NEXT: xxswapd v3, vs0232; CHECK-P8-NEXT: bl __eqkf2233; CHECK-P8-NEXT: nop234; CHECK-P8-NEXT: cntlzw r3, r3235; CHECK-P8-NEXT: srwi r3, r3, 5236; CHECK-P8-NEXT: addi r1, r1, 32237; CHECK-P8-NEXT: ld r0, 16(r1)238; CHECK-P8-NEXT: mtlr r0239; CHECK-P8-NEXT: blr240entry:241 %0 = load fp128, ptr @a_qp, align 16242 %1 = load fp128, ptr @b_qp, align 16243 %cmp = fcmp oeq fp128 %0, %1244 %conv = zext i1 %cmp to i32245 ret i32 %conv246}247 248; Function Attrs: noinline nounwind optnone249define dso_local signext i32 @not_greater_qp() {250; CHECK-LABEL: not_greater_qp:251; CHECK: # %bb.0: # %entry252; CHECK-NEXT: addis r3, r2, a_qp@toc@ha253; CHECK-NEXT: addi r3, r3, a_qp@toc@l254; CHECK-NEXT: lxv v2, 0(r3)255; CHECK-NEXT: addis r3, r2, b_qp@toc@ha256; CHECK-NEXT: addi r3, r3, b_qp@toc@l257; CHECK-NEXT: lxv v3, 0(r3)258; CHECK-NEXT: li r3, 1259; CHECK-NEXT: xscmpuqp cr0, v2, v3260; CHECK-NEXT: iselgt r3, 0, r3261; CHECK-NEXT: blr262;263; CHECK-P8-LABEL: not_greater_qp:264; CHECK-P8: # %bb.0: # %entry265; CHECK-P8-NEXT: mflr r0266; CHECK-P8-NEXT: stdu r1, -32(r1)267; CHECK-P8-NEXT: std r0, 48(r1)268; CHECK-P8-NEXT: .cfi_def_cfa_offset 32269; CHECK-P8-NEXT: .cfi_offset lr, 16270; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha271; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l272; CHECK-P8-NEXT: lxvd2x vs0, 0, r3273; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha274; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l275; CHECK-P8-NEXT: xxswapd v2, vs0276; CHECK-P8-NEXT: lxvd2x vs0, 0, r3277; CHECK-P8-NEXT: xxswapd v3, vs0278; CHECK-P8-NEXT: bl __gtkf2279; CHECK-P8-NEXT: nop280; CHECK-P8-NEXT: extsw r3, r3281; CHECK-P8-NEXT: neg r3, r3282; CHECK-P8-NEXT: rldicl r3, r3, 1, 63283; CHECK-P8-NEXT: xori r3, r3, 1284; CHECK-P8-NEXT: addi r1, r1, 32285; CHECK-P8-NEXT: ld r0, 16(r1)286; CHECK-P8-NEXT: mtlr r0287; CHECK-P8-NEXT: blr288entry:289 %0 = load fp128, ptr @a_qp, align 16290 %1 = load fp128, ptr @b_qp, align 16291 %cmp = fcmp ogt fp128 %0, %1292 %lnot = xor i1 %cmp, true293 %lnot.ext = zext i1 %lnot to i32294 ret i32 %lnot.ext295}296 297; Function Attrs: noinline nounwind optnone298define dso_local signext i32 @not_less_qp() {299; CHECK-LABEL: not_less_qp:300; CHECK: # %bb.0: # %entry301; CHECK-NEXT: addis r3, r2, a_qp@toc@ha302; CHECK-NEXT: addi r3, r3, a_qp@toc@l303; CHECK-NEXT: lxv v2, 0(r3)304; CHECK-NEXT: addis r3, r2, b_qp@toc@ha305; CHECK-NEXT: addi r3, r3, b_qp@toc@l306; CHECK-NEXT: lxv v3, 0(r3)307; CHECK-NEXT: li r3, 1308; CHECK-NEXT: xscmpuqp cr0, v2, v3309; CHECK-NEXT: isellt r3, 0, r3310; CHECK-NEXT: blr311;312; CHECK-P8-LABEL: not_less_qp:313; CHECK-P8: # %bb.0: # %entry314; CHECK-P8-NEXT: mflr r0315; CHECK-P8-NEXT: stdu r1, -32(r1)316; CHECK-P8-NEXT: std r0, 48(r1)317; CHECK-P8-NEXT: .cfi_def_cfa_offset 32318; CHECK-P8-NEXT: .cfi_offset lr, 16319; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha320; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l321; CHECK-P8-NEXT: lxvd2x vs0, 0, r3322; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha323; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l324; CHECK-P8-NEXT: xxswapd v2, vs0325; CHECK-P8-NEXT: lxvd2x vs0, 0, r3326; CHECK-P8-NEXT: xxswapd v3, vs0327; CHECK-P8-NEXT: bl __ltkf2328; CHECK-P8-NEXT: nop329; CHECK-P8-NEXT: rlwinm r3, r3, 1, 31, 31330; CHECK-P8-NEXT: xori r3, r3, 1331; CHECK-P8-NEXT: addi r1, r1, 32332; CHECK-P8-NEXT: ld r0, 16(r1)333; CHECK-P8-NEXT: mtlr r0334; CHECK-P8-NEXT: blr335entry:336 %0 = load fp128, ptr @a_qp, align 16337 %1 = load fp128, ptr @b_qp, align 16338 %cmp = fcmp olt fp128 %0, %1339 %lnot = xor i1 %cmp, true340 %lnot.ext = zext i1 %lnot to i32341 ret i32 %lnot.ext342}343 344; Function Attrs: noinline nounwind optnone345define dso_local signext i32 @not_greater_eq_qp() {346; CHECK-LABEL: not_greater_eq_qp:347; CHECK: # %bb.0: # %entry348; CHECK-NEXT: addis r3, r2, a_qp@toc@ha349; CHECK-NEXT: addi r3, r3, a_qp@toc@l350; CHECK-NEXT: lxv v2, 0(r3)351; CHECK-NEXT: addis r3, r2, b_qp@toc@ha352; CHECK-NEXT: addi r3, r3, b_qp@toc@l353; CHECK-NEXT: lxv v3, 0(r3)354; CHECK-NEXT: li r3, 1355; CHECK-NEXT: xscmpuqp cr0, v2, v3356; CHECK-NEXT: crnor 4*cr5+lt, lt, un357; CHECK-NEXT: isel r3, 0, r3, 4*cr5+lt358; CHECK-NEXT: blr359;360; CHECK-P8-LABEL: not_greater_eq_qp:361; CHECK-P8: # %bb.0: # %entry362; CHECK-P8-NEXT: mflr r0363; CHECK-P8-NEXT: stdu r1, -32(r1)364; CHECK-P8-NEXT: std r0, 48(r1)365; CHECK-P8-NEXT: .cfi_def_cfa_offset 32366; CHECK-P8-NEXT: .cfi_offset lr, 16367; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha368; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l369; CHECK-P8-NEXT: lxvd2x vs0, 0, r3370; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha371; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l372; CHECK-P8-NEXT: xxswapd v2, vs0373; CHECK-P8-NEXT: lxvd2x vs0, 0, r3374; CHECK-P8-NEXT: xxswapd v3, vs0375; CHECK-P8-NEXT: bl __gekf2376; CHECK-P8-NEXT: nop377; CHECK-P8-NEXT: rlwinm r3, r3, 1, 31, 31378; CHECK-P8-NEXT: addi r1, r1, 32379; CHECK-P8-NEXT: ld r0, 16(r1)380; CHECK-P8-NEXT: mtlr r0381; CHECK-P8-NEXT: blr382entry:383 %0 = load fp128, ptr @a_qp, align 16384 %1 = load fp128, ptr @b_qp, align 16385 %cmp = fcmp oge fp128 %0, %1386 %lnot = xor i1 %cmp, true387 %lnot.ext = zext i1 %lnot to i32388 ret i32 %lnot.ext389}390 391; Function Attrs: noinline nounwind optnone392define dso_local signext i32 @not_less_eq_qp() {393; CHECK-LABEL: not_less_eq_qp:394; CHECK: # %bb.0: # %entry395; CHECK-NEXT: addis r3, r2, a_qp@toc@ha396; CHECK-NEXT: addi r3, r3, a_qp@toc@l397; CHECK-NEXT: lxv v2, 0(r3)398; CHECK-NEXT: addis r3, r2, b_qp@toc@ha399; CHECK-NEXT: addi r3, r3, b_qp@toc@l400; CHECK-NEXT: lxv v3, 0(r3)401; CHECK-NEXT: li r3, 1402; CHECK-NEXT: xscmpuqp cr0, v2, v3403; CHECK-NEXT: crnor 4*cr5+lt, gt, un404; CHECK-NEXT: isel r3, 0, r3, 4*cr5+lt405; CHECK-NEXT: blr406;407; CHECK-P8-LABEL: not_less_eq_qp:408; CHECK-P8: # %bb.0: # %entry409; CHECK-P8-NEXT: mflr r0410; CHECK-P8-NEXT: stdu r1, -32(r1)411; CHECK-P8-NEXT: std r0, 48(r1)412; CHECK-P8-NEXT: .cfi_def_cfa_offset 32413; CHECK-P8-NEXT: .cfi_offset lr, 16414; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha415; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l416; CHECK-P8-NEXT: lxvd2x vs0, 0, r3417; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha418; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l419; CHECK-P8-NEXT: xxswapd v2, vs0420; CHECK-P8-NEXT: lxvd2x vs0, 0, r3421; CHECK-P8-NEXT: xxswapd v3, vs0422; CHECK-P8-NEXT: bl __lekf2423; CHECK-P8-NEXT: nop424; CHECK-P8-NEXT: extsw r3, r3425; CHECK-P8-NEXT: neg r3, r3426; CHECK-P8-NEXT: rldicl r3, r3, 1, 63427; CHECK-P8-NEXT: addi r1, r1, 32428; CHECK-P8-NEXT: ld r0, 16(r1)429; CHECK-P8-NEXT: mtlr r0430; CHECK-P8-NEXT: blr431entry:432 %0 = load fp128, ptr @a_qp, align 16433 %1 = load fp128, ptr @b_qp, align 16434 %cmp = fcmp ole fp128 %0, %1435 %lnot = xor i1 %cmp, true436 %lnot.ext = zext i1 %lnot to i32437 ret i32 %lnot.ext438}439 440; Function Attrs: noinline nounwind optnone441define dso_local signext i32 @not_equal_qp() {442; CHECK-LABEL: not_equal_qp:443; CHECK: # %bb.0: # %entry444; CHECK-NEXT: addis r3, r2, a_qp@toc@ha445; CHECK-NEXT: addi r3, r3, a_qp@toc@l446; CHECK-NEXT: lxv v2, 0(r3)447; CHECK-NEXT: addis r3, r2, b_qp@toc@ha448; CHECK-NEXT: addi r3, r3, b_qp@toc@l449; CHECK-NEXT: lxv v3, 0(r3)450; CHECK-NEXT: li r3, 1451; CHECK-NEXT: xscmpuqp cr0, v2, v3452; CHECK-NEXT: iseleq r3, 0, r3453; CHECK-NEXT: blr454;455; CHECK-P8-LABEL: not_equal_qp:456; CHECK-P8: # %bb.0: # %entry457; CHECK-P8-NEXT: mflr r0458; CHECK-P8-NEXT: stdu r1, -32(r1)459; CHECK-P8-NEXT: std r0, 48(r1)460; CHECK-P8-NEXT: .cfi_def_cfa_offset 32461; CHECK-P8-NEXT: .cfi_offset lr, 16462; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha463; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l464; CHECK-P8-NEXT: lxvd2x vs0, 0, r3465; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha466; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l467; CHECK-P8-NEXT: xxswapd v2, vs0468; CHECK-P8-NEXT: lxvd2x vs0, 0, r3469; CHECK-P8-NEXT: xxswapd v3, vs0470; CHECK-P8-NEXT: bl __nekf2471; CHECK-P8-NEXT: nop472; CHECK-P8-NEXT: cntlzw r3, r3473; CHECK-P8-NEXT: srwi r3, r3, 5474; CHECK-P8-NEXT: xori r3, r3, 1475; CHECK-P8-NEXT: addi r1, r1, 32476; CHECK-P8-NEXT: ld r0, 16(r1)477; CHECK-P8-NEXT: mtlr r0478; CHECK-P8-NEXT: blr479entry:480 %0 = load fp128, ptr @a_qp, align 16481 %1 = load fp128, ptr @b_qp, align 16482 %cmp = fcmp une fp128 %0, %1483 %conv = zext i1 %cmp to i32484 ret i32 %conv485}486 487; Function Attrs: norecurse nounwind readonly488define fp128 @greater_sel_qp() {489; CHECK-LABEL: greater_sel_qp:490; CHECK: # %bb.0: # %entry491; CHECK-NEXT: addis r3, r2, a_qp@toc@ha492; CHECK-NEXT: addi r3, r3, a_qp@toc@l493; CHECK-NEXT: lxv v2, 0(r3)494; CHECK-NEXT: addis r3, r2, b_qp@toc@ha495; CHECK-NEXT: addi r3, r3, b_qp@toc@l496; CHECK-NEXT: lxv v3, 0(r3)497; CHECK-NEXT: xscmpuqp cr0, v2, v3498; CHECK-NEXT: bgtlr cr0499; CHECK-NEXT: # %bb.1: # %entry500; CHECK-NEXT: vmr v2, v3501; CHECK-NEXT: blr502;503; CHECK-P8-LABEL: greater_sel_qp:504; CHECK-P8: # %bb.0: # %entry505; CHECK-P8-NEXT: mflr r0506; CHECK-P8-NEXT: stdu r1, -80(r1)507; CHECK-P8-NEXT: std r0, 96(r1)508; CHECK-P8-NEXT: .cfi_def_cfa_offset 80509; CHECK-P8-NEXT: .cfi_offset lr, 16510; CHECK-P8-NEXT: .cfi_offset v30, -32511; CHECK-P8-NEXT: .cfi_offset v31, -16512; CHECK-P8-NEXT: li r3, 48513; CHECK-P8-NEXT: stvx v30, r1, r3 # 16-byte Folded Spill514; CHECK-P8-NEXT: li r3, 64515; CHECK-P8-NEXT: stvx v31, r1, r3 # 16-byte Folded Spill516; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha517; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l518; CHECK-P8-NEXT: lxvd2x vs0, 0, r3519; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha520; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l521; CHECK-P8-NEXT: xxswapd v31, vs0522; CHECK-P8-NEXT: lxvd2x vs0, 0, r3523; CHECK-P8-NEXT: vmr v2, v31524; CHECK-P8-NEXT: xxswapd v30, vs0525; CHECK-P8-NEXT: vmr v3, v30526; CHECK-P8-NEXT: bl __gtkf2527; CHECK-P8-NEXT: nop528; CHECK-P8-NEXT: cmpwi r3, 0529; CHECK-P8-NEXT: bgt cr0, .LBB10_2530; CHECK-P8-NEXT: # %bb.1: # %entry531; CHECK-P8-NEXT: vmr v31, v30532; CHECK-P8-NEXT: .LBB10_2: # %entry533; CHECK-P8-NEXT: li r3, 64534; CHECK-P8-NEXT: vmr v2, v31535; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload536; CHECK-P8-NEXT: li r3, 48537; CHECK-P8-NEXT: lvx v30, r1, r3 # 16-byte Folded Reload538; CHECK-P8-NEXT: addi r1, r1, 80539; CHECK-P8-NEXT: ld r0, 16(r1)540; CHECK-P8-NEXT: mtlr r0541; CHECK-P8-NEXT: blr542entry:543 %0 = load fp128, ptr @a_qp, align 16544 %1 = load fp128, ptr @b_qp, align 16545 %cmp = fcmp ogt fp128 %0, %1546 %cond = select i1 %cmp, fp128 %0, fp128 %1547 ret fp128 %cond548}549 550; Function Attrs: noinline nounwind optnone551define fp128 @less_sel_qp() {552; CHECK-LABEL: less_sel_qp:553; CHECK: # %bb.0: # %entry554; CHECK-NEXT: addis r3, r2, a_qp@toc@ha555; CHECK-NEXT: addi r3, r3, a_qp@toc@l556; CHECK-NEXT: lxv v2, 0(r3)557; CHECK-NEXT: addis r3, r2, b_qp@toc@ha558; CHECK-NEXT: addi r3, r3, b_qp@toc@l559; CHECK-NEXT: lxv v3, 0(r3)560; CHECK-NEXT: xscmpuqp cr0, v2, v3561; CHECK-NEXT: bltlr cr0562; CHECK-NEXT: # %bb.1: # %entry563; CHECK-NEXT: vmr v2, v3564; CHECK-NEXT: blr565;566; CHECK-P8-LABEL: less_sel_qp:567; CHECK-P8: # %bb.0: # %entry568; CHECK-P8-NEXT: mflr r0569; CHECK-P8-NEXT: stdu r1, -80(r1)570; CHECK-P8-NEXT: std r0, 96(r1)571; CHECK-P8-NEXT: .cfi_def_cfa_offset 80572; CHECK-P8-NEXT: .cfi_offset lr, 16573; CHECK-P8-NEXT: .cfi_offset v30, -32574; CHECK-P8-NEXT: .cfi_offset v31, -16575; CHECK-P8-NEXT: li r3, 48576; CHECK-P8-NEXT: stvx v30, r1, r3 # 16-byte Folded Spill577; CHECK-P8-NEXT: li r3, 64578; CHECK-P8-NEXT: stvx v31, r1, r3 # 16-byte Folded Spill579; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha580; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l581; CHECK-P8-NEXT: lxvd2x vs0, 0, r3582; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha583; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l584; CHECK-P8-NEXT: xxswapd v31, vs0585; CHECK-P8-NEXT: lxvd2x vs0, 0, r3586; CHECK-P8-NEXT: vmr v2, v31587; CHECK-P8-NEXT: xxswapd v30, vs0588; CHECK-P8-NEXT: vmr v3, v30589; CHECK-P8-NEXT: bl __ltkf2590; CHECK-P8-NEXT: nop591; CHECK-P8-NEXT: cmpwi r3, 0592; CHECK-P8-NEXT: blt cr0, .LBB11_2593; CHECK-P8-NEXT: # %bb.1: # %entry594; CHECK-P8-NEXT: vmr v31, v30595; CHECK-P8-NEXT: .LBB11_2: # %entry596; CHECK-P8-NEXT: li r3, 64597; CHECK-P8-NEXT: vmr v2, v31598; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload599; CHECK-P8-NEXT: li r3, 48600; CHECK-P8-NEXT: lvx v30, r1, r3 # 16-byte Folded Reload601; CHECK-P8-NEXT: addi r1, r1, 80602; CHECK-P8-NEXT: ld r0, 16(r1)603; CHECK-P8-NEXT: mtlr r0604; CHECK-P8-NEXT: blr605entry:606 %0 = load fp128, ptr @a_qp, align 16607 %1 = load fp128, ptr @b_qp, align 16608 %cmp = fcmp olt fp128 %0, %1609 %cond = select i1 %cmp, fp128 %0, fp128 %1610 ret fp128 %cond611}612 613; Function Attrs: noinline nounwind optnone614define fp128 @greater_eq_sel_qp() {615; CHECK-LABEL: greater_eq_sel_qp:616; CHECK: # %bb.0: # %entry617; CHECK-NEXT: addis r3, r2, a_qp@toc@ha618; CHECK-NEXT: addi r3, r3, a_qp@toc@l619; CHECK-NEXT: lxv v2, 0(r3)620; CHECK-NEXT: addis r3, r2, b_qp@toc@ha621; CHECK-NEXT: addi r3, r3, b_qp@toc@l622; CHECK-NEXT: lxv v3, 0(r3)623; CHECK-NEXT: xscmpuqp cr0, v2, v3624; CHECK-NEXT: crnor 4*cr5+lt, un, lt625; CHECK-NEXT: bclr 12, 4*cr5+lt, 0626; CHECK-NEXT: # %bb.1: # %entry627; CHECK-NEXT: vmr v2, v3628; CHECK-NEXT: blr629;630; CHECK-P8-LABEL: greater_eq_sel_qp:631; CHECK-P8: # %bb.0: # %entry632; CHECK-P8-NEXT: mflr r0633; CHECK-P8-NEXT: stdu r1, -80(r1)634; CHECK-P8-NEXT: std r0, 96(r1)635; CHECK-P8-NEXT: .cfi_def_cfa_offset 80636; CHECK-P8-NEXT: .cfi_offset lr, 16637; CHECK-P8-NEXT: .cfi_offset v30, -32638; CHECK-P8-NEXT: .cfi_offset v31, -16639; CHECK-P8-NEXT: li r3, 48640; CHECK-P8-NEXT: stvx v30, r1, r3 # 16-byte Folded Spill641; CHECK-P8-NEXT: li r3, 64642; CHECK-P8-NEXT: stvx v31, r1, r3 # 16-byte Folded Spill643; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha644; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l645; CHECK-P8-NEXT: lxvd2x vs0, 0, r3646; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha647; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l648; CHECK-P8-NEXT: xxswapd v31, vs0649; CHECK-P8-NEXT: lxvd2x vs0, 0, r3650; CHECK-P8-NEXT: vmr v2, v31651; CHECK-P8-NEXT: xxswapd v30, vs0652; CHECK-P8-NEXT: vmr v3, v30653; CHECK-P8-NEXT: bl __gekf2654; CHECK-P8-NEXT: nop655; CHECK-P8-NEXT: cmpwi r3, -1656; CHECK-P8-NEXT: bgt cr0, .LBB12_2657; CHECK-P8-NEXT: # %bb.1: # %entry658; CHECK-P8-NEXT: vmr v31, v30659; CHECK-P8-NEXT: .LBB12_2: # %entry660; CHECK-P8-NEXT: li r3, 64661; CHECK-P8-NEXT: vmr v2, v31662; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload663; CHECK-P8-NEXT: li r3, 48664; CHECK-P8-NEXT: lvx v30, r1, r3 # 16-byte Folded Reload665; CHECK-P8-NEXT: addi r1, r1, 80666; CHECK-P8-NEXT: ld r0, 16(r1)667; CHECK-P8-NEXT: mtlr r0668; CHECK-P8-NEXT: blr669entry:670 %0 = load fp128, ptr @a_qp, align 16671 %1 = load fp128, ptr @b_qp, align 16672 %cmp = fcmp oge fp128 %0, %1673 %cond = select i1 %cmp, fp128 %0, fp128 %1674 ret fp128 %cond675}676 677; Function Attrs: noinline nounwind optnone678define fp128 @less_eq_sel_qp() {679; CHECK-LABEL: less_eq_sel_qp:680; CHECK: # %bb.0: # %entry681; CHECK-NEXT: addis r3, r2, a_qp@toc@ha682; CHECK-NEXT: addi r3, r3, a_qp@toc@l683; CHECK-NEXT: lxv v2, 0(r3)684; CHECK-NEXT: addis r3, r2, b_qp@toc@ha685; CHECK-NEXT: addi r3, r3, b_qp@toc@l686; CHECK-NEXT: lxv v3, 0(r3)687; CHECK-NEXT: xscmpuqp cr0, v2, v3688; CHECK-NEXT: crnor 4*cr5+lt, un, gt689; CHECK-NEXT: bclr 12, 4*cr5+lt, 0690; CHECK-NEXT: # %bb.1: # %entry691; CHECK-NEXT: vmr v2, v3692; CHECK-NEXT: blr693;694; CHECK-P8-LABEL: less_eq_sel_qp:695; CHECK-P8: # %bb.0: # %entry696; CHECK-P8-NEXT: mflr r0697; CHECK-P8-NEXT: stdu r1, -80(r1)698; CHECK-P8-NEXT: std r0, 96(r1)699; CHECK-P8-NEXT: .cfi_def_cfa_offset 80700; CHECK-P8-NEXT: .cfi_offset lr, 16701; CHECK-P8-NEXT: .cfi_offset v30, -32702; CHECK-P8-NEXT: .cfi_offset v31, -16703; CHECK-P8-NEXT: li r3, 48704; CHECK-P8-NEXT: stvx v30, r1, r3 # 16-byte Folded Spill705; CHECK-P8-NEXT: li r3, 64706; CHECK-P8-NEXT: stvx v31, r1, r3 # 16-byte Folded Spill707; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha708; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l709; CHECK-P8-NEXT: lxvd2x vs0, 0, r3710; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha711; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l712; CHECK-P8-NEXT: xxswapd v31, vs0713; CHECK-P8-NEXT: lxvd2x vs0, 0, r3714; CHECK-P8-NEXT: vmr v2, v31715; CHECK-P8-NEXT: xxswapd v30, vs0716; CHECK-P8-NEXT: vmr v3, v30717; CHECK-P8-NEXT: bl __lekf2718; CHECK-P8-NEXT: nop719; CHECK-P8-NEXT: cmpwi r3, 1720; CHECK-P8-NEXT: blt cr0, .LBB13_2721; CHECK-P8-NEXT: # %bb.1: # %entry722; CHECK-P8-NEXT: vmr v31, v30723; CHECK-P8-NEXT: .LBB13_2: # %entry724; CHECK-P8-NEXT: li r3, 64725; CHECK-P8-NEXT: vmr v2, v31726; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload727; CHECK-P8-NEXT: li r3, 48728; CHECK-P8-NEXT: lvx v30, r1, r3 # 16-byte Folded Reload729; CHECK-P8-NEXT: addi r1, r1, 80730; CHECK-P8-NEXT: ld r0, 16(r1)731; CHECK-P8-NEXT: mtlr r0732; CHECK-P8-NEXT: blr733entry:734 %0 = load fp128, ptr @a_qp, align 16735 %1 = load fp128, ptr @b_qp, align 16736 %cmp = fcmp ole fp128 %0, %1737 %cond = select i1 %cmp, fp128 %0, fp128 %1738 ret fp128 %cond739}740 741; Function Attrs: noinline nounwind optnone742define fp128 @equal_sel_qp() {743; CHECK-LABEL: equal_sel_qp:744; CHECK: # %bb.0: # %entry745; CHECK-NEXT: addis r3, r2, a_qp@toc@ha746; CHECK-NEXT: addi r3, r3, a_qp@toc@l747; CHECK-NEXT: lxv v2, 0(r3)748; CHECK-NEXT: addis r3, r2, b_qp@toc@ha749; CHECK-NEXT: addi r3, r3, b_qp@toc@l750; CHECK-NEXT: lxv v3, 0(r3)751; CHECK-NEXT: xscmpuqp cr0, v2, v3752; CHECK-NEXT: beqlr cr0753; CHECK-NEXT: # %bb.1: # %entry754; CHECK-NEXT: vmr v2, v3755; CHECK-NEXT: blr756;757; CHECK-P8-LABEL: equal_sel_qp:758; CHECK-P8: # %bb.0: # %entry759; CHECK-P8-NEXT: mflr r0760; CHECK-P8-NEXT: stdu r1, -80(r1)761; CHECK-P8-NEXT: std r0, 96(r1)762; CHECK-P8-NEXT: .cfi_def_cfa_offset 80763; CHECK-P8-NEXT: .cfi_offset lr, 16764; CHECK-P8-NEXT: .cfi_offset v30, -32765; CHECK-P8-NEXT: .cfi_offset v31, -16766; CHECK-P8-NEXT: li r3, 48767; CHECK-P8-NEXT: stvx v30, r1, r3 # 16-byte Folded Spill768; CHECK-P8-NEXT: li r3, 64769; CHECK-P8-NEXT: stvx v31, r1, r3 # 16-byte Folded Spill770; CHECK-P8-NEXT: addis r3, r2, a_qp@toc@ha771; CHECK-P8-NEXT: addi r3, r3, a_qp@toc@l772; CHECK-P8-NEXT: lxvd2x vs0, 0, r3773; CHECK-P8-NEXT: addis r3, r2, b_qp@toc@ha774; CHECK-P8-NEXT: addi r3, r3, b_qp@toc@l775; CHECK-P8-NEXT: xxswapd v31, vs0776; CHECK-P8-NEXT: lxvd2x vs0, 0, r3777; CHECK-P8-NEXT: vmr v2, v31778; CHECK-P8-NEXT: xxswapd v30, vs0779; CHECK-P8-NEXT: vmr v3, v30780; CHECK-P8-NEXT: bl __eqkf2781; CHECK-P8-NEXT: nop782; CHECK-P8-NEXT: cmplwi r3, 0783; CHECK-P8-NEXT: beq cr0, .LBB14_2784; CHECK-P8-NEXT: # %bb.1: # %entry785; CHECK-P8-NEXT: vmr v31, v30786; CHECK-P8-NEXT: .LBB14_2: # %entry787; CHECK-P8-NEXT: li r3, 64788; CHECK-P8-NEXT: vmr v2, v31789; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload790; CHECK-P8-NEXT: li r3, 48791; CHECK-P8-NEXT: lvx v30, r1, r3 # 16-byte Folded Reload792; CHECK-P8-NEXT: addi r1, r1, 80793; CHECK-P8-NEXT: ld r0, 16(r1)794; CHECK-P8-NEXT: mtlr r0795; CHECK-P8-NEXT: blr796entry:797 %0 = load fp128, ptr @a_qp, align 16798 %1 = load fp128, ptr @b_qp, align 16799 %cmp = fcmp oeq fp128 %0, %1800 %cond = select i1 %cmp, fp128 %0, fp128 %1801 ret fp128 %cond802}803