987 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-prefixes=CHECK,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-prefixes=CHECK,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-prefixes=CHECK,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-prefixes=CHECK,P8BE10 11define <4 x i16> @fold_urem_vec_1(<4 x i16> %x) {12; P9LE-LABEL: fold_urem_vec_1:13; P9LE: # %bb.0:14; P9LE-NEXT: li r3, 015; P9LE-NEXT: lis r4, 68916; P9LE-NEXT: vextuhrx r3, r3, v217; P9LE-NEXT: ori r4, r4, 5587918; P9LE-NEXT: clrlwi r3, r3, 1619; P9LE-NEXT: mulhwu r4, r3, r420; P9LE-NEXT: mulli r4, r4, 9521; P9LE-NEXT: sub r3, r3, r422; P9LE-NEXT: lis r4, 52823; P9LE-NEXT: mtvsrd v3, r324; P9LE-NEXT: li r3, 225; P9LE-NEXT: ori r4, r4, 3382626; P9LE-NEXT: vextuhrx r3, r3, v227; P9LE-NEXT: clrlwi r3, r3, 1628; P9LE-NEXT: mulhwu r4, r3, r429; P9LE-NEXT: mulli r4, r4, 12430; P9LE-NEXT: sub r3, r3, r431; P9LE-NEXT: lis r4, 66832; P9LE-NEXT: mtvsrd v4, r333; P9LE-NEXT: li r3, 434; P9LE-NEXT: ori r4, r4, 4814935; P9LE-NEXT: vextuhrx r3, r3, v236; P9LE-NEXT: vmrghh v3, v4, v337; P9LE-NEXT: clrlwi r3, r3, 1638; P9LE-NEXT: mulhwu r4, r3, r439; P9LE-NEXT: mulli r4, r4, 9840; P9LE-NEXT: sub r3, r3, r441; P9LE-NEXT: lis r4, 6542; P9LE-NEXT: mtvsrd v4, r343; P9LE-NEXT: li r3, 644; P9LE-NEXT: ori r4, r4, 2228145; P9LE-NEXT: vextuhrx r3, r3, v246; P9LE-NEXT: clrlwi r3, r3, 1647; P9LE-NEXT: mulhwu r4, r3, r448; P9LE-NEXT: mulli r4, r4, 100349; P9LE-NEXT: sub r3, r3, r450; P9LE-NEXT: mtvsrd v2, r351; P9LE-NEXT: vmrghh v2, v2, v452; P9LE-NEXT: xxmrglw v2, v2, v353; P9LE-NEXT: blr54;55; P9BE-LABEL: fold_urem_vec_1:56; P9BE: # %bb.0:57; P9BE-NEXT: li r3, 658; P9BE-NEXT: lis r4, 6559; P9BE-NEXT: vextuhlx r3, r3, v260; P9BE-NEXT: ori r4, r4, 2228161; P9BE-NEXT: clrlwi r3, r3, 1662; P9BE-NEXT: mulhwu r4, r3, r463; P9BE-NEXT: mulli r4, r4, 100364; P9BE-NEXT: sub r3, r3, r465; P9BE-NEXT: lis r4, 66866; P9BE-NEXT: mtfprwz f0, r367; P9BE-NEXT: li r3, 468; P9BE-NEXT: ori r4, r4, 4814969; P9BE-NEXT: vextuhlx r3, r3, v270; P9BE-NEXT: clrlwi r3, r3, 1671; P9BE-NEXT: mulhwu r4, r3, r472; P9BE-NEXT: mulli r4, r4, 9873; P9BE-NEXT: sub r3, r3, r474; P9BE-NEXT: lis r4, 52875; P9BE-NEXT: mtfprwz f1, r376; P9BE-NEXT: addis r3, r2, .LCPI0_0@toc@ha77; P9BE-NEXT: ori r4, r4, 3382678; P9BE-NEXT: addi r3, r3, .LCPI0_0@toc@l79; P9BE-NEXT: lxv vs2, 0(r3)80; P9BE-NEXT: li r3, 281; P9BE-NEXT: vextuhlx r3, r3, v282; P9BE-NEXT: clrlwi r3, r3, 1683; P9BE-NEXT: xxperm vs0, vs1, vs284; P9BE-NEXT: mulhwu r4, r3, r485; P9BE-NEXT: mulli r4, r4, 12486; P9BE-NEXT: sub r3, r3, r487; P9BE-NEXT: lis r4, 68988; P9BE-NEXT: mtfprwz f1, r389; P9BE-NEXT: li r3, 090; P9BE-NEXT: ori r4, r4, 5587991; P9BE-NEXT: vextuhlx r3, r3, v292; P9BE-NEXT: clrlwi r3, r3, 1693; P9BE-NEXT: mulhwu r4, r3, r494; P9BE-NEXT: mulli r4, r4, 9595; P9BE-NEXT: sub r3, r3, r496; P9BE-NEXT: mtfprwz f3, r397; P9BE-NEXT: xxperm vs1, vs3, vs298; P9BE-NEXT: xxmrghw v2, vs1, vs099; P9BE-NEXT: blr100;101; P8LE-LABEL: fold_urem_vec_1:102; P8LE: # %bb.0:103; P8LE-NEXT: xxswapd vs0, v2104; P8LE-NEXT: lis r4, 689105; P8LE-NEXT: lis r5, 528106; P8LE-NEXT: lis r6, 668107; P8LE-NEXT: mffprd r3, f0108; P8LE-NEXT: ori r4, r4, 55879109; P8LE-NEXT: ori r5, r5, 33826110; P8LE-NEXT: ori r6, r6, 48149111; P8LE-NEXT: clrldi r7, r3, 48112; P8LE-NEXT: clrlwi r7, r7, 16113; P8LE-NEXT: mulhwu r4, r7, r4114; P8LE-NEXT: mulli r4, r4, 95115; P8LE-NEXT: sub r4, r7, r4116; P8LE-NEXT: rldicl r7, r3, 48, 48117; P8LE-NEXT: clrlwi r7, r7, 16118; P8LE-NEXT: mtvsrd v2, r4119; P8LE-NEXT: lis r4, 65120; P8LE-NEXT: mulhwu r5, r7, r5121; P8LE-NEXT: ori r4, r4, 22281122; P8LE-NEXT: mulli r5, r5, 124123; P8LE-NEXT: sub r5, r7, r5124; P8LE-NEXT: rldicl r7, r3, 32, 48125; P8LE-NEXT: rldicl r3, r3, 16, 48126; P8LE-NEXT: clrlwi r7, r7, 16127; P8LE-NEXT: clrlwi r3, r3, 16128; P8LE-NEXT: mtvsrd v3, r5129; P8LE-NEXT: mulhwu r6, r7, r6130; P8LE-NEXT: mulhwu r4, r3, r4131; P8LE-NEXT: mulli r6, r6, 98132; P8LE-NEXT: mulli r4, r4, 1003133; P8LE-NEXT: sub r6, r7, r6134; P8LE-NEXT: sub r3, r3, r4135; P8LE-NEXT: mtvsrd v4, r3136; P8LE-NEXT: vmrghh v2, v3, v2137; P8LE-NEXT: mtvsrd v3, r6138; P8LE-NEXT: vmrghh v3, v4, v3139; P8LE-NEXT: xxmrglw v2, v3, v2140; P8LE-NEXT: blr141;142; P8BE-LABEL: fold_urem_vec_1:143; P8BE: # %bb.0:144; P8BE-NEXT: mfvsrd r3, v2145; P8BE-NEXT: addis r6, r2, .LCPI0_0@toc@ha146; P8BE-NEXT: lis r4, 65147; P8BE-NEXT: lis r5, 668148; P8BE-NEXT: lis r7, 528149; P8BE-NEXT: addi r6, r6, .LCPI0_0@toc@l150; P8BE-NEXT: ori r4, r4, 22281151; P8BE-NEXT: ori r5, r5, 48149152; P8BE-NEXT: ori r7, r7, 33826153; P8BE-NEXT: lxvw4x v2, 0, r6154; P8BE-NEXT: clrldi r6, r3, 48155; P8BE-NEXT: clrlwi r6, r6, 16156; P8BE-NEXT: mulhwu r4, r6, r4157; P8BE-NEXT: mulli r4, r4, 1003158; P8BE-NEXT: sub r4, r6, r4159; P8BE-NEXT: rldicl r6, r3, 48, 48160; P8BE-NEXT: clrlwi r6, r6, 16161; P8BE-NEXT: mtvsrwz v3, r4162; P8BE-NEXT: lis r4, 689163; P8BE-NEXT: mulhwu r5, r6, r5164; P8BE-NEXT: ori r4, r4, 55879165; P8BE-NEXT: mulli r5, r5, 98166; P8BE-NEXT: sub r5, r6, r5167; P8BE-NEXT: rldicl r6, r3, 32, 48168; P8BE-NEXT: rldicl r3, r3, 16, 48169; P8BE-NEXT: clrlwi r6, r6, 16170; P8BE-NEXT: clrlwi r3, r3, 16171; P8BE-NEXT: mtvsrwz v4, r5172; P8BE-NEXT: mulhwu r7, r6, r7173; P8BE-NEXT: mulhwu r4, r3, r4174; P8BE-NEXT: mulli r7, r7, 124175; P8BE-NEXT: mulli r4, r4, 95176; P8BE-NEXT: sub r6, r6, r7177; P8BE-NEXT: sub r3, r3, r4178; P8BE-NEXT: mtvsrwz v5, r3179; P8BE-NEXT: vperm v3, v4, v3, v2180; P8BE-NEXT: mtvsrwz v4, r6181; P8BE-NEXT: vperm v2, v5, v4, v2182; P8BE-NEXT: xxmrghw v2, v2, v3183; P8BE-NEXT: blr184 %1 = urem <4 x i16> %x, <i16 95, i16 124, i16 98, i16 1003>185 ret <4 x i16> %1186}187 188define <4 x i16> @fold_urem_vec_2(<4 x i16> %x) {189; P9LE-LABEL: fold_urem_vec_2:190; P9LE: # %bb.0:191; P9LE-NEXT: li r3, 0192; P9LE-NEXT: lis r4, 689193; P9LE-NEXT: vextuhrx r3, r3, v2194; P9LE-NEXT: ori r4, r4, 55879195; P9LE-NEXT: clrlwi r3, r3, 16196; P9LE-NEXT: mulhwu r5, r3, r4197; P9LE-NEXT: mulli r5, r5, 95198; P9LE-NEXT: sub r3, r3, r5199; P9LE-NEXT: mtvsrd v3, r3200; P9LE-NEXT: li r3, 2201; P9LE-NEXT: vextuhrx r3, r3, v2202; P9LE-NEXT: clrlwi r3, r3, 16203; P9LE-NEXT: mulhwu r5, r3, r4204; P9LE-NEXT: mulli r5, r5, 95205; P9LE-NEXT: sub r3, r3, r5206; P9LE-NEXT: mtvsrd v4, r3207; P9LE-NEXT: li r3, 4208; P9LE-NEXT: vextuhrx r3, r3, v2209; P9LE-NEXT: vmrghh v3, v4, v3210; P9LE-NEXT: clrlwi r3, r3, 16211; P9LE-NEXT: mulhwu r5, r3, r4212; P9LE-NEXT: mulli r5, r5, 95213; P9LE-NEXT: sub r3, r3, r5214; P9LE-NEXT: mtvsrd v4, r3215; P9LE-NEXT: li r3, 6216; P9LE-NEXT: vextuhrx r3, r3, v2217; P9LE-NEXT: clrlwi r3, r3, 16218; P9LE-NEXT: mulhwu r4, r3, r4219; P9LE-NEXT: mulli r4, r4, 95220; P9LE-NEXT: sub r3, r3, r4221; P9LE-NEXT: mtvsrd v2, r3222; P9LE-NEXT: vmrghh v2, v2, v4223; P9LE-NEXT: xxmrglw v2, v2, v3224; P9LE-NEXT: blr225;226; P9BE-LABEL: fold_urem_vec_2:227; P9BE: # %bb.0:228; P9BE-NEXT: li r3, 6229; P9BE-NEXT: lis r4, 689230; P9BE-NEXT: vextuhlx r3, r3, v2231; P9BE-NEXT: ori r4, r4, 55879232; P9BE-NEXT: clrlwi r3, r3, 16233; P9BE-NEXT: mulhwu r5, r3, r4234; P9BE-NEXT: mulli r5, r5, 95235; P9BE-NEXT: sub r3, r3, r5236; P9BE-NEXT: mtfprwz f0, r3237; P9BE-NEXT: li r3, 4238; P9BE-NEXT: vextuhlx r3, r3, v2239; P9BE-NEXT: clrlwi r3, r3, 16240; P9BE-NEXT: mulhwu r5, r3, r4241; P9BE-NEXT: mulli r5, r5, 95242; P9BE-NEXT: sub r3, r3, r5243; P9BE-NEXT: mtfprwz f1, r3244; P9BE-NEXT: addis r3, r2, .LCPI1_0@toc@ha245; P9BE-NEXT: addi r3, r3, .LCPI1_0@toc@l246; P9BE-NEXT: lxv vs2, 0(r3)247; P9BE-NEXT: li r3, 2248; P9BE-NEXT: vextuhlx r3, r3, v2249; P9BE-NEXT: clrlwi r3, r3, 16250; P9BE-NEXT: xxperm vs0, vs1, vs2251; P9BE-NEXT: mulhwu r5, r3, r4252; P9BE-NEXT: mulli r5, r5, 95253; P9BE-NEXT: sub r3, r3, r5254; P9BE-NEXT: mtfprwz f1, r3255; P9BE-NEXT: li r3, 0256; P9BE-NEXT: vextuhlx r3, r3, v2257; P9BE-NEXT: clrlwi r3, r3, 16258; P9BE-NEXT: mulhwu r4, r3, r4259; P9BE-NEXT: mulli r4, r4, 95260; P9BE-NEXT: sub r3, r3, r4261; P9BE-NEXT: mtfprwz f3, r3262; P9BE-NEXT: xxperm vs1, vs3, vs2263; P9BE-NEXT: xxmrghw v2, vs1, vs0264; P9BE-NEXT: blr265;266; P8LE-LABEL: fold_urem_vec_2:267; P8LE: # %bb.0:268; P8LE-NEXT: xxswapd vs0, v2269; P8LE-NEXT: lis r4, 689270; P8LE-NEXT: mffprd r3, f0271; P8LE-NEXT: ori r4, r4, 55879272; P8LE-NEXT: clrldi r5, r3, 48273; P8LE-NEXT: rldicl r6, r3, 48, 48274; P8LE-NEXT: rldicl r7, r3, 32, 48275; P8LE-NEXT: rldicl r3, r3, 16, 48276; P8LE-NEXT: clrlwi r5, r5, 16277; P8LE-NEXT: clrlwi r6, r6, 16278; P8LE-NEXT: clrlwi r7, r7, 16279; P8LE-NEXT: clrlwi r3, r3, 16280; P8LE-NEXT: mulhwu r8, r5, r4281; P8LE-NEXT: mulli r8, r8, 95282; P8LE-NEXT: sub r5, r5, r8283; P8LE-NEXT: mulhwu r8, r6, r4284; P8LE-NEXT: mtvsrd v2, r5285; P8LE-NEXT: mulli r8, r8, 95286; P8LE-NEXT: sub r6, r6, r8287; P8LE-NEXT: mulhwu r8, r7, r4288; P8LE-NEXT: mulhwu r4, r3, r4289; P8LE-NEXT: mtvsrd v3, r6290; P8LE-NEXT: mulli r8, r8, 95291; P8LE-NEXT: mulli r4, r4, 95292; P8LE-NEXT: sub r7, r7, r8293; P8LE-NEXT: sub r3, r3, r4294; P8LE-NEXT: mtvsrd v4, r7295; P8LE-NEXT: vmrghh v2, v3, v2296; P8LE-NEXT: mtvsrd v3, r3297; P8LE-NEXT: vmrghh v3, v3, v4298; P8LE-NEXT: xxmrglw v2, v3, v2299; P8LE-NEXT: blr300;301; P8BE-LABEL: fold_urem_vec_2:302; P8BE: # %bb.0:303; P8BE-NEXT: mfvsrd r3, v2304; P8BE-NEXT: addis r5, r2, .LCPI1_0@toc@ha305; P8BE-NEXT: lis r4, 689306; P8BE-NEXT: addi r5, r5, .LCPI1_0@toc@l307; P8BE-NEXT: ori r4, r4, 55879308; P8BE-NEXT: lxvw4x v2, 0, r5309; P8BE-NEXT: clrldi r5, r3, 48310; P8BE-NEXT: rldicl r6, r3, 48, 48311; P8BE-NEXT: rldicl r7, r3, 32, 48312; P8BE-NEXT: rldicl r3, r3, 16, 48313; P8BE-NEXT: clrlwi r5, r5, 16314; P8BE-NEXT: clrlwi r6, r6, 16315; P8BE-NEXT: clrlwi r7, r7, 16316; P8BE-NEXT: clrlwi r3, r3, 16317; P8BE-NEXT: mulhwu r8, r5, r4318; P8BE-NEXT: mulli r8, r8, 95319; P8BE-NEXT: sub r5, r5, r8320; P8BE-NEXT: mulhwu r8, r6, r4321; P8BE-NEXT: mtvsrwz v3, r5322; P8BE-NEXT: mulli r8, r8, 95323; P8BE-NEXT: sub r6, r6, r8324; P8BE-NEXT: mulhwu r8, r7, r4325; P8BE-NEXT: mulhwu r4, r3, r4326; P8BE-NEXT: mtvsrwz v4, r6327; P8BE-NEXT: mulli r8, r8, 95328; P8BE-NEXT: mulli r4, r4, 95329; P8BE-NEXT: sub r7, r7, r8330; P8BE-NEXT: sub r3, r3, r4331; P8BE-NEXT: mtvsrwz v5, r7332; P8BE-NEXT: vperm v3, v4, v3, v2333; P8BE-NEXT: mtvsrwz v4, r3334; P8BE-NEXT: vperm v2, v4, v5, v2335; P8BE-NEXT: xxmrghw v2, v2, v3336; P8BE-NEXT: blr337 %1 = urem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>338 ret <4 x i16> %1339}340 341 342; Don't fold if we can combine urem with udiv.343define <4 x i16> @combine_urem_udiv(<4 x i16> %x) {344; P9LE-LABEL: combine_urem_udiv:345; P9LE: # %bb.0:346; P9LE-NEXT: li r3, 0347; P9LE-NEXT: lis r4, 689348; P9LE-NEXT: vextuhrx r3, r3, v2349; P9LE-NEXT: ori r4, r4, 55879350; P9LE-NEXT: clrlwi r3, r3, 16351; P9LE-NEXT: mulhwu r5, r3, r4352; P9LE-NEXT: mulli r6, r5, 95353; P9LE-NEXT: sub r3, r3, r6354; P9LE-NEXT: mtvsrd v3, r3355; P9LE-NEXT: li r3, 2356; P9LE-NEXT: vextuhrx r3, r3, v2357; P9LE-NEXT: clrlwi r6, r3, 16358; P9LE-NEXT: mulhwu r6, r6, r4359; P9LE-NEXT: mulli r7, r6, 95360; P9LE-NEXT: sub r3, r3, r7361; P9LE-NEXT: mtvsrd v4, r3362; P9LE-NEXT: li r3, 4363; P9LE-NEXT: vextuhrx r3, r3, v2364; P9LE-NEXT: vmrghh v3, v4, v3365; P9LE-NEXT: clrlwi r7, r3, 16366; P9LE-NEXT: mulhwu r7, r7, r4367; P9LE-NEXT: mulli r8, r7, 95368; P9LE-NEXT: sub r3, r3, r8369; P9LE-NEXT: mtvsrd v4, r3370; P9LE-NEXT: li r3, 6371; P9LE-NEXT: vextuhrx r3, r3, v2372; P9LE-NEXT: clrlwi r8, r3, 16373; P9LE-NEXT: mulhwu r4, r8, r4374; P9LE-NEXT: mulli r8, r4, 95375; P9LE-NEXT: mtvsrd v5, r4376; P9LE-NEXT: sub r3, r3, r8377; P9LE-NEXT: mtvsrd v2, r3378; P9LE-NEXT: vmrghh v2, v2, v4379; P9LE-NEXT: mtvsrd v4, r6380; P9LE-NEXT: xxmrglw v2, v2, v3381; P9LE-NEXT: mtvsrd v3, r5382; P9LE-NEXT: vmrghh v3, v4, v3383; P9LE-NEXT: mtvsrd v4, r7384; P9LE-NEXT: vmrghh v4, v5, v4385; P9LE-NEXT: xxmrglw v3, v4, v3386; P9LE-NEXT: vadduhm v2, v2, v3387; P9LE-NEXT: blr388;389; P9BE-LABEL: combine_urem_udiv:390; P9BE: # %bb.0:391; P9BE-NEXT: li r3, 6392; P9BE-NEXT: lis r5, 689393; P9BE-NEXT: vextuhlx r3, r3, v2394; P9BE-NEXT: ori r5, r5, 55879395; P9BE-NEXT: clrlwi r4, r3, 16396; P9BE-NEXT: mulhwu r4, r4, r5397; P9BE-NEXT: mulli r6, r4, 95398; P9BE-NEXT: sub r3, r3, r6399; P9BE-NEXT: mtfprwz f0, r3400; P9BE-NEXT: li r3, 4401; P9BE-NEXT: vextuhlx r3, r3, v2402; P9BE-NEXT: clrlwi r6, r3, 16403; P9BE-NEXT: mulhwu r6, r6, r5404; P9BE-NEXT: mulli r7, r6, 95405; P9BE-NEXT: sub r3, r3, r7406; P9BE-NEXT: mtfprwz f1, r3407; P9BE-NEXT: addis r3, r2, .LCPI2_0@toc@ha408; P9BE-NEXT: addi r3, r3, .LCPI2_0@toc@l409; P9BE-NEXT: lxv vs2, 0(r3)410; P9BE-NEXT: li r3, 2411; P9BE-NEXT: vextuhlx r3, r3, v2412; P9BE-NEXT: clrlwi r7, r3, 16413; P9BE-NEXT: xxperm vs0, vs1, vs2414; P9BE-NEXT: mulhwu r7, r7, r5415; P9BE-NEXT: mulli r8, r7, 95416; P9BE-NEXT: sub r3, r3, r8417; P9BE-NEXT: mtfprwz f1, r3418; P9BE-NEXT: li r3, 0419; P9BE-NEXT: vextuhlx r3, r3, v2420; P9BE-NEXT: clrlwi r3, r3, 16421; P9BE-NEXT: mulhwu r5, r3, r5422; P9BE-NEXT: mulli r8, r5, 95423; P9BE-NEXT: sub r3, r3, r8424; P9BE-NEXT: mtfprwz f3, r3425; P9BE-NEXT: xxperm vs1, vs3, vs2426; P9BE-NEXT: mtfprwz f3, r5427; P9BE-NEXT: xxmrghw v2, vs1, vs0428; P9BE-NEXT: mtfprwz f0, r4429; P9BE-NEXT: mtfprwz f1, r6430; P9BE-NEXT: xxperm vs0, vs1, vs2431; P9BE-NEXT: mtfprwz f1, r7432; P9BE-NEXT: xxperm vs1, vs3, vs2433; P9BE-NEXT: xxmrghw v3, vs1, vs0434; P9BE-NEXT: vadduhm v2, v2, v3435; P9BE-NEXT: blr436;437; P8LE-LABEL: combine_urem_udiv:438; P8LE: # %bb.0:439; P8LE-NEXT: xxswapd vs0, v2440; P8LE-NEXT: lis r4, 689441; P8LE-NEXT: mffprd r3, f0442; P8LE-NEXT: ori r4, r4, 55879443; P8LE-NEXT: clrldi r5, r3, 48444; P8LE-NEXT: rldicl r6, r3, 48, 48445; P8LE-NEXT: rldicl r7, r3, 32, 48446; P8LE-NEXT: rldicl r3, r3, 16, 48447; P8LE-NEXT: clrlwi r5, r5, 16448; P8LE-NEXT: clrlwi r8, r6, 16449; P8LE-NEXT: clrlwi r9, r7, 16450; P8LE-NEXT: clrlwi r10, r3, 16451; P8LE-NEXT: mulhwu r11, r5, r4452; P8LE-NEXT: mulhwu r8, r8, r4453; P8LE-NEXT: mulhwu r9, r9, r4454; P8LE-NEXT: mulhwu r4, r10, r4455; P8LE-NEXT: mulli r10, r11, 95456; P8LE-NEXT: mtvsrd v2, r11457; P8LE-NEXT: mtvsrd v3, r8458; P8LE-NEXT: sub r5, r5, r10459; P8LE-NEXT: mulli r10, r8, 95460; P8LE-NEXT: mtvsrd v4, r5461; P8LE-NEXT: sub r6, r6, r10462; P8LE-NEXT: mulli r10, r9, 95463; P8LE-NEXT: mtvsrd v5, r6464; P8LE-NEXT: sub r7, r7, r10465; P8LE-NEXT: mulli r10, r4, 95466; P8LE-NEXT: mtvsrd v0, r7467; P8LE-NEXT: sub r3, r3, r10468; P8LE-NEXT: vmrghh v2, v3, v2469; P8LE-NEXT: mtvsrd v3, r9470; P8LE-NEXT: vmrghh v4, v5, v4471; P8LE-NEXT: mtvsrd v5, r3472; P8LE-NEXT: vmrghh v5, v5, v0473; P8LE-NEXT: mtvsrd v0, r4474; P8LE-NEXT: xxmrglw v4, v5, v4475; P8LE-NEXT: vmrghh v3, v0, v3476; P8LE-NEXT: xxmrglw v2, v3, v2477; P8LE-NEXT: vadduhm v2, v4, v2478; P8LE-NEXT: blr479;480; P8BE-LABEL: combine_urem_udiv:481; P8BE: # %bb.0:482; P8BE-NEXT: mfvsrd r3, v2483; P8BE-NEXT: lis r4, 689484; P8BE-NEXT: ori r4, r4, 55879485; P8BE-NEXT: clrldi r5, r3, 48486; P8BE-NEXT: rldicl r6, r3, 48, 48487; P8BE-NEXT: rldicl r7, r3, 32, 48488; P8BE-NEXT: rldicl r3, r3, 16, 48489; P8BE-NEXT: clrlwi r8, r5, 16490; P8BE-NEXT: clrlwi r9, r6, 16491; P8BE-NEXT: clrlwi r10, r7, 16492; P8BE-NEXT: clrlwi r3, r3, 16493; P8BE-NEXT: mulhwu r8, r8, r4494; P8BE-NEXT: mulhwu r9, r9, r4495; P8BE-NEXT: mulhwu r10, r10, r4496; P8BE-NEXT: mulhwu r4, r3, r4497; P8BE-NEXT: mulli r11, r8, 95498; P8BE-NEXT: mtvsrwz v3, r8499; P8BE-NEXT: mtvsrwz v4, r9500; P8BE-NEXT: sub r5, r5, r11501; P8BE-NEXT: mulli r11, r9, 95502; P8BE-NEXT: mtvsrwz v5, r5503; P8BE-NEXT: sub r6, r6, r11504; P8BE-NEXT: mulli r11, r10, 95505; P8BE-NEXT: mtvsrwz v0, r6506; P8BE-NEXT: sub r7, r7, r11507; P8BE-NEXT: mulli r11, r4, 95508; P8BE-NEXT: mtvsrwz v1, r7509; P8BE-NEXT: sub r3, r3, r11510; P8BE-NEXT: addis r11, r2, .LCPI2_0@toc@ha511; P8BE-NEXT: addi r11, r11, .LCPI2_0@toc@l512; P8BE-NEXT: lxvw4x v2, 0, r11513; P8BE-NEXT: vperm v5, v0, v5, v2514; P8BE-NEXT: mtvsrwz v0, r3515; P8BE-NEXT: vperm v3, v4, v3, v2516; P8BE-NEXT: mtvsrwz v4, r10517; P8BE-NEXT: vperm v0, v0, v1, v2518; P8BE-NEXT: mtvsrwz v1, r4519; P8BE-NEXT: vperm v2, v1, v4, v2520; P8BE-NEXT: xxmrghw v4, v0, v5521; P8BE-NEXT: xxmrghw v2, v2, v3522; P8BE-NEXT: vadduhm v2, v4, v2523; P8BE-NEXT: blr524 %1 = urem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>525 %2 = udiv <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>526 %3 = add <4 x i16> %1, %2527 ret <4 x i16> %3528}529 530; Don't fold for divisors that are a power of two.531define <4 x i16> @dont_fold_urem_power_of_two(<4 x i16> %x) {532; P9LE-LABEL: dont_fold_urem_power_of_two:533; P9LE: # %bb.0:534; P9LE-NEXT: li r3, 0535; P9LE-NEXT: lis r4, 689536; P9LE-NEXT: vextuhrx r3, r3, v2537; P9LE-NEXT: ori r4, r4, 55879538; P9LE-NEXT: clrlwi r3, r3, 26539; P9LE-NEXT: mtvsrd v3, r3540; P9LE-NEXT: li r3, 2541; P9LE-NEXT: vextuhrx r3, r3, v2542; P9LE-NEXT: clrlwi r3, r3, 27543; P9LE-NEXT: mtvsrd v4, r3544; P9LE-NEXT: li r3, 6545; P9LE-NEXT: vextuhrx r3, r3, v2546; P9LE-NEXT: vmrghh v3, v4, v3547; P9LE-NEXT: clrlwi r3, r3, 16548; P9LE-NEXT: mulhwu r4, r3, r4549; P9LE-NEXT: mulli r4, r4, 95550; P9LE-NEXT: sub r3, r3, r4551; P9LE-NEXT: mtvsrd v4, r3552; P9LE-NEXT: li r3, 4553; P9LE-NEXT: vextuhrx r3, r3, v2554; P9LE-NEXT: clrlwi r3, r3, 29555; P9LE-NEXT: mtvsrd v2, r3556; P9LE-NEXT: vmrghh v2, v4, v2557; P9LE-NEXT: xxmrglw v2, v2, v3558; P9LE-NEXT: blr559;560; P9BE-LABEL: dont_fold_urem_power_of_two:561; P9BE: # %bb.0:562; P9BE-NEXT: li r3, 2563; P9BE-NEXT: lis r4, 689564; P9BE-NEXT: vextuhlx r3, r3, v2565; P9BE-NEXT: ori r4, r4, 55879566; P9BE-NEXT: clrlwi r3, r3, 27567; P9BE-NEXT: mtfprwz f0, r3568; P9BE-NEXT: li r3, 0569; P9BE-NEXT: vextuhlx r3, r3, v2570; P9BE-NEXT: clrlwi r3, r3, 26571; P9BE-NEXT: mtfprwz f1, r3572; P9BE-NEXT: addis r3, r2, .LCPI3_0@toc@ha573; P9BE-NEXT: addi r3, r3, .LCPI3_0@toc@l574; P9BE-NEXT: lxv vs2, 0(r3)575; P9BE-NEXT: li r3, 6576; P9BE-NEXT: vextuhlx r3, r3, v2577; P9BE-NEXT: clrlwi r3, r3, 16578; P9BE-NEXT: xxperm vs0, vs1, vs2579; P9BE-NEXT: mulhwu r4, r3, r4580; P9BE-NEXT: mulli r4, r4, 95581; P9BE-NEXT: sub r3, r3, r4582; P9BE-NEXT: mtfprwz f1, r3583; P9BE-NEXT: li r3, 4584; P9BE-NEXT: vextuhlx r3, r3, v2585; P9BE-NEXT: clrlwi r3, r3, 29586; P9BE-NEXT: mtfprwz f3, r3587; P9BE-NEXT: xxperm vs1, vs3, vs2588; P9BE-NEXT: xxmrghw v2, vs0, vs1589; P9BE-NEXT: blr590;591; P8LE-LABEL: dont_fold_urem_power_of_two:592; P8LE: # %bb.0:593; P8LE-NEXT: xxswapd vs0, v2594; P8LE-NEXT: mffprd r3, f0595; P8LE-NEXT: clrldi r4, r3, 48596; P8LE-NEXT: clrlwi r4, r4, 26597; P8LE-NEXT: mtvsrd v2, r4598; P8LE-NEXT: rldicl r4, r3, 48, 48599; P8LE-NEXT: clrlwi r4, r4, 27600; P8LE-NEXT: mtvsrd v3, r4601; P8LE-NEXT: rldicl r4, r3, 32, 48602; P8LE-NEXT: rldicl r3, r3, 16, 48603; P8LE-NEXT: clrlwi r4, r4, 29604; P8LE-NEXT: clrlwi r3, r3, 16605; P8LE-NEXT: vmrghh v2, v3, v2606; P8LE-NEXT: mtvsrd v3, r4607; P8LE-NEXT: lis r4, 689608; P8LE-NEXT: ori r4, r4, 55879609; P8LE-NEXT: mulhwu r4, r3, r4610; P8LE-NEXT: mulli r4, r4, 95611; P8LE-NEXT: sub r3, r3, r4612; P8LE-NEXT: mtvsrd v4, r3613; P8LE-NEXT: vmrghh v3, v4, v3614; P8LE-NEXT: xxmrglw v2, v3, v2615; P8LE-NEXT: blr616;617; P8BE-LABEL: dont_fold_urem_power_of_two:618; P8BE: # %bb.0:619; P8BE-NEXT: addis r3, r2, .LCPI3_0@toc@ha620; P8BE-NEXT: lis r5, 689621; P8BE-NEXT: addi r3, r3, .LCPI3_0@toc@l622; P8BE-NEXT: ori r5, r5, 55879623; P8BE-NEXT: lxvw4x v3, 0, r3624; P8BE-NEXT: mfvsrd r3, v2625; P8BE-NEXT: rldicl r4, r3, 32, 48626; P8BE-NEXT: clrlwi r4, r4, 27627; P8BE-NEXT: mtvsrwz v2, r4628; P8BE-NEXT: rldicl r4, r3, 16, 48629; P8BE-NEXT: clrlwi r4, r4, 26630; P8BE-NEXT: mtvsrwz v4, r4631; P8BE-NEXT: clrldi r4, r3, 48632; P8BE-NEXT: rldicl r3, r3, 48, 48633; P8BE-NEXT: clrlwi r4, r4, 16634; P8BE-NEXT: clrlwi r3, r3, 29635; P8BE-NEXT: mulhwu r5, r4, r5636; P8BE-NEXT: mtvsrwz v5, r3637; P8BE-NEXT: mulli r5, r5, 95638; P8BE-NEXT: sub r4, r4, r5639; P8BE-NEXT: vperm v2, v4, v2, v3640; P8BE-NEXT: mtvsrwz v4, r4641; P8BE-NEXT: vperm v3, v5, v4, v3642; P8BE-NEXT: xxmrghw v2, v2, v3643; P8BE-NEXT: blr644 %1 = urem <4 x i16> %x, <i16 64, i16 32, i16 8, i16 95>645 ret <4 x i16> %1646}647 648; Don't fold if the divisor is one.649define <4 x i16> @dont_fold_urem_one(<4 x i16> %x) {650; P9LE-LABEL: dont_fold_urem_one:651; P9LE: # %bb.0:652; P9LE-NEXT: li r3, 4653; P9LE-NEXT: lis r4, 2849654; P9LE-NEXT: vextuhrx r3, r3, v2655; P9LE-NEXT: ori r4, r4, 25645656; P9LE-NEXT: clrlwi r3, r3, 16657; P9LE-NEXT: mulhwu r4, r3, r4658; P9LE-NEXT: mulli r4, r4, 23659; P9LE-NEXT: sub r3, r3, r4660; P9LE-NEXT: lis r4, 12661; P9LE-NEXT: mtvsrd v3, r3662; P9LE-NEXT: li r3, 6663; P9LE-NEXT: ori r4, r4, 5560664; P9LE-NEXT: vextuhrx r3, r3, v2665; P9LE-NEXT: clrlwi r3, r3, 16666; P9LE-NEXT: mulhwu r4, r3, r4667; P9LE-NEXT: mulli r4, r4, 5423668; P9LE-NEXT: sub r3, r3, r4669; P9LE-NEXT: lis r4, 100670; P9LE-NEXT: mtvsrd v4, r3671; P9LE-NEXT: li r3, 2672; P9LE-NEXT: ori r4, r4, 13629673; P9LE-NEXT: vextuhrx r3, r3, v2674; P9LE-NEXT: vmrghh v3, v4, v3675; P9LE-NEXT: clrlwi r3, r3, 16676; P9LE-NEXT: mulhwu r4, r3, r4677; P9LE-NEXT: mulli r4, r4, 654678; P9LE-NEXT: sub r3, r3, r4679; P9LE-NEXT: mtvsrd v2, r3680; P9LE-NEXT: li r3, 0681; P9LE-NEXT: mtvsrd v4, r3682; P9LE-NEXT: vmrghh v2, v2, v4683; P9LE-NEXT: xxmrglw v2, v3, v2684; P9LE-NEXT: blr685;686; P9BE-LABEL: dont_fold_urem_one:687; P9BE: # %bb.0:688; P9BE-NEXT: li r3, 6689; P9BE-NEXT: lis r4, 12690; P9BE-NEXT: vextuhlx r3, r3, v2691; P9BE-NEXT: ori r4, r4, 5560692; P9BE-NEXT: clrlwi r3, r3, 16693; P9BE-NEXT: mulhwu r4, r3, r4694; P9BE-NEXT: mulli r4, r4, 5423695; P9BE-NEXT: sub r3, r3, r4696; P9BE-NEXT: lis r4, 2849697; P9BE-NEXT: mtfprwz f0, r3698; P9BE-NEXT: li r3, 4699; P9BE-NEXT: ori r4, r4, 25645700; P9BE-NEXT: vextuhlx r3, r3, v2701; P9BE-NEXT: clrlwi r3, r3, 16702; P9BE-NEXT: mulhwu r4, r3, r4703; P9BE-NEXT: mulli r4, r4, 23704; P9BE-NEXT: sub r3, r3, r4705; P9BE-NEXT: lis r4, 100706; P9BE-NEXT: mtfprwz f1, r3707; P9BE-NEXT: addis r3, r2, .LCPI4_0@toc@ha708; P9BE-NEXT: ori r4, r4, 13629709; P9BE-NEXT: addi r3, r3, .LCPI4_0@toc@l710; P9BE-NEXT: lxv vs2, 0(r3)711; P9BE-NEXT: li r3, 2712; P9BE-NEXT: vextuhlx r3, r3, v2713; P9BE-NEXT: clrlwi r3, r3, 16714; P9BE-NEXT: xxperm vs0, vs1, vs2715; P9BE-NEXT: mulhwu r4, r3, r4716; P9BE-NEXT: mulli r4, r4, 654717; P9BE-NEXT: sub r3, r3, r4718; P9BE-NEXT: mtfprwz f1, r3719; P9BE-NEXT: li r3, 0720; P9BE-NEXT: mtfprwz f3, r3721; P9BE-NEXT: xxperm vs1, vs3, vs2722; P9BE-NEXT: xxmrghw v2, vs1, vs0723; P9BE-NEXT: blr724;725; P8LE-LABEL: dont_fold_urem_one:726; P8LE: # %bb.0:727; P8LE-NEXT: xxswapd vs0, v2728; P8LE-NEXT: li r4, 0729; P8LE-NEXT: lis r5, 100730; P8LE-NEXT: lis r6, 2849731; P8LE-NEXT: mffprd r3, f0732; P8LE-NEXT: mtvsrd v2, r4733; P8LE-NEXT: ori r4, r5, 13629734; P8LE-NEXT: ori r5, r6, 25645735; P8LE-NEXT: rldicl r6, r3, 48, 48736; P8LE-NEXT: clrlwi r6, r6, 16737; P8LE-NEXT: mulhwu r4, r6, r4738; P8LE-NEXT: mulli r4, r4, 654739; P8LE-NEXT: sub r4, r6, r4740; P8LE-NEXT: rldicl r6, r3, 32, 48741; P8LE-NEXT: rldicl r3, r3, 16, 48742; P8LE-NEXT: mtvsrd v3, r4743; P8LE-NEXT: lis r4, 12744; P8LE-NEXT: clrlwi r6, r6, 16745; P8LE-NEXT: clrlwi r3, r3, 16746; P8LE-NEXT: ori r4, r4, 5560747; P8LE-NEXT: mulhwu r5, r6, r5748; P8LE-NEXT: mulhwu r4, r3, r4749; P8LE-NEXT: mulli r5, r5, 23750; P8LE-NEXT: mulli r4, r4, 5423751; P8LE-NEXT: sub r5, r6, r5752; P8LE-NEXT: sub r3, r3, r4753; P8LE-NEXT: mtvsrd v4, r3754; P8LE-NEXT: vmrghh v2, v3, v2755; P8LE-NEXT: mtvsrd v3, r5756; P8LE-NEXT: vmrghh v3, v4, v3757; P8LE-NEXT: xxmrglw v2, v3, v2758; P8LE-NEXT: blr759;760; P8BE-LABEL: dont_fold_urem_one:761; P8BE: # %bb.0:762; P8BE-NEXT: mfvsrd r3, v2763; P8BE-NEXT: addis r6, r2, .LCPI4_0@toc@ha764; P8BE-NEXT: lis r4, 12765; P8BE-NEXT: lis r5, 2849766; P8BE-NEXT: addi r6, r6, .LCPI4_0@toc@l767; P8BE-NEXT: ori r4, r4, 5560768; P8BE-NEXT: ori r5, r5, 25645769; P8BE-NEXT: lxvw4x v2, 0, r6770; P8BE-NEXT: clrldi r6, r3, 48771; P8BE-NEXT: clrlwi r6, r6, 16772; P8BE-NEXT: mulhwu r4, r6, r4773; P8BE-NEXT: mulli r4, r4, 5423774; P8BE-NEXT: sub r4, r6, r4775; P8BE-NEXT: rldicl r6, r3, 48, 48776; P8BE-NEXT: rldicl r3, r3, 32, 48777; P8BE-NEXT: clrlwi r6, r6, 16778; P8BE-NEXT: clrlwi r3, r3, 16779; P8BE-NEXT: mtvsrwz v3, r4780; P8BE-NEXT: mulhwu r5, r6, r5781; P8BE-NEXT: mulli r5, r5, 23782; P8BE-NEXT: sub r5, r6, r5783; P8BE-NEXT: lis r6, 100784; P8BE-NEXT: ori r6, r6, 13629785; P8BE-NEXT: mtvsrwz v4, r5786; P8BE-NEXT: mulhwu r6, r3, r6787; P8BE-NEXT: mulli r6, r6, 654788; P8BE-NEXT: sub r3, r3, r6789; P8BE-NEXT: vperm v3, v4, v3, v2790; P8BE-NEXT: mtvsrwz v4, r3791; P8BE-NEXT: li r3, 0792; P8BE-NEXT: mtvsrwz v5, r3793; P8BE-NEXT: vperm v2, v5, v4, v2794; P8BE-NEXT: xxmrghw v2, v2, v3795; P8BE-NEXT: blr796 %1 = urem <4 x i16> %x, <i16 1, i16 654, i16 23, i16 5423>797 ret <4 x i16> %1798}799 800; Don't fold if the divisor is 2^16.801define <4 x i16> @dont_fold_urem_i16_smax(<4 x i16> %x) {802; CHECK-LABEL: dont_fold_urem_i16_smax:803; CHECK: # %bb.0:804; CHECK-NEXT: blr805 %1 = urem <4 x i16> %x, <i16 1, i16 65536, i16 23, i16 5423>806 ret <4 x i16> %1807}808 809; Don't fold i64 urem.810define <4 x i64> @dont_fold_urem_i64(<4 x i64> %x) {811; P9LE-LABEL: dont_fold_urem_i64:812; P9LE: # %bb.0:813; P9LE-NEXT: lis r4, 1602814; P9LE-NEXT: mfvsrld r3, v3815; P9LE-NEXT: ori r4, r4, 51289816; P9LE-NEXT: rldic r4, r4, 36, 1817; P9LE-NEXT: oris r4, r4, 45590818; P9LE-NEXT: ori r4, r4, 17097819; P9LE-NEXT: mulhdu r4, r3, r4820; P9LE-NEXT: sub r5, r3, r4821; P9LE-NEXT: rldicl r5, r5, 63, 1822; P9LE-NEXT: add r4, r5, r4823; P9LE-NEXT: lis r5, -16037824; P9LE-NEXT: rldicl r4, r4, 60, 4825; P9LE-NEXT: ori r5, r5, 28749826; P9LE-NEXT: mulli r4, r4, 23827; P9LE-NEXT: rldic r5, r5, 32, 0828; P9LE-NEXT: oris r5, r5, 52170829; P9LE-NEXT: ori r5, r5, 12109830; P9LE-NEXT: sub r3, r3, r4831; P9LE-NEXT: mfvsrd r4, v3832; P9LE-NEXT: mulhdu r5, r4, r5833; P9LE-NEXT: rldicl r5, r5, 52, 12834; P9LE-NEXT: mulli r5, r5, 5423835; P9LE-NEXT: sub r4, r4, r5836; P9LE-NEXT: lis r5, 3206837; P9LE-NEXT: ori r5, r5, 42889838; P9LE-NEXT: mtvsrdd v3, r4, r3839; P9LE-NEXT: mfvsrd r3, v2840; P9LE-NEXT: rldic r5, r5, 35, 1841; P9LE-NEXT: rldicl r4, r3, 63, 1842; P9LE-NEXT: oris r5, r5, 1603843; P9LE-NEXT: ori r5, r5, 21445844; P9LE-NEXT: mulhdu r4, r4, r5845; P9LE-NEXT: rldicl r4, r4, 57, 7846; P9LE-NEXT: mulli r4, r4, 654847; P9LE-NEXT: sub r3, r3, r4848; P9LE-NEXT: li r4, 0849; P9LE-NEXT: mtvsrdd v2, r3, r4850; P9LE-NEXT: blr851;852; P9BE-LABEL: dont_fold_urem_i64:853; P9BE: # %bb.0:854; P9BE-NEXT: lis r4, 1602855; P9BE-NEXT: mfvsrd r3, v3856; P9BE-NEXT: ori r4, r4, 51289857; P9BE-NEXT: rldic r4, r4, 36, 1858; P9BE-NEXT: oris r4, r4, 45590859; P9BE-NEXT: ori r4, r4, 17097860; P9BE-NEXT: mulhdu r4, r3, r4861; P9BE-NEXT: sub r5, r3, r4862; P9BE-NEXT: rldicl r5, r5, 63, 1863; P9BE-NEXT: add r4, r5, r4864; P9BE-NEXT: lis r5, -16037865; P9BE-NEXT: rldicl r4, r4, 60, 4866; P9BE-NEXT: ori r5, r5, 28749867; P9BE-NEXT: mulli r4, r4, 23868; P9BE-NEXT: rldic r5, r5, 32, 0869; P9BE-NEXT: oris r5, r5, 52170870; P9BE-NEXT: ori r5, r5, 12109871; P9BE-NEXT: sub r3, r3, r4872; P9BE-NEXT: mfvsrld r4, v3873; P9BE-NEXT: mulhdu r5, r4, r5874; P9BE-NEXT: rldicl r5, r5, 52, 12875; P9BE-NEXT: mulli r5, r5, 5423876; P9BE-NEXT: sub r4, r4, r5877; P9BE-NEXT: lis r5, 3206878; P9BE-NEXT: ori r5, r5, 42889879; P9BE-NEXT: mtvsrdd v3, r3, r4880; P9BE-NEXT: mfvsrld r3, v2881; P9BE-NEXT: rldic r5, r5, 35, 1882; P9BE-NEXT: rldicl r4, r3, 63, 1883; P9BE-NEXT: oris r5, r5, 1603884; P9BE-NEXT: ori r5, r5, 21445885; P9BE-NEXT: mulhdu r4, r4, r5886; P9BE-NEXT: rldicl r4, r4, 57, 7887; P9BE-NEXT: mulli r4, r4, 654888; P9BE-NEXT: sub r3, r3, r4889; P9BE-NEXT: mtvsrdd v2, 0, r3890; P9BE-NEXT: blr891;892; P8LE-LABEL: dont_fold_urem_i64:893; P8LE: # %bb.0:894; P8LE-NEXT: lis r3, 1602895; P8LE-NEXT: xxswapd vs0, v3896; P8LE-NEXT: lis r5, 3206897; P8LE-NEXT: mfvsrd r6, v2898; P8LE-NEXT: mfvsrd r8, v3899; P8LE-NEXT: ori r3, r3, 51289900; P8LE-NEXT: mffprd r4, f0901; P8LE-NEXT: ori r5, r5, 42889902; P8LE-NEXT: rldic r3, r3, 36, 1903; P8LE-NEXT: rldic r5, r5, 35, 1904; P8LE-NEXT: rldicl r7, r6, 63, 1905; P8LE-NEXT: oris r3, r3, 45590906; P8LE-NEXT: oris r5, r5, 1603907; P8LE-NEXT: ori r3, r3, 17097908; P8LE-NEXT: ori r5, r5, 21445909; P8LE-NEXT: mulhdu r3, r4, r3910; P8LE-NEXT: mulhdu r5, r7, r5911; P8LE-NEXT: sub r7, r4, r3912; P8LE-NEXT: rldicl r5, r5, 57, 7913; P8LE-NEXT: rldicl r7, r7, 63, 1914; P8LE-NEXT: mulli r5, r5, 654915; P8LE-NEXT: add r3, r7, r3916; P8LE-NEXT: lis r7, -16037917; P8LE-NEXT: ori r7, r7, 28749918; P8LE-NEXT: rldicl r3, r3, 60, 4919; P8LE-NEXT: sub r5, r6, r5920; P8LE-NEXT: rldic r7, r7, 32, 0921; P8LE-NEXT: mulli r3, r3, 23922; P8LE-NEXT: oris r7, r7, 52170923; P8LE-NEXT: ori r7, r7, 12109924; P8LE-NEXT: sub r3, r4, r3925; P8LE-NEXT: mulhdu r7, r8, r7926; P8LE-NEXT: mtfprd f1, r3927; P8LE-NEXT: li r3, 0928; P8LE-NEXT: rldicl r7, r7, 52, 12929; P8LE-NEXT: mulli r7, r7, 5423930; P8LE-NEXT: sub r7, r8, r7931; P8LE-NEXT: mtfprd f0, r7932; P8LE-NEXT: xxmrghd v3, vs0, vs1933; P8LE-NEXT: mtfprd f0, r5934; P8LE-NEXT: mtfprd f1, r3935; P8LE-NEXT: xxmrghd v2, vs0, vs1936; P8LE-NEXT: blr937;938; P8BE-LABEL: dont_fold_urem_i64:939; P8BE: # %bb.0:940; P8BE-NEXT: lis r3, 1602941; P8BE-NEXT: mfvsrd r4, v3942; P8BE-NEXT: lis r5, 3206943; P8BE-NEXT: xxswapd vs0, v2944; P8BE-NEXT: xxswapd vs1, v3945; P8BE-NEXT: ori r3, r3, 51289946; P8BE-NEXT: ori r5, r5, 42889947; P8BE-NEXT: mffprd r6, f0948; P8BE-NEXT: mffprd r8, f1949; P8BE-NEXT: rldic r3, r3, 36, 1950; P8BE-NEXT: rldic r5, r5, 35, 1951; P8BE-NEXT: oris r3, r3, 45590952; P8BE-NEXT: oris r5, r5, 1603953; P8BE-NEXT: rldicl r7, r6, 63, 1954; P8BE-NEXT: ori r3, r3, 17097955; P8BE-NEXT: ori r5, r5, 21445956; P8BE-NEXT: mulhdu r3, r4, r3957; P8BE-NEXT: mulhdu r5, r7, r5958; P8BE-NEXT: sub r7, r4, r3959; P8BE-NEXT: rldicl r5, r5, 57, 7960; P8BE-NEXT: rldicl r7, r7, 63, 1961; P8BE-NEXT: mulli r5, r5, 654962; P8BE-NEXT: add r3, r7, r3963; P8BE-NEXT: lis r7, -16037964; P8BE-NEXT: ori r7, r7, 28749965; P8BE-NEXT: rldicl r3, r3, 60, 4966; P8BE-NEXT: sub r5, r6, r5967; P8BE-NEXT: rldic r7, r7, 32, 0968; P8BE-NEXT: mulli r3, r3, 23969; P8BE-NEXT: oris r7, r7, 52170970; P8BE-NEXT: ori r7, r7, 12109971; P8BE-NEXT: sub r3, r4, r3972; P8BE-NEXT: mulhdu r7, r8, r7973; P8BE-NEXT: mtfprd f1, r3974; P8BE-NEXT: li r3, 0975; P8BE-NEXT: rldicl r7, r7, 52, 12976; P8BE-NEXT: mulli r7, r7, 5423977; P8BE-NEXT: sub r7, r8, r7978; P8BE-NEXT: mtfprd f0, r7979; P8BE-NEXT: xxmrghd v3, vs1, vs0980; P8BE-NEXT: mtfprd f0, r5981; P8BE-NEXT: mtfprd f1, r3982; P8BE-NEXT: xxmrghd v2, vs1, vs0983; P8BE-NEXT: blr984 %1 = urem <4 x i64> %x, <i64 1, i64 654, i64 23, i64 5423>985 ret <4 x i64> %1986}987