2136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -relocation-model=pic -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \3; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \4; RUN: | FileCheck %s5; RUN: llc -relocation-model=pic -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \6; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \7; RUN: | FileCheck %s -check-prefix=CHECK-P88 9@mem = global [5 x i64] [i64 56, i64 63, i64 3, i64 5, i64 6], align 810@umem = global [5 x i64] [i64 560, i64 100, i64 34, i64 2, i64 5], align 811@swMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 412@uwMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 413@uhwMem = global [5 x i16] [i16 5, i16 2, i16 3, i16 4, i16 0], align 214@ubMem = global [5 x i8] c"\05\02\03\04\00", align 115 16; Function Attrs: norecurse nounwind17define void @sdwConv2qp(ptr nocapture %a, i64 %b) nounwind {18; CHECK-LABEL: sdwConv2qp:19; CHECK: # %bb.0: # %entry20; CHECK-NEXT: mtvsrd v2, r421; CHECK-NEXT: xscvsdqp v2, v222; CHECK-NEXT: stxv v2, 0(r3)23; CHECK-NEXT: blr24;25; CHECK-P8-LABEL: sdwConv2qp:26; CHECK-P8: # %bb.0: # %entry27; CHECK-P8-NEXT: mflr r028; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill29; CHECK-P8-NEXT: stdu r1, -48(r1)30; CHECK-P8-NEXT: mr r30, r331; CHECK-P8-NEXT: mr r3, r432; CHECK-P8-NEXT: std r0, 64(r1)33; CHECK-P8-NEXT: bl __floatdikf34; CHECK-P8-NEXT: nop35; CHECK-P8-NEXT: xxswapd vs0, v236; CHECK-P8-NEXT: stxvd2x vs0, 0, r3037; CHECK-P8-NEXT: addi r1, r1, 4838; CHECK-P8-NEXT: ld r0, 16(r1)39; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload40; CHECK-P8-NEXT: mtlr r041; CHECK-P8-NEXT: blr42entry:43 %conv = sitofp i64 %b to fp12844 store fp128 %conv, ptr %a, align 1645 ret void46 47}48 49; Function Attrs: norecurse nounwind50define void @sdwConv2qp_01(ptr nocapture %a, i128 %b) nounwind {51; CHECK-LABEL: sdwConv2qp_01:52; CHECK: # %bb.0: # %entry53; CHECK-NEXT: mflr r054; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill55; CHECK-NEXT: stdu r1, -48(r1)56; CHECK-NEXT: mr r30, r357; CHECK-NEXT: mr r3, r458; CHECK-NEXT: mr r4, r559; CHECK-NEXT: std r0, 64(r1)60; CHECK-NEXT: bl __floattikf61; CHECK-NEXT: nop62; CHECK-NEXT: stxv v2, 0(r30)63; CHECK-NEXT: addi r1, r1, 4864; CHECK-NEXT: ld r0, 16(r1)65; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload66; CHECK-NEXT: mtlr r067; CHECK-NEXT: blr68;69; CHECK-P8-LABEL: sdwConv2qp_01:70; CHECK-P8: # %bb.0: # %entry71; CHECK-P8-NEXT: mflr r072; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill73; CHECK-P8-NEXT: stdu r1, -48(r1)74; CHECK-P8-NEXT: mr r30, r375; CHECK-P8-NEXT: mr r3, r476; CHECK-P8-NEXT: std r0, 64(r1)77; CHECK-P8-NEXT: mr r4, r578; CHECK-P8-NEXT: bl __floattikf79; CHECK-P8-NEXT: nop80; CHECK-P8-NEXT: xxswapd vs0, v281; CHECK-P8-NEXT: stxvd2x vs0, 0, r3082; CHECK-P8-NEXT: addi r1, r1, 4883; CHECK-P8-NEXT: ld r0, 16(r1)84; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload85; CHECK-P8-NEXT: mtlr r086; CHECK-P8-NEXT: blr87entry:88 %conv = sitofp i128 %b to fp12889 store fp128 %conv, ptr %a, align 1690 ret void91 92}93 94; Function Attrs: norecurse nounwind95define void @sdwConv2qp_02(ptr nocapture %a) nounwind {96; CHECK-LABEL: sdwConv2qp_02:97; CHECK: # %bb.0: # %entry98; CHECK-NEXT: addis r4, r2, .LC0@toc@ha99; CHECK-NEXT: ld r4, .LC0@toc@l(r4)100; CHECK-NEXT: lxsd v2, 16(r4)101; CHECK-NEXT: xscvsdqp v2, v2102; CHECK-NEXT: stxv v2, 0(r3)103; CHECK-NEXT: blr104;105; CHECK-P8-LABEL: sdwConv2qp_02:106; CHECK-P8: # %bb.0: # %entry107; CHECK-P8-NEXT: mflr r0108; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill109; CHECK-P8-NEXT: stdu r1, -48(r1)110; CHECK-P8-NEXT: mr r30, r3111; CHECK-P8-NEXT: addis r3, r2, .LC0@toc@ha112; CHECK-P8-NEXT: std r0, 64(r1)113; CHECK-P8-NEXT: ld r3, .LC0@toc@l(r3)114; CHECK-P8-NEXT: ld r3, 16(r3)115; CHECK-P8-NEXT: bl __floatdikf116; CHECK-P8-NEXT: nop117; CHECK-P8-NEXT: xxswapd vs0, v2118; CHECK-P8-NEXT: stxvd2x vs0, 0, r30119; CHECK-P8-NEXT: addi r1, r1, 48120; CHECK-P8-NEXT: ld r0, 16(r1)121; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload122; CHECK-P8-NEXT: mtlr r0123; CHECK-P8-NEXT: blr124entry:125 %i = load i64, ptr getelementptr inbounds126 ([5 x i64], ptr @mem, i64 0, i64 2), align 8127 %conv = sitofp i64 %i to fp128128 store fp128 %conv, ptr %a, align 16129 ret void130 131}132 133; Function Attrs: norecurse nounwind134define void @sdwConv2qp_03(ptr nocapture %a, ptr nocapture readonly %b) nounwind {135; CHECK-LABEL: sdwConv2qp_03:136; CHECK: # %bb.0: # %entry137; CHECK-NEXT: lxsd v2, 0(r4)138; CHECK-NEXT: xscvsdqp v2, v2139; CHECK-NEXT: stxv v2, 0(r3)140; CHECK-NEXT: blr141;142; CHECK-P8-LABEL: sdwConv2qp_03:143; CHECK-P8: # %bb.0: # %entry144; CHECK-P8-NEXT: mflr r0145; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill146; CHECK-P8-NEXT: stdu r1, -48(r1)147; CHECK-P8-NEXT: std r0, 64(r1)148; CHECK-P8-NEXT: mr r30, r3149; CHECK-P8-NEXT: ld r3, 0(r4)150; CHECK-P8-NEXT: bl __floatdikf151; CHECK-P8-NEXT: nop152; CHECK-P8-NEXT: xxswapd vs0, v2153; CHECK-P8-NEXT: stxvd2x vs0, 0, r30154; CHECK-P8-NEXT: addi r1, r1, 48155; CHECK-P8-NEXT: ld r0, 16(r1)156; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload157; CHECK-P8-NEXT: mtlr r0158; CHECK-P8-NEXT: blr159entry:160 %i = load i64, ptr %b, align 8161 %conv = sitofp i64 %i to fp128162 store fp128 %conv, ptr %a, align 16163 ret void164 165}166 167; Function Attrs: norecurse nounwind168define void @sdwConv2qp_04(ptr nocapture %a, i1 %b) nounwind {169; CHECK-LABEL: sdwConv2qp_04:170; CHECK: # %bb.0: # %entry171; CHECK-NEXT: andi. r4, r4, 1172; CHECK-NEXT: li r4, 0173; CHECK-NEXT: li r5, -1174; CHECK-NEXT: iselgt r4, r5, r4175; CHECK-NEXT: mtvsrwa v2, r4176; CHECK-NEXT: xscvsdqp v2, v2177; CHECK-NEXT: stxv v2, 0(r3)178; CHECK-NEXT: blr179;180; CHECK-P8-LABEL: sdwConv2qp_04:181; CHECK-P8: # %bb.0: # %entry182; CHECK-P8-NEXT: mflr r0183; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill184; CHECK-P8-NEXT: stdu r1, -48(r1)185; CHECK-P8-NEXT: mr r30, r3186; CHECK-P8-NEXT: andi. r3, r4, 1187; CHECK-P8-NEXT: li r3, 0188; CHECK-P8-NEXT: li r4, -1189; CHECK-P8-NEXT: std r0, 64(r1)190; CHECK-P8-NEXT: iselgt r3, r4, r3191; CHECK-P8-NEXT: bl __floatsikf192; CHECK-P8-NEXT: nop193; CHECK-P8-NEXT: xxswapd vs0, v2194; CHECK-P8-NEXT: stxvd2x vs0, 0, r30195; CHECK-P8-NEXT: addi r1, r1, 48196; CHECK-P8-NEXT: ld r0, 16(r1)197; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload198; CHECK-P8-NEXT: mtlr r0199; CHECK-P8-NEXT: blr200entry:201 %conv = sitofp i1 %b to fp128202 store fp128 %conv, ptr %a, align 16203 ret void204 205}206 207; Function Attrs: norecurse nounwind208define void @udwConv2qp(ptr nocapture %a, i64 %b) nounwind {209; CHECK-LABEL: udwConv2qp:210; CHECK: # %bb.0: # %entry211; CHECK-NEXT: mtvsrd v2, r4212; CHECK-NEXT: xscvudqp v2, v2213; CHECK-NEXT: stxv v2, 0(r3)214; CHECK-NEXT: blr215;216; CHECK-P8-LABEL: udwConv2qp:217; CHECK-P8: # %bb.0: # %entry218; CHECK-P8-NEXT: mflr r0219; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill220; CHECK-P8-NEXT: stdu r1, -48(r1)221; CHECK-P8-NEXT: mr r30, r3222; CHECK-P8-NEXT: mr r3, r4223; CHECK-P8-NEXT: std r0, 64(r1)224; CHECK-P8-NEXT: bl __floatundikf225; CHECK-P8-NEXT: nop226; CHECK-P8-NEXT: xxswapd vs0, v2227; CHECK-P8-NEXT: stxvd2x vs0, 0, r30228; CHECK-P8-NEXT: addi r1, r1, 48229; CHECK-P8-NEXT: ld r0, 16(r1)230; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload231; CHECK-P8-NEXT: mtlr r0232; CHECK-P8-NEXT: blr233entry:234 %conv = uitofp i64 %b to fp128235 store fp128 %conv, ptr %a, align 16236 ret void237 238}239 240; Function Attrs: norecurse nounwind241define void @udwConv2qp_01(ptr nocapture %a, i128 %b) nounwind {242; CHECK-LABEL: udwConv2qp_01:243; CHECK: # %bb.0: # %entry244; CHECK-NEXT: mflr r0245; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill246; CHECK-NEXT: stdu r1, -48(r1)247; CHECK-NEXT: mr r30, r3248; CHECK-NEXT: mr r3, r4249; CHECK-NEXT: mr r4, r5250; CHECK-NEXT: std r0, 64(r1)251; CHECK-NEXT: bl __floatuntikf252; CHECK-NEXT: nop253; CHECK-NEXT: stxv v2, 0(r30)254; CHECK-NEXT: addi r1, r1, 48255; CHECK-NEXT: ld r0, 16(r1)256; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload257; CHECK-NEXT: mtlr r0258; CHECK-NEXT: blr259;260; CHECK-P8-LABEL: udwConv2qp_01:261; CHECK-P8: # %bb.0: # %entry262; CHECK-P8-NEXT: mflr r0263; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill264; CHECK-P8-NEXT: stdu r1, -48(r1)265; CHECK-P8-NEXT: mr r30, r3266; CHECK-P8-NEXT: mr r3, r4267; CHECK-P8-NEXT: std r0, 64(r1)268; CHECK-P8-NEXT: mr r4, r5269; CHECK-P8-NEXT: bl __floatuntikf270; CHECK-P8-NEXT: nop271; CHECK-P8-NEXT: xxswapd vs0, v2272; CHECK-P8-NEXT: stxvd2x vs0, 0, r30273; CHECK-P8-NEXT: addi r1, r1, 48274; CHECK-P8-NEXT: ld r0, 16(r1)275; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload276; CHECK-P8-NEXT: mtlr r0277; CHECK-P8-NEXT: blr278entry:279 %conv = uitofp i128 %b to fp128280 store fp128 %conv, ptr %a, align 16281 ret void282 283}284 285; Function Attrs: norecurse nounwind286define void @udwConv2qp_02(ptr nocapture %a) nounwind {287; CHECK-LABEL: udwConv2qp_02:288; CHECK: # %bb.0: # %entry289; CHECK-NEXT: addis r4, r2, .LC1@toc@ha290; CHECK-NEXT: ld r4, .LC1@toc@l(r4)291; CHECK-NEXT: lxsd v2, 32(r4)292; CHECK-NEXT: xscvudqp v2, v2293; CHECK-NEXT: stxv v2, 0(r3)294; CHECK-NEXT: blr295;296; CHECK-P8-LABEL: udwConv2qp_02:297; CHECK-P8: # %bb.0: # %entry298; CHECK-P8-NEXT: mflr r0299; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill300; CHECK-P8-NEXT: stdu r1, -48(r1)301; CHECK-P8-NEXT: mr r30, r3302; CHECK-P8-NEXT: addis r3, r2, .LC1@toc@ha303; CHECK-P8-NEXT: std r0, 64(r1)304; CHECK-P8-NEXT: ld r3, .LC1@toc@l(r3)305; CHECK-P8-NEXT: ld r3, 32(r3)306; CHECK-P8-NEXT: bl __floatundikf307; CHECK-P8-NEXT: nop308; CHECK-P8-NEXT: xxswapd vs0, v2309; CHECK-P8-NEXT: stxvd2x vs0, 0, r30310; CHECK-P8-NEXT: addi r1, r1, 48311; CHECK-P8-NEXT: ld r0, 16(r1)312; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload313; CHECK-P8-NEXT: mtlr r0314; CHECK-P8-NEXT: blr315entry:316 %i = load i64, ptr getelementptr inbounds317 ([5 x i64], ptr @umem, i64 0, i64 4), align 8318 %conv = uitofp i64 %i to fp128319 store fp128 %conv, ptr %a, align 16320 ret void321 322}323 324; Function Attrs: norecurse nounwind325define void @udwConv2qp_03(ptr nocapture %a, ptr nocapture readonly %b) nounwind {326; CHECK-LABEL: udwConv2qp_03:327; CHECK: # %bb.0: # %entry328; CHECK-NEXT: lxsd v2, 0(r4)329; CHECK-NEXT: xscvudqp v2, v2330; CHECK-NEXT: stxv v2, 0(r3)331; CHECK-NEXT: blr332;333; CHECK-P8-LABEL: udwConv2qp_03:334; CHECK-P8: # %bb.0: # %entry335; CHECK-P8-NEXT: mflr r0336; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill337; CHECK-P8-NEXT: stdu r1, -48(r1)338; CHECK-P8-NEXT: std r0, 64(r1)339; CHECK-P8-NEXT: mr r30, r3340; CHECK-P8-NEXT: ld r3, 0(r4)341; CHECK-P8-NEXT: bl __floatundikf342; CHECK-P8-NEXT: nop343; CHECK-P8-NEXT: xxswapd vs0, v2344; CHECK-P8-NEXT: stxvd2x vs0, 0, r30345; CHECK-P8-NEXT: addi r1, r1, 48346; CHECK-P8-NEXT: ld r0, 16(r1)347; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload348; CHECK-P8-NEXT: mtlr r0349; CHECK-P8-NEXT: blr350entry:351 %i = load i64, ptr %b, align 8352 %conv = uitofp i64 %i to fp128353 store fp128 %conv, ptr %a, align 16354 ret void355 356}357 358; Function Attrs: norecurse nounwind359define void @udwConv2qp_04(ptr nocapture %a, i1 %b) nounwind {360; CHECK-LABEL: udwConv2qp_04:361; CHECK: # %bb.0: # %entry362; CHECK-NEXT: clrlwi r4, r4, 31363; CHECK-NEXT: mtvsrwa v2, r4364; CHECK-NEXT: xscvsdqp v2, v2365; CHECK-NEXT: stxv v2, 0(r3)366; CHECK-NEXT: blr367;368; CHECK-P8-LABEL: udwConv2qp_04:369; CHECK-P8: # %bb.0: # %entry370; CHECK-P8-NEXT: mflr r0371; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill372; CHECK-P8-NEXT: stdu r1, -48(r1)373; CHECK-P8-NEXT: mr r30, r3374; CHECK-P8-NEXT: clrldi r3, r4, 63375; CHECK-P8-NEXT: std r0, 64(r1)376; CHECK-P8-NEXT: bl __floatsikf377; CHECK-P8-NEXT: nop378; CHECK-P8-NEXT: xxswapd vs0, v2379; CHECK-P8-NEXT: stxvd2x vs0, 0, r30380; CHECK-P8-NEXT: addi r1, r1, 48381; CHECK-P8-NEXT: ld r0, 16(r1)382; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload383; CHECK-P8-NEXT: mtlr r0384; CHECK-P8-NEXT: blr385entry:386 %conv = uitofp i1 %b to fp128387 store fp128 %conv, ptr %a, align 16388 ret void389 390}391 392; Function Attrs: norecurse nounwind393define ptr @sdwConv2qp_testXForm(ptr returned %sink,394; CHECK-LABEL: sdwConv2qp_testXForm:395; CHECK: # %bb.0: # %entry396; CHECK-NEXT: lis r5, 1397; CHECK-NEXT: ori r5, r5, 7797398; CHECK-NEXT: lxsdx v2, r4, r5399; CHECK-NEXT: xscvsdqp v2, v2400; CHECK-NEXT: stxv v2, 0(r3)401; CHECK-NEXT: blr402;403; CHECK-P8-LABEL: sdwConv2qp_testXForm:404; CHECK-P8: # %bb.0: # %entry405; CHECK-P8-NEXT: mflr r0406; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill407; CHECK-P8-NEXT: stdu r1, -48(r1)408; CHECK-P8-NEXT: mr r30, r3409; CHECK-P8-NEXT: lis r3, 1410; CHECK-P8-NEXT: std r0, 64(r1)411; CHECK-P8-NEXT: ori r3, r3, 7797412; CHECK-P8-NEXT: ldx r3, r4, r3413; CHECK-P8-NEXT: bl __floatdikf414; CHECK-P8-NEXT: nop415; CHECK-P8-NEXT: xxswapd vs0, v2416; CHECK-P8-NEXT: mr r3, r30417; CHECK-P8-NEXT: stxvd2x vs0, 0, r30418; CHECK-P8-NEXT: addi r1, r1, 48419; CHECK-P8-NEXT: ld r0, 16(r1)420; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload421; CHECK-P8-NEXT: mtlr r0422; CHECK-P8-NEXT: blr423 ptr nocapture readonly %a) nounwind {424entry:425 %add.ptr = getelementptr inbounds i8, ptr %a, i64 73333426 %i = load i64, ptr %add.ptr, align 8427 %conv = sitofp i64 %i to fp128428 store fp128 %conv, ptr %sink, align 16429 ret ptr %sink430 431}432 433; Function Attrs: norecurse nounwind434define ptr @udwConv2qp_testXForm(ptr returned %sink,435; CHECK-LABEL: udwConv2qp_testXForm:436; CHECK: # %bb.0: # %entry437; CHECK-NEXT: lis r5, 1438; CHECK-NEXT: ori r5, r5, 7797439; CHECK-NEXT: lxsdx v2, r4, r5440; CHECK-NEXT: xscvudqp v2, v2441; CHECK-NEXT: stxv v2, 0(r3)442; CHECK-NEXT: blr443;444; CHECK-P8-LABEL: udwConv2qp_testXForm:445; CHECK-P8: # %bb.0: # %entry446; CHECK-P8-NEXT: mflr r0447; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill448; CHECK-P8-NEXT: stdu r1, -48(r1)449; CHECK-P8-NEXT: mr r30, r3450; CHECK-P8-NEXT: lis r3, 1451; CHECK-P8-NEXT: std r0, 64(r1)452; CHECK-P8-NEXT: ori r3, r3, 7797453; CHECK-P8-NEXT: ldx r3, r4, r3454; CHECK-P8-NEXT: bl __floatundikf455; CHECK-P8-NEXT: nop456; CHECK-P8-NEXT: xxswapd vs0, v2457; CHECK-P8-NEXT: mr r3, r30458; CHECK-P8-NEXT: stxvd2x vs0, 0, r30459; CHECK-P8-NEXT: addi r1, r1, 48460; CHECK-P8-NEXT: ld r0, 16(r1)461; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload462; CHECK-P8-NEXT: mtlr r0463; CHECK-P8-NEXT: blr464 ptr nocapture readonly %a) nounwind {465entry:466 %add.ptr = getelementptr inbounds i8, ptr %a, i64 73333467 %i = load i64, ptr %add.ptr, align 8468 %conv = uitofp i64 %i to fp128469 store fp128 %conv, ptr %sink, align 16470 ret ptr %sink471 472}473 474; Function Attrs: norecurse nounwind475define void @swConv2qp(ptr nocapture %a, i32 signext %b) nounwind {476; CHECK-LABEL: swConv2qp:477; CHECK: # %bb.0: # %entry478; CHECK-NEXT: mtvsrwa v2, r4479; CHECK-NEXT: xscvsdqp v2, v2480; CHECK-NEXT: stxv v2, 0(r3)481; CHECK-NEXT: blr482;483; CHECK-P8-LABEL: swConv2qp:484; CHECK-P8: # %bb.0: # %entry485; CHECK-P8-NEXT: mflr r0486; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill487; CHECK-P8-NEXT: stdu r1, -48(r1)488; CHECK-P8-NEXT: mr r30, r3489; CHECK-P8-NEXT: mr r3, r4490; CHECK-P8-NEXT: std r0, 64(r1)491; CHECK-P8-NEXT: bl __floatsikf492; CHECK-P8-NEXT: nop493; CHECK-P8-NEXT: xxswapd vs0, v2494; CHECK-P8-NEXT: stxvd2x vs0, 0, r30495; CHECK-P8-NEXT: addi r1, r1, 48496; CHECK-P8-NEXT: ld r0, 16(r1)497; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload498; CHECK-P8-NEXT: mtlr r0499; CHECK-P8-NEXT: blr500entry:501 %conv = sitofp i32 %b to fp128502 store fp128 %conv, ptr %a, align 16503 ret void504 505}506 507; Function Attrs: norecurse nounwind508define void @swConv2qp_02(ptr nocapture %a, ptr nocapture readonly %b) nounwind {509; CHECK-LABEL: swConv2qp_02:510; CHECK: # %bb.0: # %entry511; CHECK-NEXT: lxsiwax v2, 0, r4512; CHECK-NEXT: xscvsdqp v2, v2513; CHECK-NEXT: stxv v2, 0(r3)514; CHECK-NEXT: blr515;516; CHECK-P8-LABEL: swConv2qp_02:517; CHECK-P8: # %bb.0: # %entry518; CHECK-P8-NEXT: mflr r0519; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill520; CHECK-P8-NEXT: stdu r1, -48(r1)521; CHECK-P8-NEXT: std r0, 64(r1)522; CHECK-P8-NEXT: mr r30, r3523; CHECK-P8-NEXT: lwa r3, 0(r4)524; CHECK-P8-NEXT: bl __floatsikf525; CHECK-P8-NEXT: nop526; CHECK-P8-NEXT: xxswapd vs0, v2527; CHECK-P8-NEXT: stxvd2x vs0, 0, r30528; CHECK-P8-NEXT: addi r1, r1, 48529; CHECK-P8-NEXT: ld r0, 16(r1)530; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload531; CHECK-P8-NEXT: mtlr r0532; CHECK-P8-NEXT: blr533entry:534 %i = load i32, ptr %b, align 4535 %conv = sitofp i32 %i to fp128536 store fp128 %conv, ptr %a, align 16537 ret void538 539}540 541; Function Attrs: norecurse nounwind542define void @swConv2qp_03(ptr nocapture %a) nounwind {543; CHECK-LABEL: swConv2qp_03:544; CHECK: # %bb.0: # %entry545; CHECK-NEXT: addis r4, r2, .LC2@toc@ha546; CHECK-NEXT: ld r4, .LC2@toc@l(r4)547; CHECK-NEXT: addi r4, r4, 12548; CHECK-NEXT: lxsiwax v2, 0, r4549; CHECK-NEXT: xscvsdqp v2, v2550; CHECK-NEXT: stxv v2, 0(r3)551; CHECK-NEXT: blr552;553; CHECK-P8-LABEL: swConv2qp_03:554; CHECK-P8: # %bb.0: # %entry555; CHECK-P8-NEXT: mflr r0556; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill557; CHECK-P8-NEXT: stdu r1, -48(r1)558; CHECK-P8-NEXT: mr r30, r3559; CHECK-P8-NEXT: addis r3, r2, .LC2@toc@ha560; CHECK-P8-NEXT: std r0, 64(r1)561; CHECK-P8-NEXT: ld r3, .LC2@toc@l(r3)562; CHECK-P8-NEXT: lwa r3, 12(r3)563; CHECK-P8-NEXT: bl __floatsikf564; CHECK-P8-NEXT: nop565; CHECK-P8-NEXT: xxswapd vs0, v2566; CHECK-P8-NEXT: stxvd2x vs0, 0, r30567; CHECK-P8-NEXT: addi r1, r1, 48568; CHECK-P8-NEXT: ld r0, 16(r1)569; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload570; CHECK-P8-NEXT: mtlr r0571; CHECK-P8-NEXT: blr572entry:573 %i = load i32, ptr getelementptr inbounds574 ([5 x i32], ptr @swMem, i64 0, i64 3), align 4575 %conv = sitofp i32 %i to fp128576 store fp128 %conv, ptr %a, align 16577 ret void578 579}580 581; Function Attrs: norecurse nounwind582define void @uwConv2qp(ptr nocapture %a, i32 zeroext %b) nounwind {583; CHECK-LABEL: uwConv2qp:584; CHECK: # %bb.0: # %entry585; CHECK-NEXT: mtvsrwz v2, r4586; CHECK-NEXT: xscvudqp v2, v2587; CHECK-NEXT: stxv v2, 0(r3)588; CHECK-NEXT: blr589;590; CHECK-P8-LABEL: uwConv2qp:591; CHECK-P8: # %bb.0: # %entry592; CHECK-P8-NEXT: mflr r0593; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill594; CHECK-P8-NEXT: stdu r1, -48(r1)595; CHECK-P8-NEXT: mr r30, r3596; CHECK-P8-NEXT: mr r3, r4597; CHECK-P8-NEXT: std r0, 64(r1)598; CHECK-P8-NEXT: bl __floatunsikf599; CHECK-P8-NEXT: nop600; CHECK-P8-NEXT: xxswapd vs0, v2601; CHECK-P8-NEXT: stxvd2x vs0, 0, r30602; CHECK-P8-NEXT: addi r1, r1, 48603; CHECK-P8-NEXT: ld r0, 16(r1)604; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload605; CHECK-P8-NEXT: mtlr r0606; CHECK-P8-NEXT: blr607entry:608 %conv = uitofp i32 %b to fp128609 store fp128 %conv, ptr %a, align 16610 ret void611 612}613 614; Function Attrs: norecurse nounwind615define void @uwConv2qp_02(ptr nocapture %a, ptr nocapture readonly %b) nounwind {616; CHECK-LABEL: uwConv2qp_02:617; CHECK: # %bb.0: # %entry618; CHECK-NEXT: lxsiwzx v2, 0, r4619; CHECK-NEXT: xscvudqp v2, v2620; CHECK-NEXT: stxv v2, 0(r3)621; CHECK-NEXT: blr622;623; CHECK-P8-LABEL: uwConv2qp_02:624; CHECK-P8: # %bb.0: # %entry625; CHECK-P8-NEXT: mflr r0626; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill627; CHECK-P8-NEXT: stdu r1, -48(r1)628; CHECK-P8-NEXT: std r0, 64(r1)629; CHECK-P8-NEXT: mr r30, r3630; CHECK-P8-NEXT: lwz r3, 0(r4)631; CHECK-P8-NEXT: bl __floatunsikf632; CHECK-P8-NEXT: nop633; CHECK-P8-NEXT: xxswapd vs0, v2634; CHECK-P8-NEXT: stxvd2x vs0, 0, r30635; CHECK-P8-NEXT: addi r1, r1, 48636; CHECK-P8-NEXT: ld r0, 16(r1)637; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload638; CHECK-P8-NEXT: mtlr r0639; CHECK-P8-NEXT: blr640entry:641 %i = load i32, ptr %b, align 4642 %conv = uitofp i32 %i to fp128643 store fp128 %conv, ptr %a, align 16644 ret void645 646}647 648; Function Attrs: norecurse nounwind649define void @uwConv2qp_03(ptr nocapture %a) nounwind {650; CHECK-LABEL: uwConv2qp_03:651; CHECK: # %bb.0: # %entry652; CHECK-NEXT: addis r4, r2, .LC3@toc@ha653; CHECK-NEXT: ld r4, .LC3@toc@l(r4)654; CHECK-NEXT: addi r4, r4, 12655; CHECK-NEXT: lxsiwzx v2, 0, r4656; CHECK-NEXT: xscvudqp v2, v2657; CHECK-NEXT: stxv v2, 0(r3)658; CHECK-NEXT: blr659;660; CHECK-P8-LABEL: uwConv2qp_03:661; CHECK-P8: # %bb.0: # %entry662; CHECK-P8-NEXT: mflr r0663; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill664; CHECK-P8-NEXT: stdu r1, -48(r1)665; CHECK-P8-NEXT: mr r30, r3666; CHECK-P8-NEXT: addis r3, r2, .LC3@toc@ha667; CHECK-P8-NEXT: std r0, 64(r1)668; CHECK-P8-NEXT: ld r3, .LC3@toc@l(r3)669; CHECK-P8-NEXT: lwz r3, 12(r3)670; CHECK-P8-NEXT: bl __floatunsikf671; CHECK-P8-NEXT: nop672; CHECK-P8-NEXT: xxswapd vs0, v2673; CHECK-P8-NEXT: stxvd2x vs0, 0, r30674; CHECK-P8-NEXT: addi r1, r1, 48675; CHECK-P8-NEXT: ld r0, 16(r1)676; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload677; CHECK-P8-NEXT: mtlr r0678; CHECK-P8-NEXT: blr679entry:680 %i = load i32, ptr getelementptr inbounds681 ([5 x i32], ptr @uwMem, i64 0, i64 3), align 4682 %conv = uitofp i32 %i to fp128683 store fp128 %conv, ptr %a, align 16684 ret void685 686}687 688; Function Attrs: norecurse nounwind689define void @uwConv2qp_04(ptr nocapture %a,690; CHECK-LABEL: uwConv2qp_04:691; CHECK: # %bb.0: # %entry692; CHECK-NEXT: lwz r5, 0(r5)693; CHECK-NEXT: add r4, r5, r4694; CHECK-NEXT: mtvsrwz v2, r4695; CHECK-NEXT: xscvudqp v2, v2696; CHECK-NEXT: stxv v2, 0(r3)697; CHECK-NEXT: blr698;699; CHECK-P8-LABEL: uwConv2qp_04:700; CHECK-P8: # %bb.0: # %entry701; CHECK-P8-NEXT: mflr r0702; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill703; CHECK-P8-NEXT: stdu r1, -48(r1)704; CHECK-P8-NEXT: std r0, 64(r1)705; CHECK-P8-NEXT: mr r30, r3706; CHECK-P8-NEXT: lwz r3, 0(r5)707; CHECK-P8-NEXT: add r3, r3, r4708; CHECK-P8-NEXT: clrldi r3, r3, 32709; CHECK-P8-NEXT: bl __floatunsikf710; CHECK-P8-NEXT: nop711; CHECK-P8-NEXT: xxswapd vs0, v2712; CHECK-P8-NEXT: stxvd2x vs0, 0, r30713; CHECK-P8-NEXT: addi r1, r1, 48714; CHECK-P8-NEXT: ld r0, 16(r1)715; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload716; CHECK-P8-NEXT: mtlr r0717; CHECK-P8-NEXT: blr718 i32 zeroext %b, ptr nocapture readonly %c) nounwind {719entry:720 %i = load i32, ptr %c, align 4721 %add = add i32 %i, %b722 %conv = uitofp i32 %add to fp128723 store fp128 %conv, ptr %a, align 16724 ret void725 726}727 728; Function Attrs: norecurse nounwind729define void @uhwConv2qp(ptr nocapture %a, i16 zeroext %b) nounwind {730; CHECK-LABEL: uhwConv2qp:731; CHECK: # %bb.0: # %entry732; CHECK-NEXT: mtvsrwz v2, r4733; CHECK-NEXT: xscvudqp v2, v2734; CHECK-NEXT: stxv v2, 0(r3)735; CHECK-NEXT: blr736;737; CHECK-P8-LABEL: uhwConv2qp:738; CHECK-P8: # %bb.0: # %entry739; CHECK-P8-NEXT: mflr r0740; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill741; CHECK-P8-NEXT: stdu r1, -48(r1)742; CHECK-P8-NEXT: mr r30, r3743; CHECK-P8-NEXT: mr r3, r4744; CHECK-P8-NEXT: std r0, 64(r1)745; CHECK-P8-NEXT: bl __floatunsikf746; CHECK-P8-NEXT: nop747; CHECK-P8-NEXT: xxswapd vs0, v2748; CHECK-P8-NEXT: stxvd2x vs0, 0, r30749; CHECK-P8-NEXT: addi r1, r1, 48750; CHECK-P8-NEXT: ld r0, 16(r1)751; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload752; CHECK-P8-NEXT: mtlr r0753; CHECK-P8-NEXT: blr754entry:755 %conv = uitofp i16 %b to fp128756 store fp128 %conv, ptr %a, align 16757 ret void758 759 760}761 762; Function Attrs: norecurse nounwind763define void @uhwConv2qp_02(ptr nocapture %a, ptr nocapture readonly %b) nounwind {764; CHECK-LABEL: uhwConv2qp_02:765; CHECK: # %bb.0: # %entry766; CHECK-NEXT: lxsihzx v2, 0, r4767; CHECK-NEXT: xscvudqp v2, v2768; CHECK-NEXT: stxv v2, 0(r3)769; CHECK-NEXT: blr770;771; CHECK-P8-LABEL: uhwConv2qp_02:772; CHECK-P8: # %bb.0: # %entry773; CHECK-P8-NEXT: mflr r0774; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill775; CHECK-P8-NEXT: stdu r1, -48(r1)776; CHECK-P8-NEXT: std r0, 64(r1)777; CHECK-P8-NEXT: mr r30, r3778; CHECK-P8-NEXT: lhz r3, 0(r4)779; CHECK-P8-NEXT: bl __floatunsikf780; CHECK-P8-NEXT: nop781; CHECK-P8-NEXT: xxswapd vs0, v2782; CHECK-P8-NEXT: stxvd2x vs0, 0, r30783; CHECK-P8-NEXT: addi r1, r1, 48784; CHECK-P8-NEXT: ld r0, 16(r1)785; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload786; CHECK-P8-NEXT: mtlr r0787; CHECK-P8-NEXT: blr788entry:789 %i = load i16, ptr %b, align 2790 %conv = uitofp i16 %i to fp128791 store fp128 %conv, ptr %a, align 16792 ret void793 794}795 796; Function Attrs: norecurse nounwind797define void @uhwConv2qp_03(ptr nocapture %a) nounwind {798; CHECK-LABEL: uhwConv2qp_03:799; CHECK: # %bb.0: # %entry800; CHECK-NEXT: addis r4, r2, .LC4@toc@ha801; CHECK-NEXT: ld r4, .LC4@toc@l(r4)802; CHECK-NEXT: addi r4, r4, 6803; CHECK-NEXT: lxsihzx v2, 0, r4804; CHECK-NEXT: xscvudqp v2, v2805; CHECK-NEXT: stxv v2, 0(r3)806; CHECK-NEXT: blr807;808; CHECK-P8-LABEL: uhwConv2qp_03:809; CHECK-P8: # %bb.0: # %entry810; CHECK-P8-NEXT: mflr r0811; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill812; CHECK-P8-NEXT: stdu r1, -48(r1)813; CHECK-P8-NEXT: mr r30, r3814; CHECK-P8-NEXT: addis r3, r2, .LC4@toc@ha815; CHECK-P8-NEXT: std r0, 64(r1)816; CHECK-P8-NEXT: ld r3, .LC4@toc@l(r3)817; CHECK-P8-NEXT: lhz r3, 6(r3)818; CHECK-P8-NEXT: bl __floatunsikf819; CHECK-P8-NEXT: nop820; CHECK-P8-NEXT: xxswapd vs0, v2821; CHECK-P8-NEXT: stxvd2x vs0, 0, r30822; CHECK-P8-NEXT: addi r1, r1, 48823; CHECK-P8-NEXT: ld r0, 16(r1)824; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload825; CHECK-P8-NEXT: mtlr r0826; CHECK-P8-NEXT: blr827entry:828 %i = load i16, ptr getelementptr inbounds829 ([5 x i16], ptr @uhwMem, i64 0, i64 3), align 2830 %conv = uitofp i16 %i to fp128831 store fp128 %conv, ptr %a, align 16832 ret void833 834}835 836; Function Attrs: norecurse nounwind837define void @uhwConv2qp_04(ptr nocapture %a, i16 zeroext %b,838; CHECK-LABEL: uhwConv2qp_04:839; CHECK: # %bb.0: # %entry840; CHECK-NEXT: lhz r5, 0(r5)841; CHECK-NEXT: add r4, r5, r4842; CHECK-NEXT: mtvsrwa v2, r4843; CHECK-NEXT: xscvsdqp v2, v2844; CHECK-NEXT: stxv v2, 0(r3)845; CHECK-NEXT: blr846;847; CHECK-P8-LABEL: uhwConv2qp_04:848; CHECK-P8: # %bb.0: # %entry849; CHECK-P8-NEXT: mflr r0850; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill851; CHECK-P8-NEXT: stdu r1, -48(r1)852; CHECK-P8-NEXT: std r0, 64(r1)853; CHECK-P8-NEXT: mr r30, r3854; CHECK-P8-NEXT: lhz r3, 0(r5)855; CHECK-P8-NEXT: add r3, r3, r4856; CHECK-P8-NEXT: clrldi r3, r3, 32857; CHECK-P8-NEXT: bl __floatsikf858; CHECK-P8-NEXT: nop859; CHECK-P8-NEXT: xxswapd vs0, v2860; CHECK-P8-NEXT: stxvd2x vs0, 0, r30861; CHECK-P8-NEXT: addi r1, r1, 48862; CHECK-P8-NEXT: ld r0, 16(r1)863; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload864; CHECK-P8-NEXT: mtlr r0865; CHECK-P8-NEXT: blr866 ptr nocapture readonly %c) nounwind {867entry:868 %conv = zext i16 %b to i32869 %i = load i16, ptr %c, align 2870 %conv1 = zext i16 %i to i32871 %add = add nuw nsw i32 %conv1, %conv872 %conv2 = sitofp i32 %add to fp128873 store fp128 %conv2, ptr %a, align 16874 ret void875 876}877 878; Function Attrs: norecurse nounwind879define void @ubConv2qp(ptr nocapture %a, i8 zeroext %b) nounwind {880; CHECK-LABEL: ubConv2qp:881; CHECK: # %bb.0: # %entry882; CHECK-NEXT: mtvsrwz v2, r4883; CHECK-NEXT: xscvudqp v2, v2884; CHECK-NEXT: stxv v2, 0(r3)885; CHECK-NEXT: blr886;887; CHECK-P8-LABEL: ubConv2qp:888; CHECK-P8: # %bb.0: # %entry889; CHECK-P8-NEXT: mflr r0890; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill891; CHECK-P8-NEXT: stdu r1, -48(r1)892; CHECK-P8-NEXT: mr r30, r3893; CHECK-P8-NEXT: mr r3, r4894; CHECK-P8-NEXT: std r0, 64(r1)895; CHECK-P8-NEXT: bl __floatunsikf896; CHECK-P8-NEXT: nop897; CHECK-P8-NEXT: xxswapd vs0, v2898; CHECK-P8-NEXT: stxvd2x vs0, 0, r30899; CHECK-P8-NEXT: addi r1, r1, 48900; CHECK-P8-NEXT: ld r0, 16(r1)901; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload902; CHECK-P8-NEXT: mtlr r0903; CHECK-P8-NEXT: blr904entry:905 %conv = uitofp i8 %b to fp128906 store fp128 %conv, ptr %a, align 16907 ret void908 909}910 911; Function Attrs: norecurse nounwind912define void @ubConv2qp_02(ptr nocapture %a, ptr nocapture readonly %b) nounwind {913; CHECK-LABEL: ubConv2qp_02:914; CHECK: # %bb.0: # %entry915; CHECK-NEXT: lxsibzx v2, 0, r4916; CHECK-NEXT: xscvudqp v2, v2917; CHECK-NEXT: stxv v2, 0(r3)918; CHECK-NEXT: blr919;920; CHECK-P8-LABEL: ubConv2qp_02:921; CHECK-P8: # %bb.0: # %entry922; CHECK-P8-NEXT: mflr r0923; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill924; CHECK-P8-NEXT: stdu r1, -48(r1)925; CHECK-P8-NEXT: std r0, 64(r1)926; CHECK-P8-NEXT: mr r30, r3927; CHECK-P8-NEXT: lbz r3, 0(r4)928; CHECK-P8-NEXT: bl __floatunsikf929; CHECK-P8-NEXT: nop930; CHECK-P8-NEXT: xxswapd vs0, v2931; CHECK-P8-NEXT: stxvd2x vs0, 0, r30932; CHECK-P8-NEXT: addi r1, r1, 48933; CHECK-P8-NEXT: ld r0, 16(r1)934; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload935; CHECK-P8-NEXT: mtlr r0936; CHECK-P8-NEXT: blr937entry:938 %i = load i8, ptr %b, align 1939 %conv = uitofp i8 %i to fp128940 store fp128 %conv, ptr %a, align 16941 ret void942 943}944 945; Function Attrs: norecurse nounwind946define void @ubConv2qp_03(ptr nocapture %a) nounwind {947; CHECK-LABEL: ubConv2qp_03:948; CHECK: # %bb.0: # %entry949; CHECK-NEXT: addis r4, r2, .LC5@toc@ha950; CHECK-NEXT: ld r4, .LC5@toc@l(r4)951; CHECK-NEXT: addi r4, r4, 2952; CHECK-NEXT: lxsibzx v2, 0, r4953; CHECK-NEXT: xscvudqp v2, v2954; CHECK-NEXT: stxv v2, 0(r3)955; CHECK-NEXT: blr956;957; CHECK-P8-LABEL: ubConv2qp_03:958; CHECK-P8: # %bb.0: # %entry959; CHECK-P8-NEXT: mflr r0960; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill961; CHECK-P8-NEXT: stdu r1, -48(r1)962; CHECK-P8-NEXT: mr r30, r3963; CHECK-P8-NEXT: addis r3, r2, .LC5@toc@ha964; CHECK-P8-NEXT: std r0, 64(r1)965; CHECK-P8-NEXT: ld r3, .LC5@toc@l(r3)966; CHECK-P8-NEXT: lbz r3, 2(r3)967; CHECK-P8-NEXT: bl __floatunsikf968; CHECK-P8-NEXT: nop969; CHECK-P8-NEXT: xxswapd vs0, v2970; CHECK-P8-NEXT: stxvd2x vs0, 0, r30971; CHECK-P8-NEXT: addi r1, r1, 48972; CHECK-P8-NEXT: ld r0, 16(r1)973; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload974; CHECK-P8-NEXT: mtlr r0975; CHECK-P8-NEXT: blr976entry:977 %i = load i8, ptr getelementptr inbounds978 ([5 x i8], ptr @ubMem, i64 0, i64 2), align 1979 %conv = uitofp i8 %i to fp128980 store fp128 %conv, ptr %a, align 16981 ret void982 983}984 985; Function Attrs: norecurse nounwind986define void @ubConv2qp_04(ptr nocapture %a, i8 zeroext %b,987; CHECK-LABEL: ubConv2qp_04:988; CHECK: # %bb.0: # %entry989; CHECK-NEXT: lbz r5, 0(r5)990; CHECK-NEXT: add r4, r5, r4991; CHECK-NEXT: mtvsrwa v2, r4992; CHECK-NEXT: xscvsdqp v2, v2993; CHECK-NEXT: stxv v2, 0(r3)994; CHECK-NEXT: blr995;996; CHECK-P8-LABEL: ubConv2qp_04:997; CHECK-P8: # %bb.0: # %entry998; CHECK-P8-NEXT: mflr r0999; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1000; CHECK-P8-NEXT: stdu r1, -48(r1)1001; CHECK-P8-NEXT: std r0, 64(r1)1002; CHECK-P8-NEXT: mr r30, r31003; CHECK-P8-NEXT: lbz r3, 0(r5)1004; CHECK-P8-NEXT: add r3, r3, r41005; CHECK-P8-NEXT: clrldi r3, r3, 321006; CHECK-P8-NEXT: bl __floatsikf1007; CHECK-P8-NEXT: nop1008; CHECK-P8-NEXT: xxswapd vs0, v21009; CHECK-P8-NEXT: stxvd2x vs0, 0, r301010; CHECK-P8-NEXT: addi r1, r1, 481011; CHECK-P8-NEXT: ld r0, 16(r1)1012; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1013; CHECK-P8-NEXT: mtlr r01014; CHECK-P8-NEXT: blr1015 ptr nocapture readonly %c) nounwind {1016entry:1017 %conv = zext i8 %b to i321018 %i = load i8, ptr %c, align 11019 %conv1 = zext i8 %i to i321020 %add = add nuw nsw i32 %conv1, %conv1021 %conv2 = sitofp i32 %add to fp1281022 store fp128 %conv2, ptr %a, align 161023 ret void1024 1025}1026 1027; Convert QP to DP1028 1029@f128Array = global [4 x fp128]1030 [fp128 0xL00000000000000004004C00000000000,1031 fp128 0xLF000000000000000400808AB851EB851,1032 fp128 0xL5000000000000000400E0C26324C8366,1033 fp128 0xL8000000000000000400A24E2E147AE14], align 161034@f128global = global fp128 0xL300000000000000040089CA8F5C28F5C, align 161035 1036; Function Attrs: norecurse nounwind readonly1037define double @qpConv2dp(ptr nocapture readonly %a) nounwind {1038; CHECK-LABEL: qpConv2dp:1039; CHECK: # %bb.0: # %entry1040; CHECK-NEXT: lxv v2, 0(r3)1041; CHECK-NEXT: xscvqpdp v2, v21042; CHECK-NEXT: xscpsgndp f1, v2, v21043; CHECK-NEXT: blr1044;1045; CHECK-P8-LABEL: qpConv2dp:1046; CHECK-P8: # %bb.0: # %entry1047; CHECK-P8-NEXT: mflr r01048; CHECK-P8-NEXT: stdu r1, -32(r1)1049; CHECK-P8-NEXT: std r0, 48(r1)1050; CHECK-P8-NEXT: lxvd2x vs0, 0, r31051; CHECK-P8-NEXT: xxswapd v2, vs01052; CHECK-P8-NEXT: bl __trunckfdf21053; CHECK-P8-NEXT: nop1054; CHECK-P8-NEXT: addi r1, r1, 321055; CHECK-P8-NEXT: ld r0, 16(r1)1056; CHECK-P8-NEXT: mtlr r01057; CHECK-P8-NEXT: blr1058entry:1059 %i = load fp128, ptr %a, align 161060 %conv = fptrunc fp128 %i to double1061 ret double %conv1062}1063 1064; Function Attrs: norecurse nounwind1065define void @qpConv2dp_02(ptr nocapture %res) nounwind {1066; CHECK-LABEL: qpConv2dp_02:1067; CHECK: # %bb.0: # %entry1068; CHECK-NEXT: addis r4, r2, .LC6@toc@ha1069; CHECK-NEXT: ld r4, .LC6@toc@l(r4)1070; CHECK-NEXT: lxv v2, 0(r4)1071; CHECK-NEXT: xscvqpdp v2, v21072; CHECK-NEXT: stxsd v2, 0(r3)1073; CHECK-NEXT: blr1074;1075; CHECK-P8-LABEL: qpConv2dp_02:1076; CHECK-P8: # %bb.0: # %entry1077; CHECK-P8-NEXT: mflr r01078; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1079; CHECK-P8-NEXT: stdu r1, -48(r1)1080; CHECK-P8-NEXT: mr r30, r31081; CHECK-P8-NEXT: addis r3, r2, .LC6@toc@ha1082; CHECK-P8-NEXT: std r0, 64(r1)1083; CHECK-P8-NEXT: ld r3, .LC6@toc@l(r3)1084; CHECK-P8-NEXT: lxvd2x vs0, 0, r31085; CHECK-P8-NEXT: xxswapd v2, vs01086; CHECK-P8-NEXT: bl __trunckfdf21087; CHECK-P8-NEXT: nop1088; CHECK-P8-NEXT: stfd f1, 0(r30)1089; CHECK-P8-NEXT: addi r1, r1, 481090; CHECK-P8-NEXT: ld r0, 16(r1)1091; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1092; CHECK-P8-NEXT: mtlr r01093; CHECK-P8-NEXT: blr1094entry:1095 %i = load fp128, ptr @f128global, align 161096 %conv = fptrunc fp128 %i to double1097 store double %conv, ptr %res, align 81098 ret void1099}1100 1101; Function Attrs: norecurse nounwind1102define void @qpConv2dp_03(ptr nocapture %res, i32 signext %idx) nounwind {1103; CHECK-LABEL: qpConv2dp_03:1104; CHECK: # %bb.0: # %entry1105; CHECK-NEXT: addis r5, r2, .LC7@toc@ha1106; CHECK-NEXT: sldi r4, r4, 31107; CHECK-NEXT: ld r5, .LC7@toc@l(r5)1108; CHECK-NEXT: lxv v2, 0(r5)1109; CHECK-NEXT: xscvqpdp v2, v21110; CHECK-NEXT: stxsdx v2, r3, r41111; CHECK-NEXT: blr1112;1113; CHECK-P8-LABEL: qpConv2dp_03:1114; CHECK-P8: # %bb.0: # %entry1115; CHECK-P8-NEXT: mflr r01116; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill1117; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1118; CHECK-P8-NEXT: stdu r1, -64(r1)1119; CHECK-P8-NEXT: mr r29, r31120; CHECK-P8-NEXT: addis r3, r2, .LC7@toc@ha1121; CHECK-P8-NEXT: std r0, 80(r1)1122; CHECK-P8-NEXT: mr r30, r41123; CHECK-P8-NEXT: ld r3, .LC7@toc@l(r3)1124; CHECK-P8-NEXT: lxvd2x vs0, 0, r31125; CHECK-P8-NEXT: xxswapd v2, vs01126; CHECK-P8-NEXT: bl __trunckfdf21127; CHECK-P8-NEXT: nop1128; CHECK-P8-NEXT: sldi r3, r30, 31129; CHECK-P8-NEXT: stfdx f1, r29, r31130; CHECK-P8-NEXT: addi r1, r1, 641131; CHECK-P8-NEXT: ld r0, 16(r1)1132; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1133; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload1134; CHECK-P8-NEXT: mtlr r01135; CHECK-P8-NEXT: blr1136entry:1137 %i = load fp128, ptr @f128Array, align 161138 %conv = fptrunc fp128 %i to double1139 %idxprom = sext i32 %idx to i641140 %arrayidx = getelementptr inbounds double, ptr %res, i64 %idxprom1141 store double %conv, ptr %arrayidx, align 81142 ret void1143}1144 1145; Function Attrs: norecurse nounwind1146define void @qpConv2dp_04(ptr nocapture readonly %a, ptr nocapture readonly %b,1147; CHECK-LABEL: qpConv2dp_04:1148; CHECK: # %bb.0: # %entry1149; CHECK-NEXT: lxv v2, 0(r3)1150; CHECK-NEXT: lxv v3, 0(r4)1151; CHECK-NEXT: xsaddqp v2, v2, v31152; CHECK-NEXT: xscvqpdp v2, v21153; CHECK-NEXT: stxsd v2, 0(r5)1154; CHECK-NEXT: blr1155;1156; CHECK-P8-LABEL: qpConv2dp_04:1157; CHECK-P8: # %bb.0: # %entry1158; CHECK-P8-NEXT: mflr r01159; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1160; CHECK-P8-NEXT: stdu r1, -48(r1)1161; CHECK-P8-NEXT: std r0, 64(r1)1162; CHECK-P8-NEXT: mr r30, r51163; CHECK-P8-NEXT: lxvd2x vs0, 0, r31164; CHECK-P8-NEXT: xxswapd v2, vs01165; CHECK-P8-NEXT: lxvd2x vs0, 0, r41166; CHECK-P8-NEXT: xxswapd v3, vs01167; CHECK-P8-NEXT: bl __addkf31168; CHECK-P8-NEXT: nop1169; CHECK-P8-NEXT: bl __trunckfdf21170; CHECK-P8-NEXT: nop1171; CHECK-P8-NEXT: stfd f1, 0(r30)1172; CHECK-P8-NEXT: addi r1, r1, 481173; CHECK-P8-NEXT: ld r0, 16(r1)1174; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1175; CHECK-P8-NEXT: mtlr r01176; CHECK-P8-NEXT: blr1177 ptr nocapture %res) nounwind {1178entry:1179 %i = load fp128, ptr %a, align 161180 %1 = load fp128, ptr %b, align 161181 %add = fadd fp128 %i, %11182 %conv = fptrunc fp128 %add to double1183 store double %conv, ptr %res, align 81184 ret void1185}1186 1187; Convert QP to SP1188 1189; Function Attrs: norecurse nounwind readonly1190define float @qpConv2sp(ptr nocapture readonly %a) nounwind {1191; CHECK-LABEL: qpConv2sp:1192; CHECK: # %bb.0: # %entry1193; CHECK-NEXT: lxv v2, 0(r3)1194; CHECK-NEXT: xscvqpdpo v2, v21195; CHECK-NEXT: xsrsp f1, v21196; CHECK-NEXT: blr1197;1198; CHECK-P8-LABEL: qpConv2sp:1199; CHECK-P8: # %bb.0: # %entry1200; CHECK-P8-NEXT: mflr r01201; CHECK-P8-NEXT: stdu r1, -32(r1)1202; CHECK-P8-NEXT: std r0, 48(r1)1203; CHECK-P8-NEXT: lxvd2x vs0, 0, r31204; CHECK-P8-NEXT: xxswapd v2, vs01205; CHECK-P8-NEXT: bl __trunckfsf21206; CHECK-P8-NEXT: nop1207; CHECK-P8-NEXT: addi r1, r1, 321208; CHECK-P8-NEXT: ld r0, 16(r1)1209; CHECK-P8-NEXT: mtlr r01210; CHECK-P8-NEXT: blr1211entry:1212 %i = load fp128, ptr %a, align 161213 %conv = fptrunc fp128 %i to float1214 ret float %conv1215}1216 1217; Function Attrs: norecurse nounwind1218define void @qpConv2sp_02(ptr nocapture %res) nounwind {1219; CHECK-LABEL: qpConv2sp_02:1220; CHECK: # %bb.0: # %entry1221; CHECK-NEXT: addis r4, r2, .LC6@toc@ha1222; CHECK-NEXT: ld r4, .LC6@toc@l(r4)1223; CHECK-NEXT: lxv v2, 0(r4)1224; CHECK-NEXT: xscvqpdpo v2, v21225; CHECK-NEXT: xsrsp f0, v21226; CHECK-NEXT: stfs f0, 0(r3)1227; CHECK-NEXT: blr1228;1229; CHECK-P8-LABEL: qpConv2sp_02:1230; CHECK-P8: # %bb.0: # %entry1231; CHECK-P8-NEXT: mflr r01232; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1233; CHECK-P8-NEXT: stdu r1, -48(r1)1234; CHECK-P8-NEXT: mr r30, r31235; CHECK-P8-NEXT: addis r3, r2, .LC6@toc@ha1236; CHECK-P8-NEXT: std r0, 64(r1)1237; CHECK-P8-NEXT: ld r3, .LC6@toc@l(r3)1238; CHECK-P8-NEXT: lxvd2x vs0, 0, r31239; CHECK-P8-NEXT: xxswapd v2, vs01240; CHECK-P8-NEXT: bl __trunckfsf21241; CHECK-P8-NEXT: nop1242; CHECK-P8-NEXT: stfs f1, 0(r30)1243; CHECK-P8-NEXT: addi r1, r1, 481244; CHECK-P8-NEXT: ld r0, 16(r1)1245; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1246; CHECK-P8-NEXT: mtlr r01247; CHECK-P8-NEXT: blr1248entry:1249 %i = load fp128, ptr @f128global, align 161250 %conv = fptrunc fp128 %i to float1251 store float %conv, ptr %res, align 41252 ret void1253}1254 1255; Function Attrs: norecurse nounwind1256define void @qpConv2sp_03(ptr nocapture %res, i32 signext %idx) nounwind {1257; CHECK-LABEL: qpConv2sp_03:1258; CHECK: # %bb.0: # %entry1259; CHECK-NEXT: addis r5, r2, .LC7@toc@ha1260; CHECK-NEXT: sldi r4, r4, 21261; CHECK-NEXT: ld r5, .LC7@toc@l(r5)1262; CHECK-NEXT: lxv v2, 48(r5)1263; CHECK-NEXT: xscvqpdpo v2, v21264; CHECK-NEXT: xsrsp f0, v21265; CHECK-NEXT: stfsx f0, r3, r41266; CHECK-NEXT: blr1267;1268; CHECK-P8-LABEL: qpConv2sp_03:1269; CHECK-P8: # %bb.0: # %entry1270; CHECK-P8-NEXT: mflr r01271; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill1272; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1273; CHECK-P8-NEXT: stdu r1, -64(r1)1274; CHECK-P8-NEXT: mr r29, r31275; CHECK-P8-NEXT: addis r3, r2, .LC7@toc@ha1276; CHECK-P8-NEXT: std r0, 80(r1)1277; CHECK-P8-NEXT: mr r30, r41278; CHECK-P8-NEXT: ld r3, .LC7@toc@l(r3)1279; CHECK-P8-NEXT: addi r3, r3, 481280; CHECK-P8-NEXT: lxvd2x vs0, 0, r31281; CHECK-P8-NEXT: xxswapd v2, vs01282; CHECK-P8-NEXT: bl __trunckfsf21283; CHECK-P8-NEXT: nop1284; CHECK-P8-NEXT: sldi r3, r30, 21285; CHECK-P8-NEXT: stfsx f1, r29, r31286; CHECK-P8-NEXT: addi r1, r1, 641287; CHECK-P8-NEXT: ld r0, 16(r1)1288; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1289; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload1290; CHECK-P8-NEXT: mtlr r01291; CHECK-P8-NEXT: blr1292entry:1293 %i = load fp128, ptr getelementptr inbounds ([4 x fp128], ptr @f128Array, i64 0, i64 3), align 161294 %conv = fptrunc fp128 %i to float1295 %idxprom = sext i32 %idx to i641296 %arrayidx = getelementptr inbounds float, ptr %res, i64 %idxprom1297 store float %conv, ptr %arrayidx, align 41298 ret void1299}1300 1301; Function Attrs: norecurse nounwind1302define void @qpConv2sp_04(ptr nocapture readonly %a, ptr nocapture readonly %b,1303; CHECK-LABEL: qpConv2sp_04:1304; CHECK: # %bb.0: # %entry1305; CHECK-NEXT: lxv v2, 0(r3)1306; CHECK-NEXT: lxv v3, 0(r4)1307; CHECK-NEXT: xsaddqp v2, v2, v31308; CHECK-NEXT: xscvqpdpo v2, v21309; CHECK-NEXT: xsrsp f0, v21310; CHECK-NEXT: stfs f0, 0(r5)1311; CHECK-NEXT: blr1312;1313; CHECK-P8-LABEL: qpConv2sp_04:1314; CHECK-P8: # %bb.0: # %entry1315; CHECK-P8-NEXT: mflr r01316; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1317; CHECK-P8-NEXT: stdu r1, -48(r1)1318; CHECK-P8-NEXT: std r0, 64(r1)1319; CHECK-P8-NEXT: mr r30, r51320; CHECK-P8-NEXT: lxvd2x vs0, 0, r31321; CHECK-P8-NEXT: xxswapd v2, vs01322; CHECK-P8-NEXT: lxvd2x vs0, 0, r41323; CHECK-P8-NEXT: xxswapd v3, vs01324; CHECK-P8-NEXT: bl __addkf31325; CHECK-P8-NEXT: nop1326; CHECK-P8-NEXT: bl __trunckfsf21327; CHECK-P8-NEXT: nop1328; CHECK-P8-NEXT: stfs f1, 0(r30)1329; CHECK-P8-NEXT: addi r1, r1, 481330; CHECK-P8-NEXT: ld r0, 16(r1)1331; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1332; CHECK-P8-NEXT: mtlr r01333; CHECK-P8-NEXT: blr1334 ptr nocapture %res) nounwind {1335entry:1336 %i = load fp128, ptr %a, align 161337 %1 = load fp128, ptr %b, align 161338 %add = fadd fp128 %i, %11339 %conv = fptrunc fp128 %add to float1340 store float %conv, ptr %res, align 41341 ret void1342}1343 1344define half @trunc(fp128 %a) nounwind {1345; CHECK-LABEL: trunc:1346; CHECK: # %bb.0: # %entry1347; CHECK-NEXT: mflr r01348; CHECK-NEXT: stdu r1, -32(r1)1349; CHECK-NEXT: std r0, 48(r1)1350; CHECK-NEXT: bl __trunckfhf21351; CHECK-NEXT: nop1352; CHECK-NEXT: clrlwi r3, r3, 161353; CHECK-NEXT: mtfprwz f0, r31354; CHECK-NEXT: xscvhpdp f1, f01355; CHECK-NEXT: addi r1, r1, 321356; CHECK-NEXT: ld r0, 16(r1)1357; CHECK-NEXT: mtlr r01358; CHECK-NEXT: blr1359;1360; CHECK-P8-LABEL: trunc:1361; CHECK-P8: # %bb.0: # %entry1362; CHECK-P8-NEXT: mflr r01363; CHECK-P8-NEXT: stdu r1, -32(r1)1364; CHECK-P8-NEXT: std r0, 48(r1)1365; CHECK-P8-NEXT: bl __trunckfhf21366; CHECK-P8-NEXT: nop1367; CHECK-P8-NEXT: clrldi r3, r3, 481368; CHECK-P8-NEXT: bl __extendhfsf21369; CHECK-P8-NEXT: nop1370; CHECK-P8-NEXT: addi r1, r1, 321371; CHECK-P8-NEXT: ld r0, 16(r1)1372; CHECK-P8-NEXT: mtlr r01373; CHECK-P8-NEXT: blr1374entry:1375 %i = fptrunc fp128 %a to half1376 ret half %i1377}1378 1379define fp128 @ext(half %a) nounwind {1380; CHECK-LABEL: ext:1381; CHECK: # %bb.0: # %entry1382; CHECK-NEXT: xscpsgndp v2, f1, f11383; CHECK-NEXT: xscvdpqp v2, v21384; CHECK-NEXT: blr1385;1386; CHECK-P8-LABEL: ext:1387; CHECK-P8: # %bb.0: # %entry1388; CHECK-P8-NEXT: mflr r01389; CHECK-P8-NEXT: stdu r1, -32(r1)1390; CHECK-P8-NEXT: std r0, 48(r1)1391; CHECK-P8-NEXT: bl __extendsfkf21392; CHECK-P8-NEXT: nop1393; CHECK-P8-NEXT: addi r1, r1, 321394; CHECK-P8-NEXT: ld r0, 16(r1)1395; CHECK-P8-NEXT: mtlr r01396; CHECK-P8-NEXT: blr1397entry:1398 %i = fpext half %a to fp1281399 ret fp128 %i1400}1401 1402@f128Glob = common global fp128 0xL00000000000000000000000000000000, align 161403 1404; Function Attrs: norecurse nounwind readnone1405define fp128 @dpConv2qp(double %a) nounwind {1406; CHECK-LABEL: dpConv2qp:1407; CHECK: # %bb.0: # %entry1408; CHECK-NEXT: xscpsgndp v2, f1, f11409; CHECK-NEXT: xscvdpqp v2, v21410; CHECK-NEXT: blr1411;1412; CHECK-P8-LABEL: dpConv2qp:1413; CHECK-P8: # %bb.0: # %entry1414; CHECK-P8-NEXT: mflr r01415; CHECK-P8-NEXT: stdu r1, -32(r1)1416; CHECK-P8-NEXT: std r0, 48(r1)1417; CHECK-P8-NEXT: bl __extenddfkf21418; CHECK-P8-NEXT: nop1419; CHECK-P8-NEXT: addi r1, r1, 321420; CHECK-P8-NEXT: ld r0, 16(r1)1421; CHECK-P8-NEXT: mtlr r01422; CHECK-P8-NEXT: blr1423entry:1424 %conv = fpext double %a to fp1281425 ret fp128 %conv1426}1427 1428; Function Attrs: norecurse nounwind1429define void @dpConv2qp_02(ptr nocapture readonly %a) nounwind {1430; CHECK-LABEL: dpConv2qp_02:1431; CHECK: # %bb.0: # %entry1432; CHECK-NEXT: lxsd v2, 0(r3)1433; CHECK-NEXT: addis r3, r2, .LC8@toc@ha1434; CHECK-NEXT: ld r3, .LC8@toc@l(r3)1435; CHECK-NEXT: xscvdpqp v2, v21436; CHECK-NEXT: stxv v2, 0(r3)1437; CHECK-NEXT: blr1438;1439; CHECK-P8-LABEL: dpConv2qp_02:1440; CHECK-P8: # %bb.0: # %entry1441; CHECK-P8-NEXT: mflr r01442; CHECK-P8-NEXT: stdu r1, -32(r1)1443; CHECK-P8-NEXT: std r0, 48(r1)1444; CHECK-P8-NEXT: lfd f1, 0(r3)1445; CHECK-P8-NEXT: bl __extenddfkf21446; CHECK-P8-NEXT: nop1447; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha1448; CHECK-P8-NEXT: xxswapd vs0, v21449; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3)1450; CHECK-P8-NEXT: stxvd2x vs0, 0, r31451; CHECK-P8-NEXT: addi r1, r1, 321452; CHECK-P8-NEXT: ld r0, 16(r1)1453; CHECK-P8-NEXT: mtlr r01454; CHECK-P8-NEXT: blr1455entry:1456 %i = load double, ptr %a, align 81457 %conv = fpext double %i to fp1281458 store fp128 %conv, ptr @f128Glob, align 161459 ret void1460}1461 1462; Function Attrs: norecurse nounwind1463define void @dpConv2qp_02b(ptr nocapture readonly %a, i32 signext %idx) nounwind {1464; CHECK-LABEL: dpConv2qp_02b:1465; CHECK: # %bb.0: # %entry1466; CHECK-NEXT: sldi r4, r4, 31467; CHECK-NEXT: lxsdx v2, r3, r41468; CHECK-NEXT: addis r3, r2, .LC8@toc@ha1469; CHECK-NEXT: ld r3, .LC8@toc@l(r3)1470; CHECK-NEXT: xscvdpqp v2, v21471; CHECK-NEXT: stxv v2, 0(r3)1472; CHECK-NEXT: blr1473;1474; CHECK-P8-LABEL: dpConv2qp_02b:1475; CHECK-P8: # %bb.0: # %entry1476; CHECK-P8-NEXT: mflr r01477; CHECK-P8-NEXT: stdu r1, -32(r1)1478; CHECK-P8-NEXT: sldi r4, r4, 31479; CHECK-P8-NEXT: std r0, 48(r1)1480; CHECK-P8-NEXT: lfdx f1, r3, r41481; CHECK-P8-NEXT: bl __extenddfkf21482; CHECK-P8-NEXT: nop1483; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha1484; CHECK-P8-NEXT: xxswapd vs0, v21485; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3)1486; CHECK-P8-NEXT: stxvd2x vs0, 0, r31487; CHECK-P8-NEXT: addi r1, r1, 321488; CHECK-P8-NEXT: ld r0, 16(r1)1489; CHECK-P8-NEXT: mtlr r01490; CHECK-P8-NEXT: blr1491entry:1492 %idxprom = sext i32 %idx to i641493 %arrayidx = getelementptr inbounds double, ptr %a, i64 %idxprom1494 %i = load double, ptr %arrayidx, align 81495 %conv = fpext double %i to fp1281496 store fp128 %conv, ptr @f128Glob, align 161497 ret void1498}1499 1500; Function Attrs: norecurse nounwind1501define void @dpConv2qp_03(ptr nocapture %res, i32 signext %idx, double %a) nounwind {1502; CHECK-LABEL: dpConv2qp_03:1503; CHECK: # %bb.0: # %entry1504; CHECK-NEXT: xscpsgndp v2, f1, f11505; CHECK-NEXT: sldi r4, r4, 41506; CHECK-NEXT: xscvdpqp v2, v21507; CHECK-NEXT: stxvx v2, r3, r41508; CHECK-NEXT: blr1509;1510; CHECK-P8-LABEL: dpConv2qp_03:1511; CHECK-P8: # %bb.0: # %entry1512; CHECK-P8-NEXT: mflr r01513; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill1514; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1515; CHECK-P8-NEXT: stdu r1, -64(r1)1516; CHECK-P8-NEXT: std r0, 80(r1)1517; CHECK-P8-NEXT: mr r30, r41518; CHECK-P8-NEXT: mr r29, r31519; CHECK-P8-NEXT: bl __extenddfkf21520; CHECK-P8-NEXT: nop1521; CHECK-P8-NEXT: xxswapd vs0, v21522; CHECK-P8-NEXT: sldi r3, r30, 41523; CHECK-P8-NEXT: stxvd2x vs0, r29, r31524; CHECK-P8-NEXT: addi r1, r1, 641525; CHECK-P8-NEXT: ld r0, 16(r1)1526; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1527; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload1528; CHECK-P8-NEXT: mtlr r01529; CHECK-P8-NEXT: blr1530entry:1531 %conv = fpext double %a to fp1281532 %idxprom = sext i32 %idx to i641533 %arrayidx = getelementptr inbounds fp128, ptr %res, i64 %idxprom1534 store fp128 %conv, ptr %arrayidx, align 161535 ret void1536}1537 1538; Function Attrs: norecurse nounwind1539define void @dpConv2qp_04(double %a, ptr nocapture %res) nounwind {1540; CHECK-LABEL: dpConv2qp_04:1541; CHECK: # %bb.0: # %entry1542; CHECK-NEXT: xscpsgndp v2, f1, f11543; CHECK-NEXT: xscvdpqp v2, v21544; CHECK-NEXT: stxv v2, 0(r4)1545; CHECK-NEXT: blr1546;1547; CHECK-P8-LABEL: dpConv2qp_04:1548; CHECK-P8: # %bb.0: # %entry1549; CHECK-P8-NEXT: mflr r01550; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1551; CHECK-P8-NEXT: stdu r1, -48(r1)1552; CHECK-P8-NEXT: std r0, 64(r1)1553; CHECK-P8-NEXT: mr r30, r41554; CHECK-P8-NEXT: bl __extenddfkf21555; CHECK-P8-NEXT: nop1556; CHECK-P8-NEXT: xxswapd vs0, v21557; CHECK-P8-NEXT: stxvd2x vs0, 0, r301558; CHECK-P8-NEXT: addi r1, r1, 481559; CHECK-P8-NEXT: ld r0, 16(r1)1560; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1561; CHECK-P8-NEXT: mtlr r01562; CHECK-P8-NEXT: blr1563entry:1564 %conv = fpext double %a to fp1281565 store fp128 %conv, ptr %res, align 161566 ret void1567}1568 1569; Function Attrs: norecurse nounwind readnone1570define fp128 @spConv2qp(float %a) nounwind {1571; CHECK-LABEL: spConv2qp:1572; CHECK: # %bb.0: # %entry1573; CHECK-NEXT: xscpsgndp v2, f1, f11574; CHECK-NEXT: xscvdpqp v2, v21575; CHECK-NEXT: blr1576;1577; CHECK-P8-LABEL: spConv2qp:1578; CHECK-P8: # %bb.0: # %entry1579; CHECK-P8-NEXT: mflr r01580; CHECK-P8-NEXT: stdu r1, -32(r1)1581; CHECK-P8-NEXT: std r0, 48(r1)1582; CHECK-P8-NEXT: bl __extendsfkf21583; CHECK-P8-NEXT: nop1584; CHECK-P8-NEXT: addi r1, r1, 321585; CHECK-P8-NEXT: ld r0, 16(r1)1586; CHECK-P8-NEXT: mtlr r01587; CHECK-P8-NEXT: blr1588entry:1589 %conv = fpext float %a to fp1281590 ret fp128 %conv1591}1592 1593; Function Attrs: norecurse nounwind1594define void @spConv2qp_02(ptr nocapture readonly %a) nounwind {1595; CHECK-LABEL: spConv2qp_02:1596; CHECK: # %bb.0: # %entry1597; CHECK-NEXT: lxssp v2, 0(r3)1598; CHECK-NEXT: addis r3, r2, .LC8@toc@ha1599; CHECK-NEXT: ld r3, .LC8@toc@l(r3)1600; CHECK-NEXT: xscvdpqp v2, v21601; CHECK-NEXT: stxv v2, 0(r3)1602; CHECK-NEXT: blr1603;1604; CHECK-P8-LABEL: spConv2qp_02:1605; CHECK-P8: # %bb.0: # %entry1606; CHECK-P8-NEXT: mflr r01607; CHECK-P8-NEXT: stdu r1, -32(r1)1608; CHECK-P8-NEXT: std r0, 48(r1)1609; CHECK-P8-NEXT: lfs f1, 0(r3)1610; CHECK-P8-NEXT: bl __extendsfkf21611; CHECK-P8-NEXT: nop1612; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha1613; CHECK-P8-NEXT: xxswapd vs0, v21614; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3)1615; CHECK-P8-NEXT: stxvd2x vs0, 0, r31616; CHECK-P8-NEXT: addi r1, r1, 321617; CHECK-P8-NEXT: ld r0, 16(r1)1618; CHECK-P8-NEXT: mtlr r01619; CHECK-P8-NEXT: blr1620entry:1621 %i = load float, ptr %a, align 41622 %conv = fpext float %i to fp1281623 store fp128 %conv, ptr @f128Glob, align 161624 ret void1625}1626 1627; Function Attrs: norecurse nounwind1628define void @spConv2qp_02b(ptr nocapture readonly %a, i32 signext %idx) nounwind {1629; CHECK-LABEL: spConv2qp_02b:1630; CHECK: # %bb.0: # %entry1631; CHECK-NEXT: sldi r4, r4, 21632; CHECK-NEXT: lxsspx v2, r3, r41633; CHECK-NEXT: addis r3, r2, .LC8@toc@ha1634; CHECK-NEXT: ld r3, .LC8@toc@l(r3)1635; CHECK-NEXT: xscvdpqp v2, v21636; CHECK-NEXT: stxv v2, 0(r3)1637; CHECK-NEXT: blr1638;1639; CHECK-P8-LABEL: spConv2qp_02b:1640; CHECK-P8: # %bb.0: # %entry1641; CHECK-P8-NEXT: mflr r01642; CHECK-P8-NEXT: stdu r1, -32(r1)1643; CHECK-P8-NEXT: sldi r4, r4, 21644; CHECK-P8-NEXT: std r0, 48(r1)1645; CHECK-P8-NEXT: lfsx f1, r3, r41646; CHECK-P8-NEXT: bl __extendsfkf21647; CHECK-P8-NEXT: nop1648; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha1649; CHECK-P8-NEXT: xxswapd vs0, v21650; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3)1651; CHECK-P8-NEXT: stxvd2x vs0, 0, r31652; CHECK-P8-NEXT: addi r1, r1, 321653; CHECK-P8-NEXT: ld r0, 16(r1)1654; CHECK-P8-NEXT: mtlr r01655; CHECK-P8-NEXT: blr1656entry:1657 %idxprom = sext i32 %idx to i641658 %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom1659 %i = load float, ptr %arrayidx, align 41660 %conv = fpext float %i to fp1281661 store fp128 %conv, ptr @f128Glob, align 161662 ret void1663}1664 1665; Function Attrs: norecurse nounwind1666define void @spConv2qp_03(ptr nocapture %res, i32 signext %idx, float %a) nounwind {1667; CHECK-LABEL: spConv2qp_03:1668; CHECK: # %bb.0: # %entry1669; CHECK-NEXT: xscpsgndp v2, f1, f11670; CHECK-NEXT: sldi r4, r4, 41671; CHECK-NEXT: xscvdpqp v2, v21672; CHECK-NEXT: stxvx v2, r3, r41673; CHECK-NEXT: blr1674;1675; CHECK-P8-LABEL: spConv2qp_03:1676; CHECK-P8: # %bb.0: # %entry1677; CHECK-P8-NEXT: mflr r01678; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill1679; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1680; CHECK-P8-NEXT: stdu r1, -64(r1)1681; CHECK-P8-NEXT: std r0, 80(r1)1682; CHECK-P8-NEXT: mr r30, r41683; CHECK-P8-NEXT: mr r29, r31684; CHECK-P8-NEXT: bl __extendsfkf21685; CHECK-P8-NEXT: nop1686; CHECK-P8-NEXT: xxswapd vs0, v21687; CHECK-P8-NEXT: sldi r3, r30, 41688; CHECK-P8-NEXT: stxvd2x vs0, r29, r31689; CHECK-P8-NEXT: addi r1, r1, 641690; CHECK-P8-NEXT: ld r0, 16(r1)1691; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1692; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload1693; CHECK-P8-NEXT: mtlr r01694; CHECK-P8-NEXT: blr1695entry:1696 %conv = fpext float %a to fp1281697 %idxprom = sext i32 %idx to i641698 %arrayidx = getelementptr inbounds fp128, ptr %res, i64 %idxprom1699 store fp128 %conv, ptr %arrayidx, align 161700 ret void1701}1702 1703; Function Attrs: norecurse nounwind1704define void @spConv2qp_04(float %a, ptr nocapture %res) nounwind {1705; CHECK-LABEL: spConv2qp_04:1706; CHECK: # %bb.0: # %entry1707; CHECK-NEXT: xscpsgndp v2, f1, f11708; CHECK-NEXT: xscvdpqp v2, v21709; CHECK-NEXT: stxv v2, 0(r4)1710; CHECK-NEXT: blr1711;1712; CHECK-P8-LABEL: spConv2qp_04:1713; CHECK-P8: # %bb.0: # %entry1714; CHECK-P8-NEXT: mflr r01715; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1716; CHECK-P8-NEXT: stdu r1, -48(r1)1717; CHECK-P8-NEXT: std r0, 64(r1)1718; CHECK-P8-NEXT: mr r30, r41719; CHECK-P8-NEXT: bl __extendsfkf21720; CHECK-P8-NEXT: nop1721; CHECK-P8-NEXT: xxswapd vs0, v21722; CHECK-P8-NEXT: stxvd2x vs0, 0, r301723; CHECK-P8-NEXT: addi r1, r1, 481724; CHECK-P8-NEXT: ld r0, 16(r1)1725; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1726; CHECK-P8-NEXT: mtlr r01727; CHECK-P8-NEXT: blr1728entry:1729 %conv = fpext float %a to fp1281730 store fp128 %conv, ptr %res, align 161731 ret void1732}1733 1734 1735; Function Attrs: norecurse nounwind1736define void @cvdp2sw2qp(double %val, ptr nocapture %res) nounwind {1737; CHECK-LABEL: cvdp2sw2qp:1738; CHECK: # %bb.0: # %entry1739; CHECK-NEXT: xscvdpsxws v2, f11740; CHECK-NEXT: vextsw2d v2, v21741; CHECK-NEXT: xscvsdqp v2, v21742; CHECK-NEXT: stxv v2, 0(r4)1743; CHECK-NEXT: blr1744;1745; CHECK-P8-LABEL: cvdp2sw2qp:1746; CHECK-P8: # %bb.0: # %entry1747; CHECK-P8-NEXT: mflr r01748; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1749; CHECK-P8-NEXT: stdu r1, -48(r1)1750; CHECK-P8-NEXT: xscvdpsxws f0, f11751; CHECK-P8-NEXT: std r0, 64(r1)1752; CHECK-P8-NEXT: mr r30, r41753; CHECK-P8-NEXT: mffprwz r3, f01754; CHECK-P8-NEXT: extsw r3, r31755; CHECK-P8-NEXT: bl __floatsikf1756; CHECK-P8-NEXT: nop1757; CHECK-P8-NEXT: xxswapd vs0, v21758; CHECK-P8-NEXT: stxvd2x vs0, 0, r301759; CHECK-P8-NEXT: addi r1, r1, 481760; CHECK-P8-NEXT: ld r0, 16(r1)1761; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1762; CHECK-P8-NEXT: mtlr r01763; CHECK-P8-NEXT: blr1764entry:1765 %conv = fptosi double %val to i321766 %conv1 = sitofp i32 %conv to fp1281767 store fp128 %conv1, ptr %res, align 161768 ret void1769}1770 1771; Function Attrs: norecurse nounwind1772define void @cvdp2sdw2qp(double %val, ptr nocapture %res) nounwind {1773; CHECK-LABEL: cvdp2sdw2qp:1774; CHECK: # %bb.0: # %entry1775; CHECK-NEXT: xscvdpsxds v2, f11776; CHECK-NEXT: xscvsdqp v2, v21777; CHECK-NEXT: stxv v2, 0(r4)1778; CHECK-NEXT: blr1779;1780; CHECK-P8-LABEL: cvdp2sdw2qp:1781; CHECK-P8: # %bb.0: # %entry1782; CHECK-P8-NEXT: mflr r01783; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1784; CHECK-P8-NEXT: stdu r1, -48(r1)1785; CHECK-P8-NEXT: xscvdpsxds f0, f11786; CHECK-P8-NEXT: std r0, 64(r1)1787; CHECK-P8-NEXT: mr r30, r41788; CHECK-P8-NEXT: mffprd r3, f01789; CHECK-P8-NEXT: bl __floatdikf1790; CHECK-P8-NEXT: nop1791; CHECK-P8-NEXT: xxswapd vs0, v21792; CHECK-P8-NEXT: stxvd2x vs0, 0, r301793; CHECK-P8-NEXT: addi r1, r1, 481794; CHECK-P8-NEXT: ld r0, 16(r1)1795; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1796; CHECK-P8-NEXT: mtlr r01797; CHECK-P8-NEXT: blr1798entry:1799 %conv = fptosi double %val to i641800 %conv1 = sitofp i64 %conv to fp1281801 store fp128 %conv1, ptr %res, align 161802 ret void1803}1804 1805; Function Attrs: norecurse nounwind1806define void @cvsp2sw2qp(float %val, ptr nocapture %res) nounwind {1807; CHECK-LABEL: cvsp2sw2qp:1808; CHECK: # %bb.0: # %entry1809; CHECK-NEXT: xscvdpsxws v2, f11810; CHECK-NEXT: vextsw2d v2, v21811; CHECK-NEXT: xscvsdqp v2, v21812; CHECK-NEXT: stxv v2, 0(r4)1813; CHECK-NEXT: blr1814;1815; CHECK-P8-LABEL: cvsp2sw2qp:1816; CHECK-P8: # %bb.0: # %entry1817; CHECK-P8-NEXT: mflr r01818; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1819; CHECK-P8-NEXT: stdu r1, -48(r1)1820; CHECK-P8-NEXT: xscvdpsxws f0, f11821; CHECK-P8-NEXT: std r0, 64(r1)1822; CHECK-P8-NEXT: mr r30, r41823; CHECK-P8-NEXT: mffprwz r3, f01824; CHECK-P8-NEXT: extsw r3, r31825; CHECK-P8-NEXT: bl __floatsikf1826; CHECK-P8-NEXT: nop1827; CHECK-P8-NEXT: xxswapd vs0, v21828; CHECK-P8-NEXT: stxvd2x vs0, 0, r301829; CHECK-P8-NEXT: addi r1, r1, 481830; CHECK-P8-NEXT: ld r0, 16(r1)1831; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1832; CHECK-P8-NEXT: mtlr r01833; CHECK-P8-NEXT: blr1834entry:1835 %conv = fptosi float %val to i321836 %conv1 = sitofp i32 %conv to fp1281837 store fp128 %conv1, ptr %res, align 161838 ret void1839}1840 1841; Function Attrs: norecurse nounwind1842define void @cvsp2sdw2qp(float %val, ptr nocapture %res) nounwind {1843; CHECK-LABEL: cvsp2sdw2qp:1844; CHECK: # %bb.0: # %entry1845; CHECK-NEXT: xscvdpsxds v2, f11846; CHECK-NEXT: xscvsdqp v2, v21847; CHECK-NEXT: stxv v2, 0(r4)1848; CHECK-NEXT: blr1849;1850; CHECK-P8-LABEL: cvsp2sdw2qp:1851; CHECK-P8: # %bb.0: # %entry1852; CHECK-P8-NEXT: mflr r01853; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1854; CHECK-P8-NEXT: stdu r1, -48(r1)1855; CHECK-P8-NEXT: xscvdpsxds f0, f11856; CHECK-P8-NEXT: std r0, 64(r1)1857; CHECK-P8-NEXT: mr r30, r41858; CHECK-P8-NEXT: mffprd r3, f01859; CHECK-P8-NEXT: bl __floatdikf1860; CHECK-P8-NEXT: nop1861; CHECK-P8-NEXT: xxswapd vs0, v21862; CHECK-P8-NEXT: stxvd2x vs0, 0, r301863; CHECK-P8-NEXT: addi r1, r1, 481864; CHECK-P8-NEXT: ld r0, 16(r1)1865; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1866; CHECK-P8-NEXT: mtlr r01867; CHECK-P8-NEXT: blr1868entry:1869 %conv = fptosi float %val to i641870 %conv1 = sitofp i64 %conv to fp1281871 store fp128 %conv1, ptr %res, align 161872 ret void1873}1874 1875; Function Attrs: norecurse nounwind1876define void @cvdp2uw2qp(double %val, ptr nocapture %res) nounwind {1877; CHECK-LABEL: cvdp2uw2qp:1878; CHECK: # %bb.0: # %entry1879; CHECK-NEXT: xscvdpuxws f0, f11880; CHECK-NEXT: xxextractuw v2, vs0, 81881; CHECK-NEXT: xscvudqp v2, v21882; CHECK-NEXT: stxv v2, 0(r4)1883; CHECK-NEXT: blr1884;1885; CHECK-P8-LABEL: cvdp2uw2qp:1886; CHECK-P8: # %bb.0: # %entry1887; CHECK-P8-NEXT: mflr r01888; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1889; CHECK-P8-NEXT: stdu r1, -48(r1)1890; CHECK-P8-NEXT: xscvdpuxws f0, f11891; CHECK-P8-NEXT: std r0, 64(r1)1892; CHECK-P8-NEXT: mr r30, r41893; CHECK-P8-NEXT: mffprwz r3, f01894; CHECK-P8-NEXT: bl __floatunsikf1895; CHECK-P8-NEXT: nop1896; CHECK-P8-NEXT: xxswapd vs0, v21897; CHECK-P8-NEXT: stxvd2x vs0, 0, r301898; CHECK-P8-NEXT: addi r1, r1, 481899; CHECK-P8-NEXT: ld r0, 16(r1)1900; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1901; CHECK-P8-NEXT: mtlr r01902; CHECK-P8-NEXT: blr1903entry:1904 %conv = fptoui double %val to i321905 %conv1 = uitofp i32 %conv to fp1281906 store fp128 %conv1, ptr %res, align 161907 ret void1908}1909 1910; Function Attrs: norecurse nounwind1911define void @cvdp2udw2qp(double %val, ptr nocapture %res) nounwind {1912; CHECK-LABEL: cvdp2udw2qp:1913; CHECK: # %bb.0: # %entry1914; CHECK-NEXT: xscvdpuxds v2, f11915; CHECK-NEXT: xscvudqp v2, v21916; CHECK-NEXT: stxv v2, 0(r4)1917; CHECK-NEXT: blr1918;1919; CHECK-P8-LABEL: cvdp2udw2qp:1920; CHECK-P8: # %bb.0: # %entry1921; CHECK-P8-NEXT: mflr r01922; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1923; CHECK-P8-NEXT: stdu r1, -48(r1)1924; CHECK-P8-NEXT: xscvdpuxds f0, f11925; CHECK-P8-NEXT: std r0, 64(r1)1926; CHECK-P8-NEXT: mr r30, r41927; CHECK-P8-NEXT: mffprd r3, f01928; CHECK-P8-NEXT: bl __floatundikf1929; CHECK-P8-NEXT: nop1930; CHECK-P8-NEXT: xxswapd vs0, v21931; CHECK-P8-NEXT: stxvd2x vs0, 0, r301932; CHECK-P8-NEXT: addi r1, r1, 481933; CHECK-P8-NEXT: ld r0, 16(r1)1934; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1935; CHECK-P8-NEXT: mtlr r01936; CHECK-P8-NEXT: blr1937entry:1938 %conv = fptoui double %val to i641939 %conv1 = uitofp i64 %conv to fp1281940 store fp128 %conv1, ptr %res, align 161941 ret void1942}1943 1944; Function Attrs: norecurse nounwind1945define void @cvsp2uw2qp(float %val, ptr nocapture %res) nounwind {1946; CHECK-LABEL: cvsp2uw2qp:1947; CHECK: # %bb.0: # %entry1948; CHECK-NEXT: xscvdpuxws f0, f11949; CHECK-NEXT: xxextractuw v2, vs0, 81950; CHECK-NEXT: xscvudqp v2, v21951; CHECK-NEXT: stxv v2, 0(r4)1952; CHECK-NEXT: blr1953;1954; CHECK-P8-LABEL: cvsp2uw2qp:1955; CHECK-P8: # %bb.0: # %entry1956; CHECK-P8-NEXT: mflr r01957; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1958; CHECK-P8-NEXT: stdu r1, -48(r1)1959; CHECK-P8-NEXT: xscvdpuxws f0, f11960; CHECK-P8-NEXT: std r0, 64(r1)1961; CHECK-P8-NEXT: mr r30, r41962; CHECK-P8-NEXT: mffprwz r3, f01963; CHECK-P8-NEXT: bl __floatunsikf1964; CHECK-P8-NEXT: nop1965; CHECK-P8-NEXT: xxswapd vs0, v21966; CHECK-P8-NEXT: stxvd2x vs0, 0, r301967; CHECK-P8-NEXT: addi r1, r1, 481968; CHECK-P8-NEXT: ld r0, 16(r1)1969; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1970; CHECK-P8-NEXT: mtlr r01971; CHECK-P8-NEXT: blr1972entry:1973 %conv = fptoui float %val to i321974 %conv1 = uitofp i32 %conv to fp1281975 store fp128 %conv1, ptr %res, align 161976 ret void1977}1978 1979; Function Attrs: norecurse nounwind1980define void @cvsp2udw2qp(float %val, ptr nocapture %res) nounwind {1981; CHECK-LABEL: cvsp2udw2qp:1982; CHECK: # %bb.0: # %entry1983; CHECK-NEXT: xscvdpuxds v2, f11984; CHECK-NEXT: xscvudqp v2, v21985; CHECK-NEXT: stxv v2, 0(r4)1986; CHECK-NEXT: blr1987;1988; CHECK-P8-LABEL: cvsp2udw2qp:1989; CHECK-P8: # %bb.0: # %entry1990; CHECK-P8-NEXT: mflr r01991; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1992; CHECK-P8-NEXT: stdu r1, -48(r1)1993; CHECK-P8-NEXT: xscvdpuxds f0, f11994; CHECK-P8-NEXT: std r0, 64(r1)1995; CHECK-P8-NEXT: mr r30, r41996; CHECK-P8-NEXT: mffprd r3, f01997; CHECK-P8-NEXT: bl __floatundikf1998; CHECK-P8-NEXT: nop1999; CHECK-P8-NEXT: xxswapd vs0, v22000; CHECK-P8-NEXT: stxvd2x vs0, 0, r302001; CHECK-P8-NEXT: addi r1, r1, 482002; CHECK-P8-NEXT: ld r0, 16(r1)2003; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload2004; CHECK-P8-NEXT: mtlr r02005; CHECK-P8-NEXT: blr2006entry:2007 %conv = fptoui float %val to i642008 %conv1 = uitofp i64 %conv to fp1282009 store fp128 %conv1, ptr %res, align 162010 ret void2011}2012 2013; Function Attrs: norecurse nounwind readonly2014define i128 @qpConv2i128(ptr nocapture readonly %a) nounwind {2015; CHECK-LABEL: qpConv2i128:2016; CHECK: # %bb.0: # %entry2017; CHECK-NEXT: mflr r02018; CHECK-NEXT: stdu r1, -32(r1)2019; CHECK-NEXT: std r0, 48(r1)2020; CHECK-NEXT: lxv v2, 0(r3)2021; CHECK-NEXT: bl __fixkfti2022; CHECK-NEXT: nop2023; CHECK-NEXT: addi r1, r1, 322024; CHECK-NEXT: ld r0, 16(r1)2025; CHECK-NEXT: mtlr r02026; CHECK-NEXT: blr2027;2028; CHECK-P8-LABEL: qpConv2i128:2029; CHECK-P8: # %bb.0: # %entry2030; CHECK-P8-NEXT: mflr r02031; CHECK-P8-NEXT: stdu r1, -32(r1)2032; CHECK-P8-NEXT: std r0, 48(r1)2033; CHECK-P8-NEXT: lxvd2x vs0, 0, r32034; CHECK-P8-NEXT: xxswapd v2, vs02035; CHECK-P8-NEXT: bl __fixkfti2036; CHECK-P8-NEXT: nop2037; CHECK-P8-NEXT: addi r1, r1, 322038; CHECK-P8-NEXT: ld r0, 16(r1)2039; CHECK-P8-NEXT: mtlr r02040; CHECK-P8-NEXT: blr2041entry:2042 %i = load fp128, ptr %a, align 162043 %conv = fptosi fp128 %i to i1282044 ret i128 %conv2045}2046 2047; Function Attrs: norecurse nounwind readonly2048define i128 @qpConv2ui128(ptr nocapture readonly %a) nounwind {2049; CHECK-LABEL: qpConv2ui128:2050; CHECK: # %bb.0: # %entry2051; CHECK-NEXT: mflr r02052; CHECK-NEXT: stdu r1, -32(r1)2053; CHECK-NEXT: std r0, 48(r1)2054; CHECK-NEXT: lxv v2, 0(r3)2055; CHECK-NEXT: bl __fixunskfti2056; CHECK-NEXT: nop2057; CHECK-NEXT: addi r1, r1, 322058; CHECK-NEXT: ld r0, 16(r1)2059; CHECK-NEXT: mtlr r02060; CHECK-NEXT: blr2061;2062; CHECK-P8-LABEL: qpConv2ui128:2063; CHECK-P8: # %bb.0: # %entry2064; CHECK-P8-NEXT: mflr r02065; CHECK-P8-NEXT: stdu r1, -32(r1)2066; CHECK-P8-NEXT: std r0, 48(r1)2067; CHECK-P8-NEXT: lxvd2x vs0, 0, r32068; CHECK-P8-NEXT: xxswapd v2, vs02069; CHECK-P8-NEXT: bl __fixunskfti2070; CHECK-P8-NEXT: nop2071; CHECK-P8-NEXT: addi r1, r1, 322072; CHECK-P8-NEXT: ld r0, 16(r1)2073; CHECK-P8-NEXT: mtlr r02074; CHECK-P8-NEXT: blr2075entry:2076 %i = load fp128, ptr %a, align 162077 %conv = fptoui fp128 %i to i1282078 ret i128 %conv2079}2080 2081; Function Attrs: norecurse nounwind readonly2082define i1 @qpConv2ui1(ptr nocapture readonly %a) nounwind {2083; CHECK-LABEL: qpConv2ui1:2084; CHECK: # %bb.0: # %entry2085; CHECK-NEXT: lxv v2, 0(r3)2086; CHECK-NEXT: xscvqpswz v2, v22087; CHECK-NEXT: mfvsrwz r3, v22088; CHECK-NEXT: blr2089;2090; CHECK-P8-LABEL: qpConv2ui1:2091; CHECK-P8: # %bb.0: # %entry2092; CHECK-P8-NEXT: mflr r02093; CHECK-P8-NEXT: stdu r1, -32(r1)2094; CHECK-P8-NEXT: std r0, 48(r1)2095; CHECK-P8-NEXT: lxvd2x vs0, 0, r32096; CHECK-P8-NEXT: xxswapd v2, vs02097; CHECK-P8-NEXT: bl __fixkfsi2098; CHECK-P8-NEXT: nop2099; CHECK-P8-NEXT: addi r1, r1, 322100; CHECK-P8-NEXT: ld r0, 16(r1)2101; CHECK-P8-NEXT: mtlr r02102; CHECK-P8-NEXT: blr2103entry:2104 %i = load fp128, ptr %a, align 162105 %conv = fptoui fp128 %i to i12106 ret i1 %conv2107}2108 2109; Function Attrs: norecurse nounwind readonly2110define i1 @qpConv2si1(ptr nocapture readonly %a) nounwind {2111; CHECK-LABEL: qpConv2si1:2112; CHECK: # %bb.0: # %entry2113; CHECK-NEXT: lxv v2, 0(r3)2114; CHECK-NEXT: xscvqpswz v2, v22115; CHECK-NEXT: mfvsrwz r3, v22116; CHECK-NEXT: blr2117;2118; CHECK-P8-LABEL: qpConv2si1:2119; CHECK-P8: # %bb.0: # %entry2120; CHECK-P8-NEXT: mflr r02121; CHECK-P8-NEXT: stdu r1, -32(r1)2122; CHECK-P8-NEXT: std r0, 48(r1)2123; CHECK-P8-NEXT: lxvd2x vs0, 0, r32124; CHECK-P8-NEXT: xxswapd v2, vs02125; CHECK-P8-NEXT: bl __fixkfsi2126; CHECK-P8-NEXT: nop2127; CHECK-P8-NEXT: addi r1, r1, 322128; CHECK-P8-NEXT: ld r0, 16(r1)2129; CHECK-P8-NEXT: mtlr r02130; CHECK-P8-NEXT: blr2131entry:2132 %i = load fp128, ptr %a, align 162133 %conv = fptosi fp128 %i to i12134 ret i1 %conv2135}2136