brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.2 KiB · df55b92 Raw
1458 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \3; RUN:		-mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9LE4; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \5; RUN:    -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9BE6; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \7; RUN:    -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8LE8; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \9; RUN:    -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8BE10 11define <4 x i16> @fold_srem_vec_1(<4 x i16> %x) {12; P9LE-LABEL: fold_srem_vec_1:13; P9LE:       # %bb.0:14; P9LE-NEXT:    li r3, 015; P9LE-NEXT:    lis r4, -2138616; P9LE-NEXT:    vextuhrx r3, r3, v217; P9LE-NEXT:    ori r4, r4, 3725318; P9LE-NEXT:    extsh r3, r319; P9LE-NEXT:    mulhw r4, r3, r420; P9LE-NEXT:    add r4, r4, r321; P9LE-NEXT:    srwi r5, r4, 3122; P9LE-NEXT:    srawi r4, r4, 623; P9LE-NEXT:    add r4, r4, r524; P9LE-NEXT:    mulli r4, r4, 9525; P9LE-NEXT:    sub r3, r3, r426; P9LE-NEXT:    lis r4, 3171027; P9LE-NEXT:    mtvsrd v3, r328; P9LE-NEXT:    li r3, 229; P9LE-NEXT:    ori r4, r4, 6342130; P9LE-NEXT:    vextuhrx r3, r3, v231; P9LE-NEXT:    extsh r3, r332; P9LE-NEXT:    mulhw r4, r3, r433; P9LE-NEXT:    sub r4, r4, r334; P9LE-NEXT:    srwi r5, r4, 3135; P9LE-NEXT:    srawi r4, r4, 636; P9LE-NEXT:    add r4, r4, r537; P9LE-NEXT:    mulli r4, r4, -12438; P9LE-NEXT:    sub r3, r3, r439; P9LE-NEXT:    lis r4, 2139940; P9LE-NEXT:    mtvsrd v4, r341; P9LE-NEXT:    li r3, 442; P9LE-NEXT:    ori r4, r4, 3343743; P9LE-NEXT:    vextuhrx r3, r3, v244; P9LE-NEXT:    vmrghh v3, v4, v345; P9LE-NEXT:    extsh r3, r346; P9LE-NEXT:    mulhw r4, r3, r447; P9LE-NEXT:    srwi r5, r4, 3148; P9LE-NEXT:    srawi r4, r4, 549; P9LE-NEXT:    add r4, r4, r550; P9LE-NEXT:    mulli r4, r4, 9851; P9LE-NEXT:    sub r3, r3, r452; P9LE-NEXT:    lis r4, -1672853; P9LE-NEXT:    mtvsrd v4, r354; P9LE-NEXT:    li r3, 655; P9LE-NEXT:    ori r4, r4, 6324956; P9LE-NEXT:    vextuhrx r3, r3, v257; P9LE-NEXT:    extsh r3, r358; P9LE-NEXT:    mulhw r4, r3, r459; P9LE-NEXT:    srwi r5, r4, 3160; P9LE-NEXT:    srawi r4, r4, 861; P9LE-NEXT:    add r4, r4, r562; P9LE-NEXT:    mulli r4, r4, -100363; P9LE-NEXT:    sub r3, r3, r464; P9LE-NEXT:    mtvsrd v2, r365; P9LE-NEXT:    vmrghh v2, v2, v466; P9LE-NEXT:    xxmrglw v2, v2, v367; P9LE-NEXT:    blr68;69; P9BE-LABEL: fold_srem_vec_1:70; P9BE:       # %bb.0:71; P9BE-NEXT:    li r3, 272; P9BE-NEXT:    lis r4, 3171073; P9BE-NEXT:    vextuhlx r3, r3, v274; P9BE-NEXT:    ori r4, r4, 6342175; P9BE-NEXT:    extsh r3, r376; P9BE-NEXT:    mulhw r4, r3, r477; P9BE-NEXT:    sub r4, r4, r378; P9BE-NEXT:    srwi r5, r4, 3179; P9BE-NEXT:    srawi r4, r4, 680; P9BE-NEXT:    add r4, r4, r581; P9BE-NEXT:    mulli r4, r4, -12482; P9BE-NEXT:    sub r3, r3, r483; P9BE-NEXT:    lis r4, -2138684; P9BE-NEXT:    mtfprwz f0, r385; P9BE-NEXT:    li r3, 086; P9BE-NEXT:    ori r4, r4, 3725387; P9BE-NEXT:    vextuhlx r3, r3, v288; P9BE-NEXT:    extsh r3, r389; P9BE-NEXT:    mulhw r4, r3, r490; P9BE-NEXT:    add r4, r4, r391; P9BE-NEXT:    srwi r5, r4, 3192; P9BE-NEXT:    srawi r4, r4, 693; P9BE-NEXT:    add r4, r4, r594; P9BE-NEXT:    mulli r4, r4, 9595; P9BE-NEXT:    sub r3, r3, r496; P9BE-NEXT:    lis r4, -1672897; P9BE-NEXT:    mtfprwz f1, r398; P9BE-NEXT:    addis r3, r2, .LCPI0_0@toc@ha99; P9BE-NEXT:    ori r4, r4, 63249100; P9BE-NEXT:    addi r3, r3, .LCPI0_0@toc@l101; P9BE-NEXT:    lxv vs2, 0(r3)102; P9BE-NEXT:    li r3, 6103; P9BE-NEXT:    vextuhlx r3, r3, v2104; P9BE-NEXT:    extsh r3, r3105; P9BE-NEXT:    xxperm vs0, vs1, vs2106; P9BE-NEXT:    mulhw r4, r3, r4107; P9BE-NEXT:    srwi r5, r4, 31108; P9BE-NEXT:    srawi r4, r4, 8109; P9BE-NEXT:    add r4, r4, r5110; P9BE-NEXT:    mulli r4, r4, -1003111; P9BE-NEXT:    sub r3, r3, r4112; P9BE-NEXT:    lis r4, 21399113; P9BE-NEXT:    mtfprwz f1, r3114; P9BE-NEXT:    li r3, 4115; P9BE-NEXT:    ori r4, r4, 33437116; P9BE-NEXT:    vextuhlx r3, r3, v2117; P9BE-NEXT:    extsh r3, r3118; P9BE-NEXT:    mulhw r4, r3, r4119; P9BE-NEXT:    srwi r5, r4, 31120; P9BE-NEXT:    srawi r4, r4, 5121; P9BE-NEXT:    add r4, r4, r5122; P9BE-NEXT:    mulli r4, r4, 98123; P9BE-NEXT:    sub r3, r3, r4124; P9BE-NEXT:    mtfprwz f3, r3125; P9BE-NEXT:    xxperm vs1, vs3, vs2126; P9BE-NEXT:    xxmrghw v2, vs0, vs1127; P9BE-NEXT:    blr128;129; P8LE-LABEL: fold_srem_vec_1:130; P8LE:       # %bb.0:131; P8LE-NEXT:    xxswapd vs0, v2132; P8LE-NEXT:    lis r4, 21399133; P8LE-NEXT:    lis r5, -16728134; P8LE-NEXT:    lis r6, -21386135; P8LE-NEXT:    mffprd r3, f0136; P8LE-NEXT:    ori r4, r4, 33437137; P8LE-NEXT:    ori r5, r5, 63249138; P8LE-NEXT:    ori r6, r6, 37253139; P8LE-NEXT:    rldicl r7, r3, 32, 48140; P8LE-NEXT:    rldicl r8, r3, 16, 48141; P8LE-NEXT:    clrldi r9, r3, 48142; P8LE-NEXT:    rldicl r3, r3, 48, 48143; P8LE-NEXT:    extsh r7, r7144; P8LE-NEXT:    extsh r8, r8145; P8LE-NEXT:    extsh r9, r9146; P8LE-NEXT:    extsh r3, r3147; P8LE-NEXT:    mulhw r4, r7, r4148; P8LE-NEXT:    mulhw r5, r8, r5149; P8LE-NEXT:    mulhw r6, r9, r6150; P8LE-NEXT:    srwi r10, r4, 31151; P8LE-NEXT:    srawi r4, r4, 5152; P8LE-NEXT:    add r6, r6, r9153; P8LE-NEXT:    add r4, r4, r10154; P8LE-NEXT:    srwi r10, r5, 31155; P8LE-NEXT:    srawi r5, r5, 8156; P8LE-NEXT:    mulli r4, r4, 98157; P8LE-NEXT:    add r5, r5, r10158; P8LE-NEXT:    srwi r10, r6, 31159; P8LE-NEXT:    srawi r6, r6, 6160; P8LE-NEXT:    add r6, r6, r10161; P8LE-NEXT:    mulli r5, r5, -1003162; P8LE-NEXT:    sub r4, r7, r4163; P8LE-NEXT:    mtvsrd v2, r4164; P8LE-NEXT:    mulli r4, r6, 95165; P8LE-NEXT:    sub r5, r8, r5166; P8LE-NEXT:    mtvsrd v3, r5167; P8LE-NEXT:    sub r4, r9, r4168; P8LE-NEXT:    mtvsrd v4, r4169; P8LE-NEXT:    lis r4, 31710170; P8LE-NEXT:    ori r4, r4, 63421171; P8LE-NEXT:    mulhw r4, r3, r4172; P8LE-NEXT:    sub r4, r4, r3173; P8LE-NEXT:    srwi r5, r4, 31174; P8LE-NEXT:    srawi r4, r4, 6175; P8LE-NEXT:    add r4, r4, r5176; P8LE-NEXT:    mulli r4, r4, -124177; P8LE-NEXT:    sub r3, r3, r4178; P8LE-NEXT:    vmrghh v2, v3, v2179; P8LE-NEXT:    mtvsrd v3, r3180; P8LE-NEXT:    vmrghh v3, v3, v4181; P8LE-NEXT:    xxmrglw v2, v2, v3182; P8LE-NEXT:    blr183;184; P8BE-LABEL: fold_srem_vec_1:185; P8BE:       # %bb.0:186; P8BE-NEXT:    mfvsrd r3, v2187; P8BE-NEXT:    addis r6, r2, .LCPI0_0@toc@ha188; P8BE-NEXT:    lis r4, -16728189; P8BE-NEXT:    lis r5, 21399190; P8BE-NEXT:    lis r7, 31710191; P8BE-NEXT:    addi r6, r6, .LCPI0_0@toc@l192; P8BE-NEXT:    ori r4, r4, 63249193; P8BE-NEXT:    ori r5, r5, 33437194; P8BE-NEXT:    ori r7, r7, 63421195; P8BE-NEXT:    lxvw4x v2, 0, r6196; P8BE-NEXT:    clrldi r6, r3, 48197; P8BE-NEXT:    rldicl r8, r3, 48, 48198; P8BE-NEXT:    rldicl r9, r3, 32, 48199; P8BE-NEXT:    rldicl r3, r3, 16, 48200; P8BE-NEXT:    extsh r6, r6201; P8BE-NEXT:    extsh r8, r8202; P8BE-NEXT:    extsh r9, r9203; P8BE-NEXT:    extsh r3, r3204; P8BE-NEXT:    mulhw r4, r6, r4205; P8BE-NEXT:    mulhw r5, r8, r5206; P8BE-NEXT:    mulhw r7, r9, r7207; P8BE-NEXT:    srwi r10, r4, 31208; P8BE-NEXT:    srawi r4, r4, 8209; P8BE-NEXT:    sub r7, r7, r9210; P8BE-NEXT:    add r4, r4, r10211; P8BE-NEXT:    srwi r10, r5, 31212; P8BE-NEXT:    srawi r5, r5, 5213; P8BE-NEXT:    mulli r4, r4, -1003214; P8BE-NEXT:    add r5, r5, r10215; P8BE-NEXT:    srwi r10, r7, 31216; P8BE-NEXT:    srawi r7, r7, 6217; P8BE-NEXT:    add r7, r7, r10218; P8BE-NEXT:    mulli r5, r5, 98219; P8BE-NEXT:    sub r4, r6, r4220; P8BE-NEXT:    mtvsrwz v3, r4221; P8BE-NEXT:    mulli r4, r7, -124222; P8BE-NEXT:    sub r5, r8, r5223; P8BE-NEXT:    mtvsrwz v4, r5224; P8BE-NEXT:    sub r4, r9, r4225; P8BE-NEXT:    mtvsrwz v5, r4226; P8BE-NEXT:    lis r4, -21386227; P8BE-NEXT:    ori r4, r4, 37253228; P8BE-NEXT:    mulhw r4, r3, r4229; P8BE-NEXT:    add r4, r4, r3230; P8BE-NEXT:    srwi r5, r4, 31231; P8BE-NEXT:    srawi r4, r4, 6232; P8BE-NEXT:    add r4, r4, r5233; P8BE-NEXT:    mulli r4, r4, 95234; P8BE-NEXT:    sub r3, r3, r4235; P8BE-NEXT:    vperm v3, v4, v3, v2236; P8BE-NEXT:    mtvsrwz v4, r3237; P8BE-NEXT:    vperm v2, v4, v5, v2238; P8BE-NEXT:    xxmrghw v2, v2, v3239; P8BE-NEXT:    blr240  %1 = srem <4 x i16> %x, <i16 95, i16 -124, i16 98, i16 -1003>241  ret <4 x i16> %1242}243 244define <4 x i16> @fold_srem_vec_2(<4 x i16> %x) {245; P9LE-LABEL: fold_srem_vec_2:246; P9LE:       # %bb.0:247; P9LE-NEXT:    li r3, 0248; P9LE-NEXT:    lis r4, -21386249; P9LE-NEXT:    vextuhrx r3, r3, v2250; P9LE-NEXT:    ori r4, r4, 37253251; P9LE-NEXT:    extsh r3, r3252; P9LE-NEXT:    mulhw r5, r3, r4253; P9LE-NEXT:    add r5, r5, r3254; P9LE-NEXT:    srwi r6, r5, 31255; P9LE-NEXT:    srawi r5, r5, 6256; P9LE-NEXT:    add r5, r5, r6257; P9LE-NEXT:    mulli r5, r5, 95258; P9LE-NEXT:    sub r3, r3, r5259; P9LE-NEXT:    mtvsrd v3, r3260; P9LE-NEXT:    li r3, 2261; P9LE-NEXT:    vextuhrx r3, r3, v2262; P9LE-NEXT:    extsh r3, r3263; P9LE-NEXT:    mulhw r5, r3, r4264; P9LE-NEXT:    add r5, r5, r3265; P9LE-NEXT:    srwi r6, r5, 31266; P9LE-NEXT:    srawi r5, r5, 6267; P9LE-NEXT:    add r5, r5, r6268; P9LE-NEXT:    mulli r5, r5, 95269; P9LE-NEXT:    sub r3, r3, r5270; P9LE-NEXT:    mtvsrd v4, r3271; P9LE-NEXT:    li r3, 4272; P9LE-NEXT:    vextuhrx r3, r3, v2273; P9LE-NEXT:    vmrghh v3, v4, v3274; P9LE-NEXT:    extsh r3, r3275; P9LE-NEXT:    mulhw r5, r3, r4276; P9LE-NEXT:    add r5, r5, r3277; P9LE-NEXT:    srwi r6, r5, 31278; P9LE-NEXT:    srawi r5, r5, 6279; P9LE-NEXT:    add r5, r5, r6280; P9LE-NEXT:    mulli r5, r5, 95281; P9LE-NEXT:    sub r3, r3, r5282; P9LE-NEXT:    mtvsrd v4, r3283; P9LE-NEXT:    li r3, 6284; P9LE-NEXT:    vextuhrx r3, r3, v2285; P9LE-NEXT:    extsh r3, r3286; P9LE-NEXT:    mulhw r4, r3, r4287; P9LE-NEXT:    add r4, r4, r3288; P9LE-NEXT:    srwi r5, r4, 31289; P9LE-NEXT:    srawi r4, r4, 6290; P9LE-NEXT:    add r4, r4, r5291; P9LE-NEXT:    mulli r4, r4, 95292; P9LE-NEXT:    sub r3, r3, r4293; P9LE-NEXT:    mtvsrd v2, r3294; P9LE-NEXT:    vmrghh v2, v2, v4295; P9LE-NEXT:    xxmrglw v2, v2, v3296; P9LE-NEXT:    blr297;298; P9BE-LABEL: fold_srem_vec_2:299; P9BE:       # %bb.0:300; P9BE-NEXT:    li r3, 6301; P9BE-NEXT:    lis r4, -21386302; P9BE-NEXT:    vextuhlx r3, r3, v2303; P9BE-NEXT:    ori r4, r4, 37253304; P9BE-NEXT:    extsh r3, r3305; P9BE-NEXT:    mulhw r5, r3, r4306; P9BE-NEXT:    add r5, r5, r3307; P9BE-NEXT:    srwi r6, r5, 31308; P9BE-NEXT:    srawi r5, r5, 6309; P9BE-NEXT:    add r5, r5, r6310; P9BE-NEXT:    mulli r5, r5, 95311; P9BE-NEXT:    sub r3, r3, r5312; P9BE-NEXT:    mtfprwz f0, r3313; P9BE-NEXT:    li r3, 4314; P9BE-NEXT:    vextuhlx r3, r3, v2315; P9BE-NEXT:    extsh r3, r3316; P9BE-NEXT:    mulhw r5, r3, r4317; P9BE-NEXT:    add r5, r5, r3318; P9BE-NEXT:    srwi r6, r5, 31319; P9BE-NEXT:    srawi r5, r5, 6320; P9BE-NEXT:    add r5, r5, r6321; P9BE-NEXT:    mulli r5, r5, 95322; P9BE-NEXT:    sub r3, r3, r5323; P9BE-NEXT:    mtfprwz f1, r3324; P9BE-NEXT:    addis r3, r2, .LCPI1_0@toc@ha325; P9BE-NEXT:    addi r3, r3, .LCPI1_0@toc@l326; P9BE-NEXT:    lxv vs2, 0(r3)327; P9BE-NEXT:    li r3, 2328; P9BE-NEXT:    vextuhlx r3, r3, v2329; P9BE-NEXT:    extsh r3, r3330; P9BE-NEXT:    xxperm vs0, vs1, vs2331; P9BE-NEXT:    mulhw r5, r3, r4332; P9BE-NEXT:    add r5, r5, r3333; P9BE-NEXT:    srwi r6, r5, 31334; P9BE-NEXT:    srawi r5, r5, 6335; P9BE-NEXT:    add r5, r5, r6336; P9BE-NEXT:    mulli r5, r5, 95337; P9BE-NEXT:    sub r3, r3, r5338; P9BE-NEXT:    mtfprwz f1, r3339; P9BE-NEXT:    li r3, 0340; P9BE-NEXT:    vextuhlx r3, r3, v2341; P9BE-NEXT:    extsh r3, r3342; P9BE-NEXT:    mulhw r4, r3, r4343; P9BE-NEXT:    add r4, r4, r3344; P9BE-NEXT:    srwi r5, r4, 31345; P9BE-NEXT:    srawi r4, r4, 6346; P9BE-NEXT:    add r4, r4, r5347; P9BE-NEXT:    mulli r4, r4, 95348; P9BE-NEXT:    sub r3, r3, r4349; P9BE-NEXT:    mtfprwz f3, r3350; P9BE-NEXT:    xxperm vs1, vs3, vs2351; P9BE-NEXT:    xxmrghw v2, vs1, vs0352; P9BE-NEXT:    blr353;354; P8LE-LABEL: fold_srem_vec_2:355; P8LE:       # %bb.0:356; P8LE-NEXT:    xxswapd vs0, v2357; P8LE-NEXT:    lis r4, -21386358; P8LE-NEXT:    mffprd r3, f0359; P8LE-NEXT:    ori r4, r4, 37253360; P8LE-NEXT:    clrldi r5, r3, 48361; P8LE-NEXT:    rldicl r6, r3, 48, 48362; P8LE-NEXT:    rldicl r7, r3, 32, 48363; P8LE-NEXT:    rldicl r3, r3, 16, 48364; P8LE-NEXT:    extsh r5, r5365; P8LE-NEXT:    extsh r6, r6366; P8LE-NEXT:    extsh r7, r7367; P8LE-NEXT:    extsh r3, r3368; P8LE-NEXT:    mulhw r8, r5, r4369; P8LE-NEXT:    mulhw r9, r6, r4370; P8LE-NEXT:    mulhw r10, r7, r4371; P8LE-NEXT:    mulhw r4, r3, r4372; P8LE-NEXT:    add r8, r8, r5373; P8LE-NEXT:    add r9, r9, r6374; P8LE-NEXT:    add r10, r10, r7375; P8LE-NEXT:    add r4, r4, r3376; P8LE-NEXT:    srwi r11, r8, 31377; P8LE-NEXT:    srawi r8, r8, 6378; P8LE-NEXT:    add r8, r8, r11379; P8LE-NEXT:    srwi r11, r9, 31380; P8LE-NEXT:    srawi r9, r9, 6381; P8LE-NEXT:    mulli r8, r8, 95382; P8LE-NEXT:    add r9, r9, r11383; P8LE-NEXT:    srwi r11, r10, 31384; P8LE-NEXT:    srawi r10, r10, 6385; P8LE-NEXT:    add r10, r10, r11386; P8LE-NEXT:    srwi r11, r4, 31387; P8LE-NEXT:    srawi r4, r4, 6388; P8LE-NEXT:    add r4, r4, r11389; P8LE-NEXT:    sub r5, r5, r8390; P8LE-NEXT:    mulli r8, r9, 95391; P8LE-NEXT:    mulli r4, r4, 95392; P8LE-NEXT:    mtvsrd v2, r5393; P8LE-NEXT:    sub r6, r6, r8394; P8LE-NEXT:    mulli r8, r10, 95395; P8LE-NEXT:    sub r3, r3, r4396; P8LE-NEXT:    mtvsrd v3, r6397; P8LE-NEXT:    sub r7, r7, r8398; P8LE-NEXT:    mtvsrd v4, r7399; P8LE-NEXT:    vmrghh v2, v3, v2400; P8LE-NEXT:    mtvsrd v3, r3401; P8LE-NEXT:    vmrghh v3, v3, v4402; P8LE-NEXT:    xxmrglw v2, v3, v2403; P8LE-NEXT:    blr404;405; P8BE-LABEL: fold_srem_vec_2:406; P8BE:       # %bb.0:407; P8BE-NEXT:    mfvsrd r3, v2408; P8BE-NEXT:    lis r4, -21386409; P8BE-NEXT:    ori r4, r4, 37253410; P8BE-NEXT:    clrldi r5, r3, 48411; P8BE-NEXT:    rldicl r6, r3, 48, 48412; P8BE-NEXT:    rldicl r7, r3, 32, 48413; P8BE-NEXT:    rldicl r3, r3, 16, 48414; P8BE-NEXT:    extsh r5, r5415; P8BE-NEXT:    extsh r6, r6416; P8BE-NEXT:    extsh r7, r7417; P8BE-NEXT:    extsh r3, r3418; P8BE-NEXT:    mulhw r8, r5, r4419; P8BE-NEXT:    mulhw r9, r6, r4420; P8BE-NEXT:    mulhw r10, r7, r4421; P8BE-NEXT:    mulhw r4, r3, r4422; P8BE-NEXT:    add r8, r8, r5423; P8BE-NEXT:    add r9, r9, r6424; P8BE-NEXT:    add r10, r10, r7425; P8BE-NEXT:    add r4, r4, r3426; P8BE-NEXT:    srwi r11, r8, 31427; P8BE-NEXT:    srawi r8, r8, 6428; P8BE-NEXT:    add r8, r8, r11429; P8BE-NEXT:    srwi r11, r9, 31430; P8BE-NEXT:    srawi r9, r9, 6431; P8BE-NEXT:    mulli r8, r8, 95432; P8BE-NEXT:    add r9, r9, r11433; P8BE-NEXT:    srwi r11, r10, 31434; P8BE-NEXT:    srawi r10, r10, 6435; P8BE-NEXT:    add r10, r10, r11436; P8BE-NEXT:    srwi r11, r4, 31437; P8BE-NEXT:    srawi r4, r4, 6438; P8BE-NEXT:    add r4, r4, r11439; P8BE-NEXT:    addis r11, r2, .LCPI1_0@toc@ha440; P8BE-NEXT:    sub r5, r5, r8441; P8BE-NEXT:    mulli r8, r9, 95442; P8BE-NEXT:    addi r11, r11, .LCPI1_0@toc@l443; P8BE-NEXT:    mulli r4, r4, 95444; P8BE-NEXT:    mtvsrwz v3, r5445; P8BE-NEXT:    lxvw4x v2, 0, r11446; P8BE-NEXT:    sub r6, r6, r8447; P8BE-NEXT:    mulli r8, r10, 95448; P8BE-NEXT:    sub r3, r3, r4449; P8BE-NEXT:    mtvsrwz v4, r6450; P8BE-NEXT:    sub r7, r7, r8451; P8BE-NEXT:    mtvsrwz v5, r7452; P8BE-NEXT:    vperm v3, v4, v3, v2453; P8BE-NEXT:    mtvsrwz v4, r3454; P8BE-NEXT:    vperm v2, v4, v5, v2455; P8BE-NEXT:    xxmrghw v2, v2, v3456; P8BE-NEXT:    blr457  %1 = srem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>458  ret <4 x i16> %1459}460 461 462; Don't fold if we can combine srem with sdiv.463define <4 x i16> @combine_srem_sdiv(<4 x i16> %x) {464; P9LE-LABEL: combine_srem_sdiv:465; P9LE:       # %bb.0:466; P9LE-NEXT:    li r3, 0467; P9LE-NEXT:    lis r4, -21386468; P9LE-NEXT:    vextuhrx r3, r3, v2469; P9LE-NEXT:    ori r4, r4, 37253470; P9LE-NEXT:    extsh r3, r3471; P9LE-NEXT:    mulhw r5, r3, r4472; P9LE-NEXT:    add r5, r5, r3473; P9LE-NEXT:    srwi r6, r5, 31474; P9LE-NEXT:    srawi r5, r5, 6475; P9LE-NEXT:    add r5, r5, r6476; P9LE-NEXT:    mulli r6, r5, 95477; P9LE-NEXT:    sub r3, r3, r6478; P9LE-NEXT:    mtvsrd v3, r3479; P9LE-NEXT:    li r3, 2480; P9LE-NEXT:    vextuhrx r3, r3, v2481; P9LE-NEXT:    extsh r6, r3482; P9LE-NEXT:    mulhw r7, r6, r4483; P9LE-NEXT:    add r6, r7, r6484; P9LE-NEXT:    srwi r7, r6, 31485; P9LE-NEXT:    srawi r6, r6, 6486; P9LE-NEXT:    add r6, r6, r7487; P9LE-NEXT:    mulli r7, r6, 95488; P9LE-NEXT:    sub r3, r3, r7489; P9LE-NEXT:    mtvsrd v4, r3490; P9LE-NEXT:    li r3, 4491; P9LE-NEXT:    vextuhrx r3, r3, v2492; P9LE-NEXT:    vmrghh v3, v4, v3493; P9LE-NEXT:    extsh r7, r3494; P9LE-NEXT:    mulhw r8, r7, r4495; P9LE-NEXT:    add r7, r8, r7496; P9LE-NEXT:    srwi r8, r7, 31497; P9LE-NEXT:    srawi r7, r7, 6498; P9LE-NEXT:    add r7, r7, r8499; P9LE-NEXT:    mulli r8, r7, 95500; P9LE-NEXT:    sub r3, r3, r8501; P9LE-NEXT:    mtvsrd v4, r3502; P9LE-NEXT:    li r3, 6503; P9LE-NEXT:    vextuhrx r3, r3, v2504; P9LE-NEXT:    extsh r8, r3505; P9LE-NEXT:    mulhw r4, r8, r4506; P9LE-NEXT:    add r4, r4, r8507; P9LE-NEXT:    srwi r8, r4, 31508; P9LE-NEXT:    srawi r4, r4, 6509; P9LE-NEXT:    add r4, r4, r8510; P9LE-NEXT:    mulli r8, r4, 95511; P9LE-NEXT:    mtvsrd v5, r4512; P9LE-NEXT:    sub r3, r3, r8513; P9LE-NEXT:    mtvsrd v2, r3514; P9LE-NEXT:    vmrghh v2, v2, v4515; P9LE-NEXT:    mtvsrd v4, r6516; P9LE-NEXT:    xxmrglw v2, v2, v3517; P9LE-NEXT:    mtvsrd v3, r5518; P9LE-NEXT:    vmrghh v3, v4, v3519; P9LE-NEXT:    mtvsrd v4, r7520; P9LE-NEXT:    vmrghh v4, v5, v4521; P9LE-NEXT:    xxmrglw v3, v4, v3522; P9LE-NEXT:    vadduhm v2, v2, v3523; P9LE-NEXT:    blr524;525; P9BE-LABEL: combine_srem_sdiv:526; P9BE:       # %bb.0:527; P9BE-NEXT:    li r3, 6528; P9BE-NEXT:    lis r5, -21386529; P9BE-NEXT:    vextuhlx r3, r3, v2530; P9BE-NEXT:    ori r5, r5, 37253531; P9BE-NEXT:    extsh r4, r3532; P9BE-NEXT:    mulhw r6, r4, r5533; P9BE-NEXT:    add r4, r6, r4534; P9BE-NEXT:    srwi r6, r4, 31535; P9BE-NEXT:    srawi r4, r4, 6536; P9BE-NEXT:    add r4, r4, r6537; P9BE-NEXT:    mulli r6, r4, 95538; P9BE-NEXT:    sub r3, r3, r6539; P9BE-NEXT:    mtfprwz f0, r3540; P9BE-NEXT:    li r3, 4541; P9BE-NEXT:    vextuhlx r3, r3, v2542; P9BE-NEXT:    extsh r6, r3543; P9BE-NEXT:    mulhw r7, r6, r5544; P9BE-NEXT:    add r6, r7, r6545; P9BE-NEXT:    srwi r7, r6, 31546; P9BE-NEXT:    srawi r6, r6, 6547; P9BE-NEXT:    add r6, r6, r7548; P9BE-NEXT:    mulli r7, r6, 95549; P9BE-NEXT:    sub r3, r3, r7550; P9BE-NEXT:    mtfprwz f1, r3551; P9BE-NEXT:    addis r3, r2, .LCPI2_0@toc@ha552; P9BE-NEXT:    addi r3, r3, .LCPI2_0@toc@l553; P9BE-NEXT:    lxv vs2, 0(r3)554; P9BE-NEXT:    li r3, 2555; P9BE-NEXT:    vextuhlx r3, r3, v2556; P9BE-NEXT:    extsh r7, r3557; P9BE-NEXT:    xxperm vs0, vs1, vs2558; P9BE-NEXT:    mulhw r8, r7, r5559; P9BE-NEXT:    add r7, r8, r7560; P9BE-NEXT:    srwi r8, r7, 31561; P9BE-NEXT:    srawi r7, r7, 6562; P9BE-NEXT:    add r7, r7, r8563; P9BE-NEXT:    mulli r8, r7, 95564; P9BE-NEXT:    sub r3, r3, r8565; P9BE-NEXT:    mtfprwz f1, r3566; P9BE-NEXT:    li r3, 0567; P9BE-NEXT:    vextuhlx r3, r3, v2568; P9BE-NEXT:    extsh r3, r3569; P9BE-NEXT:    mulhw r5, r3, r5570; P9BE-NEXT:    add r5, r5, r3571; P9BE-NEXT:    srwi r8, r5, 31572; P9BE-NEXT:    srawi r5, r5, 6573; P9BE-NEXT:    add r5, r5, r8574; P9BE-NEXT:    mulli r8, r5, 95575; P9BE-NEXT:    sub r3, r3, r8576; P9BE-NEXT:    mtfprwz f3, r3577; P9BE-NEXT:    xxperm vs1, vs3, vs2578; P9BE-NEXT:    mtfprwz f3, r5579; P9BE-NEXT:    xxmrghw v2, vs1, vs0580; P9BE-NEXT:    mtfprwz f0, r4581; P9BE-NEXT:    mtfprwz f1, r6582; P9BE-NEXT:    xxperm vs0, vs1, vs2583; P9BE-NEXT:    mtfprwz f1, r7584; P9BE-NEXT:    xxperm vs1, vs3, vs2585; P9BE-NEXT:    xxmrghw v3, vs1, vs0586; P9BE-NEXT:    vadduhm v2, v2, v3587; P9BE-NEXT:    blr588;589; P8LE-LABEL: combine_srem_sdiv:590; P8LE:       # %bb.0:591; P8LE-NEXT:    xxswapd vs0, v2592; P8LE-NEXT:    lis r4, -21386593; P8LE-NEXT:    mffprd r3, f0594; P8LE-NEXT:    ori r4, r4, 37253595; P8LE-NEXT:    rldicl r6, r3, 48, 48596; P8LE-NEXT:    rldicl r7, r3, 32, 48597; P8LE-NEXT:    clrldi r5, r3, 48598; P8LE-NEXT:    rldicl r3, r3, 16, 48599; P8LE-NEXT:    extsh r8, r6600; P8LE-NEXT:    extsh r9, r7601; P8LE-NEXT:    extsh r5, r5602; P8LE-NEXT:    extsh r10, r3603; P8LE-NEXT:    mulhw r11, r8, r4604; P8LE-NEXT:    add r8, r11, r8605; P8LE-NEXT:    mulhw r11, r9, r4606; P8LE-NEXT:    add r9, r11, r9607; P8LE-NEXT:    mulhw r11, r5, r4608; P8LE-NEXT:    mulhw r4, r10, r4609; P8LE-NEXT:    add r11, r11, r5610; P8LE-NEXT:    add r4, r4, r10611; P8LE-NEXT:    srwi r10, r11, 31612; P8LE-NEXT:    srawi r11, r11, 6613; P8LE-NEXT:    add r10, r11, r10614; P8LE-NEXT:    srwi r11, r8, 31615; P8LE-NEXT:    srawi r8, r8, 6616; P8LE-NEXT:    add r8, r8, r11617; P8LE-NEXT:    srwi r11, r9, 31618; P8LE-NEXT:    srawi r9, r9, 6619; P8LE-NEXT:    mtvsrd v2, r10620; P8LE-NEXT:    add r9, r9, r11621; P8LE-NEXT:    srwi r11, r4, 31622; P8LE-NEXT:    srawi r4, r4, 6623; P8LE-NEXT:    mtvsrd v3, r8624; P8LE-NEXT:    add r4, r4, r11625; P8LE-NEXT:    mulli r11, r10, 95626; P8LE-NEXT:    sub r5, r5, r11627; P8LE-NEXT:    mulli r11, r8, 95628; P8LE-NEXT:    mtvsrd v4, r5629; P8LE-NEXT:    sub r6, r6, r11630; P8LE-NEXT:    mulli r11, r9, 95631; P8LE-NEXT:    mtvsrd v5, r6632; P8LE-NEXT:    sub r7, r7, r11633; P8LE-NEXT:    mulli r11, r4, 95634; P8LE-NEXT:    mtvsrd v0, r7635; P8LE-NEXT:    sub r3, r3, r11636; P8LE-NEXT:    vmrghh v2, v3, v2637; P8LE-NEXT:    mtvsrd v3, r9638; P8LE-NEXT:    vmrghh v4, v5, v4639; P8LE-NEXT:    mtvsrd v5, r3640; P8LE-NEXT:    vmrghh v5, v5, v0641; P8LE-NEXT:    mtvsrd v0, r4642; P8LE-NEXT:    xxmrglw v4, v5, v4643; P8LE-NEXT:    vmrghh v3, v0, v3644; P8LE-NEXT:    xxmrglw v2, v3, v2645; P8LE-NEXT:    vadduhm v2, v4, v2646; P8LE-NEXT:    blr647;648; P8BE-LABEL: combine_srem_sdiv:649; P8BE:       # %bb.0:650; P8BE-NEXT:    mfvsrd r4, v2651; P8BE-NEXT:    lis r5, -21386652; P8BE-NEXT:    ori r5, r5, 37253653; P8BE-NEXT:    clrldi r3, r4, 48654; P8BE-NEXT:    rldicl r6, r4, 48, 48655; P8BE-NEXT:    rldicl r7, r4, 32, 48656; P8BE-NEXT:    rldicl r4, r4, 16, 48657; P8BE-NEXT:    extsh r8, r3658; P8BE-NEXT:    extsh r9, r6659; P8BE-NEXT:    extsh r10, r7660; P8BE-NEXT:    extsh r4, r4661; P8BE-NEXT:    mulhw r11, r8, r5662; P8BE-NEXT:    add r8, r11, r8663; P8BE-NEXT:    mulhw r11, r9, r5664; P8BE-NEXT:    add r9, r11, r9665; P8BE-NEXT:    mulhw r11, r10, r5666; P8BE-NEXT:    mulhw r5, r4, r5667; P8BE-NEXT:    add r10, r11, r10668; P8BE-NEXT:    srwi r11, r8, 31669; P8BE-NEXT:    srawi r8, r8, 6670; P8BE-NEXT:    add r5, r5, r4671; P8BE-NEXT:    add r8, r8, r11672; P8BE-NEXT:    srwi r11, r9, 31673; P8BE-NEXT:    srawi r9, r9, 6674; P8BE-NEXT:    add r9, r9, r11675; P8BE-NEXT:    srwi r11, r10, 31676; P8BE-NEXT:    srawi r10, r10, 6677; P8BE-NEXT:    mtvsrwz v3, r8678; P8BE-NEXT:    add r10, r10, r11679; P8BE-NEXT:    srwi r11, r5, 31680; P8BE-NEXT:    srawi r5, r5, 6681; P8BE-NEXT:    mtvsrwz v4, r9682; P8BE-NEXT:    add r5, r5, r11683; P8BE-NEXT:    mulli r11, r8, 95684; P8BE-NEXT:    sub r3, r3, r11685; P8BE-NEXT:    mulli r11, r9, 95686; P8BE-NEXT:    mtvsrwz v5, r3687; P8BE-NEXT:    sub r6, r6, r11688; P8BE-NEXT:    mulli r11, r10, 95689; P8BE-NEXT:    mtvsrwz v0, r6690; P8BE-NEXT:    sub r7, r7, r11691; P8BE-NEXT:    mulli r11, r5, 95692; P8BE-NEXT:    mtvsrwz v1, r7693; P8BE-NEXT:    sub r4, r4, r11694; P8BE-NEXT:    addis r11, r2, .LCPI2_0@toc@ha695; P8BE-NEXT:    addi r11, r11, .LCPI2_0@toc@l696; P8BE-NEXT:    lxvw4x v2, 0, r11697; P8BE-NEXT:    vperm v5, v0, v5, v2698; P8BE-NEXT:    mtvsrwz v0, r4699; P8BE-NEXT:    vperm v3, v4, v3, v2700; P8BE-NEXT:    mtvsrwz v4, r10701; P8BE-NEXT:    vperm v0, v0, v1, v2702; P8BE-NEXT:    mtvsrwz v1, r5703; P8BE-NEXT:    vperm v2, v1, v4, v2704; P8BE-NEXT:    xxmrghw v4, v0, v5705; P8BE-NEXT:    xxmrghw v2, v2, v3706; P8BE-NEXT:    vadduhm v2, v4, v2707; P8BE-NEXT:    blr708  %1 = srem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>709  %2 = sdiv <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>710  %3 = add <4 x i16> %1, %2711  ret <4 x i16> %3712}713 714; Don't fold for divisors that are a power of two.715define <4 x i16> @dont_fold_srem_power_of_two(<4 x i16> %x) {716; P9LE-LABEL: dont_fold_srem_power_of_two:717; P9LE:       # %bb.0:718; P9LE-NEXT:    li r3, 0719; P9LE-NEXT:    vextuhrx r3, r3, v2720; P9LE-NEXT:    extsh r3, r3721; P9LE-NEXT:    srawi r4, r3, 6722; P9LE-NEXT:    addze r4, r4723; P9LE-NEXT:    slwi r4, r4, 6724; P9LE-NEXT:    sub r3, r3, r4725; P9LE-NEXT:    mtvsrd v3, r3726; P9LE-NEXT:    li r3, 2727; P9LE-NEXT:    vextuhrx r3, r3, v2728; P9LE-NEXT:    extsh r3, r3729; P9LE-NEXT:    srawi r4, r3, 5730; P9LE-NEXT:    addze r4, r4731; P9LE-NEXT:    slwi r4, r4, 5732; P9LE-NEXT:    sub r3, r3, r4733; P9LE-NEXT:    lis r4, -21386734; P9LE-NEXT:    mtvsrd v4, r3735; P9LE-NEXT:    li r3, 6736; P9LE-NEXT:    ori r4, r4, 37253737; P9LE-NEXT:    vextuhrx r3, r3, v2738; P9LE-NEXT:    vmrghh v3, v4, v3739; P9LE-NEXT:    extsh r3, r3740; P9LE-NEXT:    mulhw r4, r3, r4741; P9LE-NEXT:    add r4, r4, r3742; P9LE-NEXT:    srwi r5, r4, 31743; P9LE-NEXT:    srawi r4, r4, 6744; P9LE-NEXT:    add r4, r4, r5745; P9LE-NEXT:    mulli r4, r4, 95746; P9LE-NEXT:    sub r3, r3, r4747; P9LE-NEXT:    mtvsrd v4, r3748; P9LE-NEXT:    li r3, 4749; P9LE-NEXT:    vextuhrx r3, r3, v2750; P9LE-NEXT:    extsh r3, r3751; P9LE-NEXT:    srawi r4, r3, 3752; P9LE-NEXT:    addze r4, r4753; P9LE-NEXT:    slwi r4, r4, 3754; P9LE-NEXT:    sub r3, r3, r4755; P9LE-NEXT:    mtvsrd v2, r3756; P9LE-NEXT:    vmrghh v2, v4, v2757; P9LE-NEXT:    xxmrglw v2, v2, v3758; P9LE-NEXT:    blr759;760; P9BE-LABEL: dont_fold_srem_power_of_two:761; P9BE:       # %bb.0:762; P9BE-NEXT:    li r3, 2763; P9BE-NEXT:    vextuhlx r3, r3, v2764; P9BE-NEXT:    extsh r3, r3765; P9BE-NEXT:    srawi r4, r3, 5766; P9BE-NEXT:    addze r4, r4767; P9BE-NEXT:    slwi r4, r4, 5768; P9BE-NEXT:    sub r3, r3, r4769; P9BE-NEXT:    mtfprwz f0, r3770; P9BE-NEXT:    li r3, 0771; P9BE-NEXT:    vextuhlx r3, r3, v2772; P9BE-NEXT:    extsh r3, r3773; P9BE-NEXT:    srawi r4, r3, 6774; P9BE-NEXT:    addze r4, r4775; P9BE-NEXT:    slwi r4, r4, 6776; P9BE-NEXT:    sub r3, r3, r4777; P9BE-NEXT:    lis r4, -21386778; P9BE-NEXT:    mtfprwz f1, r3779; P9BE-NEXT:    addis r3, r2, .LCPI3_0@toc@ha780; P9BE-NEXT:    ori r4, r4, 37253781; P9BE-NEXT:    addi r3, r3, .LCPI3_0@toc@l782; P9BE-NEXT:    lxv vs2, 0(r3)783; P9BE-NEXT:    li r3, 6784; P9BE-NEXT:    vextuhlx r3, r3, v2785; P9BE-NEXT:    extsh r3, r3786; P9BE-NEXT:    xxperm vs0, vs1, vs2787; P9BE-NEXT:    mulhw r4, r3, r4788; P9BE-NEXT:    add r4, r4, r3789; P9BE-NEXT:    srwi r5, r4, 31790; P9BE-NEXT:    srawi r4, r4, 6791; P9BE-NEXT:    add r4, r4, r5792; P9BE-NEXT:    mulli r4, r4, 95793; P9BE-NEXT:    sub r3, r3, r4794; P9BE-NEXT:    mtfprwz f1, r3795; P9BE-NEXT:    li r3, 4796; P9BE-NEXT:    vextuhlx r3, r3, v2797; P9BE-NEXT:    extsh r3, r3798; P9BE-NEXT:    srawi r4, r3, 3799; P9BE-NEXT:    addze r4, r4800; P9BE-NEXT:    slwi r4, r4, 3801; P9BE-NEXT:    sub r3, r3, r4802; P9BE-NEXT:    mtfprwz f3, r3803; P9BE-NEXT:    xxperm vs1, vs3, vs2804; P9BE-NEXT:    xxmrghw v2, vs0, vs1805; P9BE-NEXT:    blr806;807; P8LE-LABEL: dont_fold_srem_power_of_two:808; P8LE:       # %bb.0:809; P8LE-NEXT:    xxswapd vs0, v2810; P8LE-NEXT:    mffprd r3, f0811; P8LE-NEXT:    clrldi r4, r3, 48812; P8LE-NEXT:    extsh r4, r4813; P8LE-NEXT:    srawi r5, r4, 6814; P8LE-NEXT:    addze r5, r5815; P8LE-NEXT:    slwi r5, r5, 6816; P8LE-NEXT:    sub r4, r4, r5817; P8LE-NEXT:    mtvsrd v2, r4818; P8LE-NEXT:    rldicl r4, r3, 48, 48819; P8LE-NEXT:    extsh r4, r4820; P8LE-NEXT:    srawi r5, r4, 5821; P8LE-NEXT:    addze r5, r5822; P8LE-NEXT:    slwi r5, r5, 5823; P8LE-NEXT:    sub r4, r4, r5824; P8LE-NEXT:    lis r5, -21386825; P8LE-NEXT:    mtvsrd v3, r4826; P8LE-NEXT:    rldicl r4, r3, 16, 48827; P8LE-NEXT:    ori r5, r5, 37253828; P8LE-NEXT:    rldicl r3, r3, 32, 48829; P8LE-NEXT:    extsh r4, r4830; P8LE-NEXT:    extsh r3, r3831; P8LE-NEXT:    mulhw r5, r4, r5832; P8LE-NEXT:    add r5, r5, r4833; P8LE-NEXT:    srwi r6, r5, 31834; P8LE-NEXT:    srawi r5, r5, 6835; P8LE-NEXT:    add r5, r5, r6836; P8LE-NEXT:    mulli r5, r5, 95837; P8LE-NEXT:    sub r4, r4, r5838; P8LE-NEXT:    vmrghh v2, v3, v2839; P8LE-NEXT:    mtvsrd v3, r4840; P8LE-NEXT:    srawi r4, r3, 3841; P8LE-NEXT:    addze r4, r4842; P8LE-NEXT:    slwi r4, r4, 3843; P8LE-NEXT:    sub r3, r3, r4844; P8LE-NEXT:    mtvsrd v4, r3845; P8LE-NEXT:    vmrghh v3, v3, v4846; P8LE-NEXT:    xxmrglw v2, v3, v2847; P8LE-NEXT:    blr848;849; P8BE-LABEL: dont_fold_srem_power_of_two:850; P8BE:       # %bb.0:851; P8BE-NEXT:    mfvsrd r3, v2852; P8BE-NEXT:    rldicl r4, r3, 32, 48853; P8BE-NEXT:    extsh r4, r4854; P8BE-NEXT:    srawi r5, r4, 5855; P8BE-NEXT:    addze r5, r5856; P8BE-NEXT:    slwi r5, r5, 5857; P8BE-NEXT:    sub r4, r4, r5858; P8BE-NEXT:    mtvsrwz v2, r4859; P8BE-NEXT:    rldicl r4, r3, 16, 48860; P8BE-NEXT:    extsh r4, r4861; P8BE-NEXT:    srawi r5, r4, 6862; P8BE-NEXT:    addze r5, r5863; P8BE-NEXT:    slwi r5, r5, 6864; P8BE-NEXT:    sub r4, r4, r5865; P8BE-NEXT:    lis r5, -21386866; P8BE-NEXT:    mtvsrwz v3, r4867; P8BE-NEXT:    addis r4, r2, .LCPI3_0@toc@ha868; P8BE-NEXT:    ori r5, r5, 37253869; P8BE-NEXT:    addi r4, r4, .LCPI3_0@toc@l870; P8BE-NEXT:    lxvw4x v4, 0, r4871; P8BE-NEXT:    clrldi r4, r3, 48872; P8BE-NEXT:    rldicl r3, r3, 48, 48873; P8BE-NEXT:    extsh r4, r4874; P8BE-NEXT:    extsh r3, r3875; P8BE-NEXT:    mulhw r5, r4, r5876; P8BE-NEXT:    add r5, r5, r4877; P8BE-NEXT:    srwi r6, r5, 31878; P8BE-NEXT:    srawi r5, r5, 6879; P8BE-NEXT:    add r5, r5, r6880; P8BE-NEXT:    mulli r5, r5, 95881; P8BE-NEXT:    sub r4, r4, r5882; P8BE-NEXT:    vperm v2, v3, v2, v4883; P8BE-NEXT:    mtvsrwz v3, r4884; P8BE-NEXT:    srawi r4, r3, 3885; P8BE-NEXT:    addze r4, r4886; P8BE-NEXT:    slwi r4, r4, 3887; P8BE-NEXT:    sub r3, r3, r4888; P8BE-NEXT:    mtvsrwz v5, r3889; P8BE-NEXT:    vperm v3, v5, v3, v4890; P8BE-NEXT:    xxmrghw v2, v2, v3891; P8BE-NEXT:    blr892  %1 = srem <4 x i16> %x, <i16 64, i16 32, i16 8, i16 95>893  ret <4 x i16> %1894}895 896; Don't fold if the divisor is one.897define <4 x i16> @dont_fold_srem_one(<4 x i16> %x) {898; P9LE-LABEL: dont_fold_srem_one:899; P9LE:       # %bb.0:900; P9LE-NEXT:    li r3, 2901; P9LE-NEXT:    lis r4, -14230902; P9LE-NEXT:    vextuhrx r3, r3, v2903; P9LE-NEXT:    ori r4, r4, 30865904; P9LE-NEXT:    extsh r3, r3905; P9LE-NEXT:    mulhw r4, r3, r4906; P9LE-NEXT:    add r4, r4, r3907; P9LE-NEXT:    srwi r5, r4, 31908; P9LE-NEXT:    srawi r4, r4, 9909; P9LE-NEXT:    add r4, r4, r5910; P9LE-NEXT:    mulli r4, r4, 654911; P9LE-NEXT:    sub r3, r3, r4912; P9LE-NEXT:    lis r4, -19946913; P9LE-NEXT:    mtvsrd v3, r3914; P9LE-NEXT:    li r3, 0915; P9LE-NEXT:    ori r4, r4, 17097916; P9LE-NEXT:    mtvsrd v4, r3917; P9LE-NEXT:    li r3, 4918; P9LE-NEXT:    vextuhrx r3, r3, v2919; P9LE-NEXT:    vmrghh v3, v3, v4920; P9LE-NEXT:    extsh r3, r3921; P9LE-NEXT:    mulhw r4, r3, r4922; P9LE-NEXT:    add r4, r4, r3923; P9LE-NEXT:    srwi r5, r4, 31924; P9LE-NEXT:    srawi r4, r4, 4925; P9LE-NEXT:    add r4, r4, r5926; P9LE-NEXT:    mulli r4, r4, 23927; P9LE-NEXT:    sub r3, r3, r4928; P9LE-NEXT:    lis r4, 24749929; P9LE-NEXT:    mtvsrd v4, r3930; P9LE-NEXT:    li r3, 6931; P9LE-NEXT:    ori r4, r4, 47143932; P9LE-NEXT:    vextuhrx r3, r3, v2933; P9LE-NEXT:    extsh r3, r3934; P9LE-NEXT:    mulhw r4, r3, r4935; P9LE-NEXT:    srwi r5, r4, 31936; P9LE-NEXT:    srawi r4, r4, 11937; P9LE-NEXT:    add r4, r4, r5938; P9LE-NEXT:    mulli r4, r4, 5423939; P9LE-NEXT:    sub r3, r3, r4940; P9LE-NEXT:    mtvsrd v2, r3941; P9LE-NEXT:    vmrghh v2, v2, v4942; P9LE-NEXT:    xxmrglw v2, v2, v3943; P9LE-NEXT:    blr944;945; P9BE-LABEL: dont_fold_srem_one:946; P9BE:       # %bb.0:947; P9BE-NEXT:    li r3, 4948; P9BE-NEXT:    lis r4, -19946949; P9BE-NEXT:    vextuhlx r3, r3, v2950; P9BE-NEXT:    ori r4, r4, 17097951; P9BE-NEXT:    extsh r3, r3952; P9BE-NEXT:    mulhw r4, r3, r4953; P9BE-NEXT:    add r4, r4, r3954; P9BE-NEXT:    srwi r5, r4, 31955; P9BE-NEXT:    srawi r4, r4, 4956; P9BE-NEXT:    add r4, r4, r5957; P9BE-NEXT:    mulli r4, r4, 23958; P9BE-NEXT:    sub r3, r3, r4959; P9BE-NEXT:    lis r4, 24749960; P9BE-NEXT:    mtfprwz f0, r3961; P9BE-NEXT:    li r3, 6962; P9BE-NEXT:    ori r4, r4, 47143963; P9BE-NEXT:    vextuhlx r3, r3, v2964; P9BE-NEXT:    extsh r3, r3965; P9BE-NEXT:    mulhw r4, r3, r4966; P9BE-NEXT:    srwi r5, r4, 31967; P9BE-NEXT:    srawi r4, r4, 11968; P9BE-NEXT:    add r4, r4, r5969; P9BE-NEXT:    mulli r4, r4, 5423970; P9BE-NEXT:    sub r3, r3, r4971; P9BE-NEXT:    lis r4, -14230972; P9BE-NEXT:    mtfprwz f1, r3973; P9BE-NEXT:    addis r3, r2, .LCPI4_0@toc@ha974; P9BE-NEXT:    ori r4, r4, 30865975; P9BE-NEXT:    addi r3, r3, .LCPI4_0@toc@l976; P9BE-NEXT:    lxv vs2, 0(r3)977; P9BE-NEXT:    li r3, 2978; P9BE-NEXT:    vextuhlx r3, r3, v2979; P9BE-NEXT:    extsh r3, r3980; P9BE-NEXT:    xxperm vs1, vs0, vs2981; P9BE-NEXT:    mulhw r4, r3, r4982; P9BE-NEXT:    add r4, r4, r3983; P9BE-NEXT:    srwi r5, r4, 31984; P9BE-NEXT:    srawi r4, r4, 9985; P9BE-NEXT:    add r4, r4, r5986; P9BE-NEXT:    mulli r4, r4, 654987; P9BE-NEXT:    sub r3, r3, r4988; P9BE-NEXT:    mtfprwz f0, r3989; P9BE-NEXT:    li r3, 0990; P9BE-NEXT:    mtfprwz f3, r3991; P9BE-NEXT:    xxperm vs0, vs3, vs2992; P9BE-NEXT:    xxmrghw v2, vs0, vs1993; P9BE-NEXT:    blr994;995; P8LE-LABEL: dont_fold_srem_one:996; P8LE:       # %bb.0:997; P8LE-NEXT:    xxswapd vs0, v2998; P8LE-NEXT:    lis r8, 24749999; P8LE-NEXT:    lis r4, -199461000; P8LE-NEXT:    lis r5, -142301001; P8LE-NEXT:    mffprd r3, f01002; P8LE-NEXT:    ori r8, r8, 471431003; P8LE-NEXT:    ori r4, r4, 170971004; P8LE-NEXT:    ori r5, r5, 308651005; P8LE-NEXT:    rldicl r6, r3, 32, 481006; P8LE-NEXT:    rldicl r7, r3, 48, 481007; P8LE-NEXT:    rldicl r3, r3, 16, 481008; P8LE-NEXT:    extsh r3, r31009; P8LE-NEXT:    extsh r6, r61010; P8LE-NEXT:    extsh r7, r71011; P8LE-NEXT:    mulhw r8, r3, r81012; P8LE-NEXT:    mulhw r4, r6, r41013; P8LE-NEXT:    mulhw r5, r7, r51014; P8LE-NEXT:    srwi r9, r8, 311015; P8LE-NEXT:    srawi r8, r8, 111016; P8LE-NEXT:    add r4, r4, r61017; P8LE-NEXT:    add r5, r5, r71018; P8LE-NEXT:    add r8, r8, r91019; P8LE-NEXT:    srwi r9, r4, 311020; P8LE-NEXT:    srawi r4, r4, 41021; P8LE-NEXT:    mulli r8, r8, 54231022; P8LE-NEXT:    add r4, r4, r91023; P8LE-NEXT:    srwi r9, r5, 311024; P8LE-NEXT:    srawi r5, r5, 91025; P8LE-NEXT:    add r5, r5, r91026; P8LE-NEXT:    sub r3, r3, r81027; P8LE-NEXT:    mtvsrd v2, r31028; P8LE-NEXT:    mulli r3, r4, 231029; P8LE-NEXT:    mulli r4, r5, 6541030; P8LE-NEXT:    sub r3, r6, r31031; P8LE-NEXT:    sub r4, r7, r41032; P8LE-NEXT:    mtvsrd v3, r31033; P8LE-NEXT:    li r3, 01034; P8LE-NEXT:    mtvsrd v4, r31035; P8LE-NEXT:    vmrghh v2, v2, v31036; P8LE-NEXT:    mtvsrd v3, r41037; P8LE-NEXT:    vmrghh v3, v3, v41038; P8LE-NEXT:    xxmrglw v2, v2, v31039; P8LE-NEXT:    blr1040;1041; P8BE-LABEL: dont_fold_srem_one:1042; P8BE:       # %bb.0:1043; P8BE-NEXT:    mfvsrd r3, v21044; P8BE-NEXT:    lis r4, -199461045; P8BE-NEXT:    lis r8, 247491046; P8BE-NEXT:    lis r5, -142301047; P8BE-NEXT:    ori r4, r4, 170971048; P8BE-NEXT:    ori r8, r8, 471431049; P8BE-NEXT:    ori r5, r5, 308651050; P8BE-NEXT:    rldicl r6, r3, 48, 481051; P8BE-NEXT:    rldicl r7, r3, 32, 481052; P8BE-NEXT:    clrldi r3, r3, 481053; P8BE-NEXT:    extsh r6, r61054; P8BE-NEXT:    extsh r3, r31055; P8BE-NEXT:    extsh r7, r71056; P8BE-NEXT:    mulhw r4, r6, r41057; P8BE-NEXT:    mulhw r8, r3, r81058; P8BE-NEXT:    mulhw r5, r7, r51059; P8BE-NEXT:    add r4, r4, r61060; P8BE-NEXT:    srwi r9, r8, 311061; P8BE-NEXT:    srawi r8, r8, 111062; P8BE-NEXT:    add r5, r5, r71063; P8BE-NEXT:    add r8, r8, r91064; P8BE-NEXT:    srwi r9, r4, 311065; P8BE-NEXT:    srawi r4, r4, 41066; P8BE-NEXT:    add r4, r4, r91067; P8BE-NEXT:    mulli r8, r8, 54231068; P8BE-NEXT:    srwi r9, r5, 311069; P8BE-NEXT:    srawi r5, r5, 91070; P8BE-NEXT:    mulli r4, r4, 231071; P8BE-NEXT:    add r5, r5, r91072; P8BE-NEXT:    addis r9, r2, .LCPI4_0@toc@ha1073; P8BE-NEXT:    addi r9, r9, .LCPI4_0@toc@l1074; P8BE-NEXT:    mulli r5, r5, 6541075; P8BE-NEXT:    sub r3, r3, r81076; P8BE-NEXT:    lxvw4x v2, 0, r91077; P8BE-NEXT:    sub r4, r6, r41078; P8BE-NEXT:    mtvsrwz v3, r31079; P8BE-NEXT:    mtvsrwz v4, r41080; P8BE-NEXT:    sub r3, r7, r51081; P8BE-NEXT:    vperm v3, v4, v3, v21082; P8BE-NEXT:    mtvsrwz v4, r31083; P8BE-NEXT:    li r3, 01084; P8BE-NEXT:    mtvsrwz v5, r31085; P8BE-NEXT:    vperm v2, v5, v4, v21086; P8BE-NEXT:    xxmrghw v2, v2, v31087; P8BE-NEXT:    blr1088  %1 = srem <4 x i16> %x, <i16 1, i16 654, i16 23, i16 5423>1089  ret <4 x i16> %11090}1091 1092; Don't fold if the divisor is 2^15.1093define <4 x i16> @dont_fold_urem_i16_smax(<4 x i16> %x) {1094; P9LE-LABEL: dont_fold_urem_i16_smax:1095; P9LE:       # %bb.0:1096; P9LE-NEXT:    li r3, 41097; P9LE-NEXT:    lis r4, -199461098; P9LE-NEXT:    vextuhrx r3, r3, v21099; P9LE-NEXT:    ori r4, r4, 170971100; P9LE-NEXT:    extsh r3, r31101; P9LE-NEXT:    mulhw r4, r3, r41102; P9LE-NEXT:    add r4, r4, r31103; P9LE-NEXT:    srwi r5, r4, 311104; P9LE-NEXT:    srawi r4, r4, 41105; P9LE-NEXT:    add r4, r4, r51106; P9LE-NEXT:    mulli r4, r4, 231107; P9LE-NEXT:    sub r3, r3, r41108; P9LE-NEXT:    lis r4, 247491109; P9LE-NEXT:    mtvsrd v3, r31110; P9LE-NEXT:    li r3, 61111; P9LE-NEXT:    ori r4, r4, 471431112; P9LE-NEXT:    vextuhrx r3, r3, v21113; P9LE-NEXT:    extsh r3, r31114; P9LE-NEXT:    mulhw r4, r3, r41115; P9LE-NEXT:    srwi r5, r4, 311116; P9LE-NEXT:    srawi r4, r4, 111117; P9LE-NEXT:    add r4, r4, r51118; P9LE-NEXT:    mulli r4, r4, 54231119; P9LE-NEXT:    sub r3, r3, r41120; P9LE-NEXT:    mtvsrd v4, r31121; P9LE-NEXT:    li r3, 21122; P9LE-NEXT:    vextuhrx r3, r3, v21123; P9LE-NEXT:    vmrghh v3, v4, v31124; P9LE-NEXT:    extsh r3, r31125; P9LE-NEXT:    srawi r4, r3, 151126; P9LE-NEXT:    addze r4, r41127; P9LE-NEXT:    slwi r4, r4, 151128; P9LE-NEXT:    sub r3, r3, r41129; P9LE-NEXT:    mtvsrd v2, r31130; P9LE-NEXT:    li r3, 01131; P9LE-NEXT:    mtvsrd v4, r31132; P9LE-NEXT:    vmrghh v2, v2, v41133; P9LE-NEXT:    xxmrglw v2, v3, v21134; P9LE-NEXT:    blr1135;1136; P9BE-LABEL: dont_fold_urem_i16_smax:1137; P9BE:       # %bb.0:1138; P9BE-NEXT:    li r3, 41139; P9BE-NEXT:    lis r4, -199461140; P9BE-NEXT:    vextuhlx r3, r3, v21141; P9BE-NEXT:    ori r4, r4, 170971142; P9BE-NEXT:    extsh r3, r31143; P9BE-NEXT:    mulhw r4, r3, r41144; P9BE-NEXT:    add r4, r4, r31145; P9BE-NEXT:    srwi r5, r4, 311146; P9BE-NEXT:    srawi r4, r4, 41147; P9BE-NEXT:    add r4, r4, r51148; P9BE-NEXT:    mulli r4, r4, 231149; P9BE-NEXT:    sub r3, r3, r41150; P9BE-NEXT:    lis r4, 247491151; P9BE-NEXT:    mtfprwz f0, r31152; P9BE-NEXT:    li r3, 61153; P9BE-NEXT:    ori r4, r4, 471431154; P9BE-NEXT:    vextuhlx r3, r3, v21155; P9BE-NEXT:    extsh r3, r31156; P9BE-NEXT:    mulhw r4, r3, r41157; P9BE-NEXT:    srwi r5, r4, 311158; P9BE-NEXT:    srawi r4, r4, 111159; P9BE-NEXT:    add r4, r4, r51160; P9BE-NEXT:    mulli r4, r4, 54231161; P9BE-NEXT:    sub r3, r3, r41162; P9BE-NEXT:    mtfprwz f1, r31163; P9BE-NEXT:    addis r3, r2, .LCPI5_0@toc@ha1164; P9BE-NEXT:    addi r3, r3, .LCPI5_0@toc@l1165; P9BE-NEXT:    lxv vs2, 0(r3)1166; P9BE-NEXT:    li r3, 21167; P9BE-NEXT:    vextuhlx r3, r3, v21168; P9BE-NEXT:    extsh r3, r31169; P9BE-NEXT:    xxperm vs1, vs0, vs21170; P9BE-NEXT:    srawi r4, r3, 151171; P9BE-NEXT:    addze r4, r41172; P9BE-NEXT:    slwi r4, r4, 151173; P9BE-NEXT:    sub r3, r3, r41174; P9BE-NEXT:    mtfprwz f0, r31175; P9BE-NEXT:    li r3, 01176; P9BE-NEXT:    mtfprwz f3, r31177; P9BE-NEXT:    xxperm vs0, vs3, vs21178; P9BE-NEXT:    xxmrghw v2, vs0, vs11179; P9BE-NEXT:    blr1180;1181; P8LE-LABEL: dont_fold_urem_i16_smax:1182; P8LE:       # %bb.0:1183; P8LE-NEXT:    xxswapd vs0, v21184; P8LE-NEXT:    lis r4, -199461185; P8LE-NEXT:    lis r6, 247491186; P8LE-NEXT:    li r8, 01187; P8LE-NEXT:    mffprd r3, f01188; P8LE-NEXT:    ori r4, r4, 170971189; P8LE-NEXT:    ori r6, r6, 471431190; P8LE-NEXT:    mtvsrd v2, r81191; P8LE-NEXT:    rldicl r5, r3, 32, 481192; P8LE-NEXT:    rldicl r7, r3, 16, 481193; P8LE-NEXT:    rldicl r3, r3, 48, 481194; P8LE-NEXT:    extsh r5, r51195; P8LE-NEXT:    extsh r7, r71196; P8LE-NEXT:    extsh r3, r31197; P8LE-NEXT:    mulhw r4, r5, r41198; P8LE-NEXT:    mulhw r6, r7, r61199; P8LE-NEXT:    add r4, r4, r51200; P8LE-NEXT:    srwi r8, r6, 311201; P8LE-NEXT:    srawi r6, r6, 111202; P8LE-NEXT:    add r6, r6, r81203; P8LE-NEXT:    srwi r8, r4, 311204; P8LE-NEXT:    srawi r4, r4, 41205; P8LE-NEXT:    add r4, r4, r81206; P8LE-NEXT:    mulli r6, r6, 54231207; P8LE-NEXT:    mulli r4, r4, 231208; P8LE-NEXT:    sub r6, r7, r61209; P8LE-NEXT:    sub r4, r5, r41210; P8LE-NEXT:    srawi r5, r3, 151211; P8LE-NEXT:    mtvsrd v3, r61212; P8LE-NEXT:    addze r5, r51213; P8LE-NEXT:    mtvsrd v4, r41214; P8LE-NEXT:    slwi r4, r5, 151215; P8LE-NEXT:    sub r3, r3, r41216; P8LE-NEXT:    vmrghh v3, v3, v41217; P8LE-NEXT:    mtvsrd v4, r31218; P8LE-NEXT:    vmrghh v2, v4, v21219; P8LE-NEXT:    xxmrglw v2, v3, v21220; P8LE-NEXT:    blr1221;1222; P8BE-LABEL: dont_fold_urem_i16_smax:1223; P8BE:       # %bb.0:1224; P8BE-NEXT:    mfvsrd r3, v21225; P8BE-NEXT:    lis r4, -199461226; P8BE-NEXT:    lis r6, 247491227; P8BE-NEXT:    ori r4, r4, 170971228; P8BE-NEXT:    ori r6, r6, 471431229; P8BE-NEXT:    rldicl r5, r3, 48, 481230; P8BE-NEXT:    clrldi r7, r3, 481231; P8BE-NEXT:    rldicl r3, r3, 32, 481232; P8BE-NEXT:    extsh r5, r51233; P8BE-NEXT:    extsh r7, r71234; P8BE-NEXT:    extsh r3, r31235; P8BE-NEXT:    mulhw r4, r5, r41236; P8BE-NEXT:    mulhw r6, r7, r61237; P8BE-NEXT:    add r4, r4, r51238; P8BE-NEXT:    srwi r8, r6, 311239; P8BE-NEXT:    srawi r6, r6, 111240; P8BE-NEXT:    add r6, r6, r81241; P8BE-NEXT:    srwi r8, r4, 311242; P8BE-NEXT:    srawi r4, r4, 41243; P8BE-NEXT:    add r4, r4, r81244; P8BE-NEXT:    addis r8, r2, .LCPI5_0@toc@ha1245; P8BE-NEXT:    mulli r6, r6, 54231246; P8BE-NEXT:    mulli r4, r4, 231247; P8BE-NEXT:    addi r8, r8, .LCPI5_0@toc@l1248; P8BE-NEXT:    lxvw4x v2, 0, r81249; P8BE-NEXT:    srawi r8, r3, 151250; P8BE-NEXT:    sub r6, r7, r61251; P8BE-NEXT:    addze r8, r81252; P8BE-NEXT:    sub r4, r5, r41253; P8BE-NEXT:    mtvsrwz v3, r61254; P8BE-NEXT:    slwi r8, r8, 151255; P8BE-NEXT:    mtvsrwz v4, r41256; P8BE-NEXT:    sub r3, r3, r81257; P8BE-NEXT:    vperm v3, v4, v3, v21258; P8BE-NEXT:    mtvsrwz v4, r31259; P8BE-NEXT:    li r3, 01260; P8BE-NEXT:    mtvsrwz v5, r31261; P8BE-NEXT:    vperm v2, v5, v4, v21262; P8BE-NEXT:    xxmrghw v2, v2, v31263; P8BE-NEXT:    blr1264  %1 = srem <4 x i16> %x, <i16 1, i16 32768, i16 23, i16 5423>1265  ret <4 x i16> %11266}1267 1268; Don't fold i64 srem.1269define <4 x i64> @dont_fold_srem_i64(<4 x i64> %x) {1270; P9LE-LABEL: dont_fold_srem_i64:1271; P9LE:       # %bb.0:1272; P9LE-NEXT:    lis r4, 123741273; P9LE-NEXT:    mfvsrd r3, v31274; P9LE-NEXT:    ori r4, r4, 563391275; P9LE-NEXT:    rldic r4, r4, 33, 11276; P9LE-NEXT:    oris r4, r4, 588531277; P9LE-NEXT:    ori r4, r4, 60551278; P9LE-NEXT:    mulhd r4, r3, r41279; P9LE-NEXT:    rldicl r5, r4, 1, 631280; P9LE-NEXT:    sradi r4, r4, 111281; P9LE-NEXT:    add r4, r4, r51282; P9LE-NEXT:    lis r5, 56981283; P9LE-NEXT:    mulli r4, r4, 54231284; P9LE-NEXT:    ori r5, r5, 512891285; P9LE-NEXT:    rldic r5, r5, 35, 01286; P9LE-NEXT:    oris r5, r5, 227951287; P9LE-NEXT:    sub r3, r3, r41288; P9LE-NEXT:    mfvsrld r4, v31289; P9LE-NEXT:    ori r5, r5, 85491290; P9LE-NEXT:    mulhd r5, r4, r51291; P9LE-NEXT:    add r5, r5, r41292; P9LE-NEXT:    rldicl r6, r5, 1, 631293; P9LE-NEXT:    sradi r5, r5, 41294; P9LE-NEXT:    add r5, r5, r61295; P9LE-NEXT:    mulli r5, r5, 231296; P9LE-NEXT:    sub r4, r4, r51297; P9LE-NEXT:    mtvsrdd v3, r3, r41298; P9LE-NEXT:    lis r4, 32061299; P9LE-NEXT:    mfvsrd r3, v21300; P9LE-NEXT:    ori r4, r4, 428891301; P9LE-NEXT:    rldic r4, r4, 35, 11302; P9LE-NEXT:    oris r4, r4, 16031303; P9LE-NEXT:    ori r4, r4, 214451304; P9LE-NEXT:    mulhd r4, r3, r41305; P9LE-NEXT:    rldicl r5, r4, 1, 631306; P9LE-NEXT:    sradi r4, r4, 81307; P9LE-NEXT:    add r4, r4, r51308; P9LE-NEXT:    mulli r4, r4, 6541309; P9LE-NEXT:    sub r3, r3, r41310; P9LE-NEXT:    li r4, 01311; P9LE-NEXT:    mtvsrdd v2, r3, r41312; P9LE-NEXT:    blr1313;1314; P9BE-LABEL: dont_fold_srem_i64:1315; P9BE:       # %bb.0:1316; P9BE-NEXT:    lis r4, 123741317; P9BE-NEXT:    mfvsrld r3, v31318; P9BE-NEXT:    ori r4, r4, 563391319; P9BE-NEXT:    rldic r4, r4, 33, 11320; P9BE-NEXT:    oris r4, r4, 588531321; P9BE-NEXT:    ori r4, r4, 60551322; P9BE-NEXT:    mulhd r4, r3, r41323; P9BE-NEXT:    rldicl r5, r4, 1, 631324; P9BE-NEXT:    sradi r4, r4, 111325; P9BE-NEXT:    add r4, r4, r51326; P9BE-NEXT:    lis r5, 56981327; P9BE-NEXT:    ori r5, r5, 512891328; P9BE-NEXT:    mulli r4, r4, 54231329; P9BE-NEXT:    rldic r5, r5, 35, 01330; P9BE-NEXT:    oris r5, r5, 227951331; P9BE-NEXT:    sub r3, r3, r41332; P9BE-NEXT:    mfvsrd r4, v31333; P9BE-NEXT:    ori r5, r5, 85491334; P9BE-NEXT:    mulhd r5, r4, r51335; P9BE-NEXT:    add r5, r5, r41336; P9BE-NEXT:    rldicl r6, r5, 1, 631337; P9BE-NEXT:    sradi r5, r5, 41338; P9BE-NEXT:    add r5, r5, r61339; P9BE-NEXT:    mulli r5, r5, 231340; P9BE-NEXT:    sub r4, r4, r51341; P9BE-NEXT:    mtvsrdd v3, r4, r31342; P9BE-NEXT:    lis r4, 32061343; P9BE-NEXT:    mfvsrld r3, v21344; P9BE-NEXT:    ori r4, r4, 428891345; P9BE-NEXT:    rldic r4, r4, 35, 11346; P9BE-NEXT:    oris r4, r4, 16031347; P9BE-NEXT:    ori r4, r4, 214451348; P9BE-NEXT:    mulhd r4, r3, r41349; P9BE-NEXT:    rldicl r5, r4, 1, 631350; P9BE-NEXT:    sradi r4, r4, 81351; P9BE-NEXT:    add r4, r4, r51352; P9BE-NEXT:    mulli r4, r4, 6541353; P9BE-NEXT:    sub r3, r3, r41354; P9BE-NEXT:    mtvsrdd v2, 0, r31355; P9BE-NEXT:    blr1356;1357; P8LE-LABEL: dont_fold_srem_i64:1358; P8LE:       # %bb.0:1359; P8LE-NEXT:    lis r4, 123741360; P8LE-NEXT:    lis r3, 56981361; P8LE-NEXT:    lis r5, 32061362; P8LE-NEXT:    xxswapd vs0, v31363; P8LE-NEXT:    mfvsrd r7, v31364; P8LE-NEXT:    mfvsrd r8, v21365; P8LE-NEXT:    ori r4, r4, 563391366; P8LE-NEXT:    ori r3, r3, 512891367; P8LE-NEXT:    ori r5, r5, 428891368; P8LE-NEXT:    mffprd r6, f01369; P8LE-NEXT:    rldic r4, r4, 33, 11370; P8LE-NEXT:    rldic r3, r3, 35, 01371; P8LE-NEXT:    rldic r5, r5, 35, 11372; P8LE-NEXT:    oris r4, r4, 588531373; P8LE-NEXT:    oris r3, r3, 227951374; P8LE-NEXT:    oris r5, r5, 16031375; P8LE-NEXT:    ori r4, r4, 60551376; P8LE-NEXT:    ori r3, r3, 85491377; P8LE-NEXT:    ori r5, r5, 214451378; P8LE-NEXT:    mulhd r4, r7, r41379; P8LE-NEXT:    mulhd r3, r6, r31380; P8LE-NEXT:    mulhd r5, r8, r51381; P8LE-NEXT:    rldicl r9, r4, 1, 631382; P8LE-NEXT:    sradi r4, r4, 111383; P8LE-NEXT:    add r3, r3, r61384; P8LE-NEXT:    add r4, r4, r91385; P8LE-NEXT:    rldicl r9, r5, 1, 631386; P8LE-NEXT:    sradi r5, r5, 81387; P8LE-NEXT:    add r5, r5, r91388; P8LE-NEXT:    rldicl r9, r3, 1, 631389; P8LE-NEXT:    sradi r3, r3, 41390; P8LE-NEXT:    mulli r4, r4, 54231391; P8LE-NEXT:    add r3, r3, r91392; P8LE-NEXT:    mulli r5, r5, 6541393; P8LE-NEXT:    mulli r3, r3, 231394; P8LE-NEXT:    sub r4, r7, r41395; P8LE-NEXT:    mtfprd f0, r41396; P8LE-NEXT:    sub r5, r8, r51397; P8LE-NEXT:    sub r3, r6, r31398; P8LE-NEXT:    mtfprd f1, r31399; P8LE-NEXT:    li r3, 01400; P8LE-NEXT:    xxmrghd v3, vs0, vs11401; P8LE-NEXT:    mtfprd f0, r51402; P8LE-NEXT:    mtfprd f1, r31403; P8LE-NEXT:    xxmrghd v2, vs0, vs11404; P8LE-NEXT:    blr1405;1406; P8BE-LABEL: dont_fold_srem_i64:1407; P8BE:       # %bb.0:1408; P8BE-NEXT:    lis r4, 123741409; P8BE-NEXT:    lis r3, 56981410; P8BE-NEXT:    lis r5, 32061411; P8BE-NEXT:    xxswapd vs0, v31412; P8BE-NEXT:    xxswapd vs1, v21413; P8BE-NEXT:    mfvsrd r6, v31414; P8BE-NEXT:    ori r4, r4, 563391415; P8BE-NEXT:    ori r3, r3, 512891416; P8BE-NEXT:    ori r5, r5, 428891417; P8BE-NEXT:    mffprd r7, f01418; P8BE-NEXT:    mffprd r8, f11419; P8BE-NEXT:    rldic r4, r4, 33, 11420; P8BE-NEXT:    rldic r3, r3, 35, 01421; P8BE-NEXT:    rldic r5, r5, 35, 11422; P8BE-NEXT:    oris r4, r4, 588531423; P8BE-NEXT:    oris r3, r3, 227951424; P8BE-NEXT:    oris r5, r5, 16031425; P8BE-NEXT:    ori r4, r4, 60551426; P8BE-NEXT:    ori r3, r3, 85491427; P8BE-NEXT:    ori r5, r5, 214451428; P8BE-NEXT:    mulhd r4, r7, r41429; P8BE-NEXT:    mulhd r3, r6, r31430; P8BE-NEXT:    mulhd r5, r8, r51431; P8BE-NEXT:    rldicl r9, r4, 1, 631432; P8BE-NEXT:    sradi r4, r4, 111433; P8BE-NEXT:    add r3, r3, r61434; P8BE-NEXT:    add r4, r4, r91435; P8BE-NEXT:    rldicl r9, r5, 1, 631436; P8BE-NEXT:    sradi r5, r5, 81437; P8BE-NEXT:    add r5, r5, r91438; P8BE-NEXT:    rldicl r9, r3, 1, 631439; P8BE-NEXT:    sradi r3, r3, 41440; P8BE-NEXT:    mulli r4, r4, 54231441; P8BE-NEXT:    add r3, r3, r91442; P8BE-NEXT:    mulli r5, r5, 6541443; P8BE-NEXT:    mulli r3, r3, 231444; P8BE-NEXT:    sub r4, r7, r41445; P8BE-NEXT:    mtfprd f0, r41446; P8BE-NEXT:    sub r5, r8, r51447; P8BE-NEXT:    sub r3, r6, r31448; P8BE-NEXT:    mtfprd f1, r31449; P8BE-NEXT:    li r3, 01450; P8BE-NEXT:    xxmrghd v3, vs1, vs01451; P8BE-NEXT:    mtfprd f0, r51452; P8BE-NEXT:    mtfprd f1, r31453; P8BE-NEXT:    xxmrghd v2, vs1, vs01454; P8BE-NEXT:    blr1455  %1 = srem <4 x i64> %x, <i64 1, i64 654, i64 23, i64 5423>1456  ret <4 x i64> %11457}1458