2203 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s3; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s4; RUN: llc -O3 -mcpu=ppc -mtriple=powerpc64-linux-gnu < %s | FileCheck --check-prefix=PC64 %s5 6define ppc_fp128 @test_fadd_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {7; PC64LE-LABEL: test_fadd_ppc_fp128:8; PC64LE: # %bb.0: # %entry9; PC64LE-NEXT: mflr 010; PC64LE-NEXT: stdu 1, -32(1)11; PC64LE-NEXT: std 0, 48(1)12; PC64LE-NEXT: bl __gcc_qadd13; PC64LE-NEXT: nop14; PC64LE-NEXT: addi 1, 1, 3215; PC64LE-NEXT: ld 0, 16(1)16; PC64LE-NEXT: mtlr 017; PC64LE-NEXT: blr18;19; PC64LE9-LABEL: test_fadd_ppc_fp128:20; PC64LE9: # %bb.0: # %entry21; PC64LE9-NEXT: mflr 022; PC64LE9-NEXT: stdu 1, -32(1)23; PC64LE9-NEXT: std 0, 48(1)24; PC64LE9-NEXT: bl __gcc_qadd25; PC64LE9-NEXT: nop26; PC64LE9-NEXT: addi 1, 1, 3227; PC64LE9-NEXT: ld 0, 16(1)28; PC64LE9-NEXT: mtlr 029; PC64LE9-NEXT: blr30;31; PC64-LABEL: test_fadd_ppc_fp128:32; PC64: # %bb.0: # %entry33; PC64-NEXT: mflr 034; PC64-NEXT: stdu 1, -112(1)35; PC64-NEXT: std 0, 128(1)36; PC64-NEXT: bl __gcc_qadd37; PC64-NEXT: nop38; PC64-NEXT: addi 1, 1, 11239; PC64-NEXT: ld 0, 16(1)40; PC64-NEXT: mtlr 041; PC64-NEXT: blr42entry:43 %add = call ppc_fp128 @llvm.experimental.constrained.fadd.ppcf128(44 ppc_fp128 %first,45 ppc_fp128 %second,46 metadata !"round.dynamic",47 metadata !"fpexcept.strict") #148 ret ppc_fp128 %add49}50 51define ppc_fp128 @test_fsub_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {52; PC64LE-LABEL: test_fsub_ppc_fp128:53; PC64LE: # %bb.0: # %entry54; PC64LE-NEXT: mflr 055; PC64LE-NEXT: stdu 1, -32(1)56; PC64LE-NEXT: std 0, 48(1)57; PC64LE-NEXT: bl __gcc_qsub58; PC64LE-NEXT: nop59; PC64LE-NEXT: addi 1, 1, 3260; PC64LE-NEXT: ld 0, 16(1)61; PC64LE-NEXT: mtlr 062; PC64LE-NEXT: blr63;64; PC64LE9-LABEL: test_fsub_ppc_fp128:65; PC64LE9: # %bb.0: # %entry66; PC64LE9-NEXT: mflr 067; PC64LE9-NEXT: stdu 1, -32(1)68; PC64LE9-NEXT: std 0, 48(1)69; PC64LE9-NEXT: bl __gcc_qsub70; PC64LE9-NEXT: nop71; PC64LE9-NEXT: addi 1, 1, 3272; PC64LE9-NEXT: ld 0, 16(1)73; PC64LE9-NEXT: mtlr 074; PC64LE9-NEXT: blr75;76; PC64-LABEL: test_fsub_ppc_fp128:77; PC64: # %bb.0: # %entry78; PC64-NEXT: mflr 079; PC64-NEXT: stdu 1, -112(1)80; PC64-NEXT: std 0, 128(1)81; PC64-NEXT: bl __gcc_qsub82; PC64-NEXT: nop83; PC64-NEXT: addi 1, 1, 11284; PC64-NEXT: ld 0, 16(1)85; PC64-NEXT: mtlr 086; PC64-NEXT: blr87entry:88 %sub = call ppc_fp128 @llvm.experimental.constrained.fsub.ppcf128(89 ppc_fp128 %first,90 ppc_fp128 %second,91 metadata !"round.dynamic",92 metadata !"fpexcept.strict") #193 ret ppc_fp128 %sub94}95 96define ppc_fp128 @test_fmul_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {97; PC64LE-LABEL: test_fmul_ppc_fp128:98; PC64LE: # %bb.0: # %entry99; PC64LE-NEXT: mflr 0100; PC64LE-NEXT: stdu 1, -32(1)101; PC64LE-NEXT: std 0, 48(1)102; PC64LE-NEXT: bl __gcc_qmul103; PC64LE-NEXT: nop104; PC64LE-NEXT: addi 1, 1, 32105; PC64LE-NEXT: ld 0, 16(1)106; PC64LE-NEXT: mtlr 0107; PC64LE-NEXT: blr108;109; PC64LE9-LABEL: test_fmul_ppc_fp128:110; PC64LE9: # %bb.0: # %entry111; PC64LE9-NEXT: mflr 0112; PC64LE9-NEXT: stdu 1, -32(1)113; PC64LE9-NEXT: std 0, 48(1)114; PC64LE9-NEXT: bl __gcc_qmul115; PC64LE9-NEXT: nop116; PC64LE9-NEXT: addi 1, 1, 32117; PC64LE9-NEXT: ld 0, 16(1)118; PC64LE9-NEXT: mtlr 0119; PC64LE9-NEXT: blr120;121; PC64-LABEL: test_fmul_ppc_fp128:122; PC64: # %bb.0: # %entry123; PC64-NEXT: mflr 0124; PC64-NEXT: stdu 1, -112(1)125; PC64-NEXT: std 0, 128(1)126; PC64-NEXT: bl __gcc_qmul127; PC64-NEXT: nop128; PC64-NEXT: addi 1, 1, 112129; PC64-NEXT: ld 0, 16(1)130; PC64-NEXT: mtlr 0131; PC64-NEXT: blr132entry:133 %mul = call ppc_fp128 @llvm.experimental.constrained.fmul.ppcf128(134 ppc_fp128 %first,135 ppc_fp128 %second,136 metadata !"round.dynamic",137 metadata !"fpexcept.strict") #1138 ret ppc_fp128 %mul139}140 141define ppc_fp128 @test_fdiv_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {142; PC64LE-LABEL: test_fdiv_ppc_fp128:143; PC64LE: # %bb.0: # %entry144; PC64LE-NEXT: mflr 0145; PC64LE-NEXT: stdu 1, -32(1)146; PC64LE-NEXT: std 0, 48(1)147; PC64LE-NEXT: bl __gcc_qdiv148; PC64LE-NEXT: nop149; PC64LE-NEXT: addi 1, 1, 32150; PC64LE-NEXT: ld 0, 16(1)151; PC64LE-NEXT: mtlr 0152; PC64LE-NEXT: blr153;154; PC64LE9-LABEL: test_fdiv_ppc_fp128:155; PC64LE9: # %bb.0: # %entry156; PC64LE9-NEXT: mflr 0157; PC64LE9-NEXT: stdu 1, -32(1)158; PC64LE9-NEXT: std 0, 48(1)159; PC64LE9-NEXT: bl __gcc_qdiv160; PC64LE9-NEXT: nop161; PC64LE9-NEXT: addi 1, 1, 32162; PC64LE9-NEXT: ld 0, 16(1)163; PC64LE9-NEXT: mtlr 0164; PC64LE9-NEXT: blr165;166; PC64-LABEL: test_fdiv_ppc_fp128:167; PC64: # %bb.0: # %entry168; PC64-NEXT: mflr 0169; PC64-NEXT: stdu 1, -112(1)170; PC64-NEXT: std 0, 128(1)171; PC64-NEXT: bl __gcc_qdiv172; PC64-NEXT: nop173; PC64-NEXT: addi 1, 1, 112174; PC64-NEXT: ld 0, 16(1)175; PC64-NEXT: mtlr 0176; PC64-NEXT: blr177entry:178 %div = call ppc_fp128 @llvm.experimental.constrained.fdiv.ppcf128(179 ppc_fp128 %first,180 ppc_fp128 %second,181 metadata !"round.dynamic",182 metadata !"fpexcept.strict") #1183 ret ppc_fp128 %div184}185 186define ppc_fp128 @test_frem_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {187; PC64LE-LABEL: test_frem_ppc_fp128:188; PC64LE: # %bb.0: # %entry189; PC64LE-NEXT: mflr 0190; PC64LE-NEXT: stdu 1, -32(1)191; PC64LE-NEXT: std 0, 48(1)192; PC64LE-NEXT: bl fmodl193; PC64LE-NEXT: nop194; PC64LE-NEXT: addi 1, 1, 32195; PC64LE-NEXT: ld 0, 16(1)196; PC64LE-NEXT: mtlr 0197; PC64LE-NEXT: blr198;199; PC64LE9-LABEL: test_frem_ppc_fp128:200; PC64LE9: # %bb.0: # %entry201; PC64LE9-NEXT: mflr 0202; PC64LE9-NEXT: stdu 1, -32(1)203; PC64LE9-NEXT: std 0, 48(1)204; PC64LE9-NEXT: bl fmodl205; PC64LE9-NEXT: nop206; PC64LE9-NEXT: addi 1, 1, 32207; PC64LE9-NEXT: ld 0, 16(1)208; PC64LE9-NEXT: mtlr 0209; PC64LE9-NEXT: blr210;211; PC64-LABEL: test_frem_ppc_fp128:212; PC64: # %bb.0: # %entry213; PC64-NEXT: mflr 0214; PC64-NEXT: stdu 1, -112(1)215; PC64-NEXT: std 0, 128(1)216; PC64-NEXT: bl fmodl217; PC64-NEXT: nop218; PC64-NEXT: addi 1, 1, 112219; PC64-NEXT: ld 0, 16(1)220; PC64-NEXT: mtlr 0221; PC64-NEXT: blr222entry:223 %rem = call ppc_fp128 @llvm.experimental.constrained.frem.ppcf128(224 ppc_fp128 %first,225 ppc_fp128 %second,226 metadata !"round.dynamic",227 metadata !"fpexcept.strict") #1228 ret ppc_fp128 %rem229}230 231define ppc_fp128 @test_fma_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second, ppc_fp128 %third) #0 {232; PC64LE-LABEL: test_fma_ppc_fp128:233; PC64LE: # %bb.0: # %entry234; PC64LE-NEXT: mflr 0235; PC64LE-NEXT: stdu 1, -32(1)236; PC64LE-NEXT: std 0, 48(1)237; PC64LE-NEXT: bl fmal238; PC64LE-NEXT: nop239; PC64LE-NEXT: addi 1, 1, 32240; PC64LE-NEXT: ld 0, 16(1)241; PC64LE-NEXT: mtlr 0242; PC64LE-NEXT: blr243;244; PC64LE9-LABEL: test_fma_ppc_fp128:245; PC64LE9: # %bb.0: # %entry246; PC64LE9-NEXT: mflr 0247; PC64LE9-NEXT: stdu 1, -32(1)248; PC64LE9-NEXT: std 0, 48(1)249; PC64LE9-NEXT: bl fmal250; PC64LE9-NEXT: nop251; PC64LE9-NEXT: addi 1, 1, 32252; PC64LE9-NEXT: ld 0, 16(1)253; PC64LE9-NEXT: mtlr 0254; PC64LE9-NEXT: blr255;256; PC64-LABEL: test_fma_ppc_fp128:257; PC64: # %bb.0: # %entry258; PC64-NEXT: mflr 0259; PC64-NEXT: stdu 1, -112(1)260; PC64-NEXT: std 0, 128(1)261; PC64-NEXT: bl fmal262; PC64-NEXT: nop263; PC64-NEXT: addi 1, 1, 112264; PC64-NEXT: ld 0, 16(1)265; PC64-NEXT: mtlr 0266; PC64-NEXT: blr267entry:268 %add = call ppc_fp128 @llvm.experimental.constrained.fma.ppcf128(269 ppc_fp128 %first,270 ppc_fp128 %second,271 ppc_fp128 %third,272 metadata !"round.dynamic",273 metadata !"fpexcept.strict") #1274 ret ppc_fp128 %add275}276 277define ppc_fp128 @test_sqrt_ppc_fp128(ppc_fp128 %first) #0 {278; PC64LE-LABEL: test_sqrt_ppc_fp128:279; PC64LE: # %bb.0: # %entry280; PC64LE-NEXT: mflr 0281; PC64LE-NEXT: stdu 1, -32(1)282; PC64LE-NEXT: std 0, 48(1)283; PC64LE-NEXT: bl sqrtl284; PC64LE-NEXT: nop285; PC64LE-NEXT: addi 1, 1, 32286; PC64LE-NEXT: ld 0, 16(1)287; PC64LE-NEXT: mtlr 0288; PC64LE-NEXT: blr289;290; PC64LE9-LABEL: test_sqrt_ppc_fp128:291; PC64LE9: # %bb.0: # %entry292; PC64LE9-NEXT: mflr 0293; PC64LE9-NEXT: stdu 1, -32(1)294; PC64LE9-NEXT: std 0, 48(1)295; PC64LE9-NEXT: bl sqrtl296; PC64LE9-NEXT: nop297; PC64LE9-NEXT: addi 1, 1, 32298; PC64LE9-NEXT: ld 0, 16(1)299; PC64LE9-NEXT: mtlr 0300; PC64LE9-NEXT: blr301;302; PC64-LABEL: test_sqrt_ppc_fp128:303; PC64: # %bb.0: # %entry304; PC64-NEXT: mflr 0305; PC64-NEXT: stdu 1, -112(1)306; PC64-NEXT: std 0, 128(1)307; PC64-NEXT: bl sqrtl308; PC64-NEXT: nop309; PC64-NEXT: addi 1, 1, 112310; PC64-NEXT: ld 0, 16(1)311; PC64-NEXT: mtlr 0312; PC64-NEXT: blr313entry:314 %sqrt = call ppc_fp128 @llvm.experimental.constrained.sqrt.ppcf128(315 ppc_fp128 %first,316 metadata !"round.dynamic",317 metadata !"fpexcept.strict") #1318 ret ppc_fp128 %sqrt319}320 321define ppc_fp128 @test_pow_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {322; PC64LE-LABEL: test_pow_ppc_fp128:323; PC64LE: # %bb.0: # %entry324; PC64LE-NEXT: mflr 0325; PC64LE-NEXT: stdu 1, -32(1)326; PC64LE-NEXT: std 0, 48(1)327; PC64LE-NEXT: bl powl328; PC64LE-NEXT: nop329; PC64LE-NEXT: addi 1, 1, 32330; PC64LE-NEXT: ld 0, 16(1)331; PC64LE-NEXT: mtlr 0332; PC64LE-NEXT: blr333;334; PC64LE9-LABEL: test_pow_ppc_fp128:335; PC64LE9: # %bb.0: # %entry336; PC64LE9-NEXT: mflr 0337; PC64LE9-NEXT: stdu 1, -32(1)338; PC64LE9-NEXT: std 0, 48(1)339; PC64LE9-NEXT: bl powl340; PC64LE9-NEXT: nop341; PC64LE9-NEXT: addi 1, 1, 32342; PC64LE9-NEXT: ld 0, 16(1)343; PC64LE9-NEXT: mtlr 0344; PC64LE9-NEXT: blr345;346; PC64-LABEL: test_pow_ppc_fp128:347; PC64: # %bb.0: # %entry348; PC64-NEXT: mflr 0349; PC64-NEXT: stdu 1, -112(1)350; PC64-NEXT: std 0, 128(1)351; PC64-NEXT: bl powl352; PC64-NEXT: nop353; PC64-NEXT: addi 1, 1, 112354; PC64-NEXT: ld 0, 16(1)355; PC64-NEXT: mtlr 0356; PC64-NEXT: blr357entry:358 %pow = call ppc_fp128 @llvm.experimental.constrained.pow.ppcf128(359 ppc_fp128 %first,360 ppc_fp128 %second,361 metadata !"round.dynamic",362 metadata !"fpexcept.strict") #1363 ret ppc_fp128 %pow364}365 366define ppc_fp128 @test_powi_ppc_fp128(ppc_fp128 %first, i32 %second) #0 {367; PC64LE-LABEL: test_powi_ppc_fp128:368; PC64LE: # %bb.0: # %entry369; PC64LE-NEXT: mflr 0370; PC64LE-NEXT: stdu 1, -32(1)371; PC64LE-NEXT: clrldi 5, 5, 32372; PC64LE-NEXT: std 0, 48(1)373; PC64LE-NEXT: bl __powitf2374; PC64LE-NEXT: nop375; PC64LE-NEXT: addi 1, 1, 32376; PC64LE-NEXT: ld 0, 16(1)377; PC64LE-NEXT: mtlr 0378; PC64LE-NEXT: blr379;380; PC64LE9-LABEL: test_powi_ppc_fp128:381; PC64LE9: # %bb.0: # %entry382; PC64LE9-NEXT: mflr 0383; PC64LE9-NEXT: stdu 1, -32(1)384; PC64LE9-NEXT: clrldi 5, 5, 32385; PC64LE9-NEXT: std 0, 48(1)386; PC64LE9-NEXT: bl __powitf2387; PC64LE9-NEXT: nop388; PC64LE9-NEXT: addi 1, 1, 32389; PC64LE9-NEXT: ld 0, 16(1)390; PC64LE9-NEXT: mtlr 0391; PC64LE9-NEXT: blr392;393; PC64-LABEL: test_powi_ppc_fp128:394; PC64: # %bb.0: # %entry395; PC64-NEXT: mflr 0396; PC64-NEXT: stdu 1, -112(1)397; PC64-NEXT: clrldi 5, 5, 32398; PC64-NEXT: std 0, 128(1)399; PC64-NEXT: bl __powitf2400; PC64-NEXT: nop401; PC64-NEXT: addi 1, 1, 112402; PC64-NEXT: ld 0, 16(1)403; PC64-NEXT: mtlr 0404; PC64-NEXT: blr405entry:406 %powi = call ppc_fp128 @llvm.experimental.constrained.powi.ppcf128(407 ppc_fp128 %first,408 i32 %second,409 metadata !"round.dynamic",410 metadata !"fpexcept.strict") #1411 ret ppc_fp128 %powi412}413 414define ppc_fp128 @test_sin_ppc_fp128(ppc_fp128 %first) #0 {415; PC64LE-LABEL: test_sin_ppc_fp128:416; PC64LE: # %bb.0: # %entry417; PC64LE-NEXT: mflr 0418; PC64LE-NEXT: stdu 1, -32(1)419; PC64LE-NEXT: std 0, 48(1)420; PC64LE-NEXT: bl sinl421; PC64LE-NEXT: nop422; PC64LE-NEXT: addi 1, 1, 32423; PC64LE-NEXT: ld 0, 16(1)424; PC64LE-NEXT: mtlr 0425; PC64LE-NEXT: blr426;427; PC64LE9-LABEL: test_sin_ppc_fp128:428; PC64LE9: # %bb.0: # %entry429; PC64LE9-NEXT: mflr 0430; PC64LE9-NEXT: stdu 1, -32(1)431; PC64LE9-NEXT: std 0, 48(1)432; PC64LE9-NEXT: bl sinl433; PC64LE9-NEXT: nop434; PC64LE9-NEXT: addi 1, 1, 32435; PC64LE9-NEXT: ld 0, 16(1)436; PC64LE9-NEXT: mtlr 0437; PC64LE9-NEXT: blr438;439; PC64-LABEL: test_sin_ppc_fp128:440; PC64: # %bb.0: # %entry441; PC64-NEXT: mflr 0442; PC64-NEXT: stdu 1, -112(1)443; PC64-NEXT: std 0, 128(1)444; PC64-NEXT: bl sinl445; PC64-NEXT: nop446; PC64-NEXT: addi 1, 1, 112447; PC64-NEXT: ld 0, 16(1)448; PC64-NEXT: mtlr 0449; PC64-NEXT: blr450entry:451 %sin = call ppc_fp128 @llvm.experimental.constrained.sin.ppcf128(452 ppc_fp128 %first,453 metadata !"round.dynamic",454 metadata !"fpexcept.strict") #1455 ret ppc_fp128 %sin456}457 458define ppc_fp128 @test_cos_ppc_fp128(ppc_fp128 %first) #0 {459; PC64LE-LABEL: test_cos_ppc_fp128:460; PC64LE: # %bb.0: # %entry461; PC64LE-NEXT: mflr 0462; PC64LE-NEXT: stdu 1, -32(1)463; PC64LE-NEXT: std 0, 48(1)464; PC64LE-NEXT: bl cosl465; PC64LE-NEXT: nop466; PC64LE-NEXT: addi 1, 1, 32467; PC64LE-NEXT: ld 0, 16(1)468; PC64LE-NEXT: mtlr 0469; PC64LE-NEXT: blr470;471; PC64LE9-LABEL: test_cos_ppc_fp128:472; PC64LE9: # %bb.0: # %entry473; PC64LE9-NEXT: mflr 0474; PC64LE9-NEXT: stdu 1, -32(1)475; PC64LE9-NEXT: std 0, 48(1)476; PC64LE9-NEXT: bl cosl477; PC64LE9-NEXT: nop478; PC64LE9-NEXT: addi 1, 1, 32479; PC64LE9-NEXT: ld 0, 16(1)480; PC64LE9-NEXT: mtlr 0481; PC64LE9-NEXT: blr482;483; PC64-LABEL: test_cos_ppc_fp128:484; PC64: # %bb.0: # %entry485; PC64-NEXT: mflr 0486; PC64-NEXT: stdu 1, -112(1)487; PC64-NEXT: std 0, 128(1)488; PC64-NEXT: bl cosl489; PC64-NEXT: nop490; PC64-NEXT: addi 1, 1, 112491; PC64-NEXT: ld 0, 16(1)492; PC64-NEXT: mtlr 0493; PC64-NEXT: blr494entry:495 %cos = call ppc_fp128 @llvm.experimental.constrained.cos.ppcf128(496 ppc_fp128 %first,497 metadata !"round.dynamic",498 metadata !"fpexcept.strict") #1499 ret ppc_fp128 %cos500}501 502define ppc_fp128 @test_exp_ppc_fp128(ppc_fp128 %first) #0 {503; PC64LE-LABEL: test_exp_ppc_fp128:504; PC64LE: # %bb.0: # %entry505; PC64LE-NEXT: mflr 0506; PC64LE-NEXT: stdu 1, -32(1)507; PC64LE-NEXT: std 0, 48(1)508; PC64LE-NEXT: bl expl509; PC64LE-NEXT: nop510; PC64LE-NEXT: addi 1, 1, 32511; PC64LE-NEXT: ld 0, 16(1)512; PC64LE-NEXT: mtlr 0513; PC64LE-NEXT: blr514;515; PC64LE9-LABEL: test_exp_ppc_fp128:516; PC64LE9: # %bb.0: # %entry517; PC64LE9-NEXT: mflr 0518; PC64LE9-NEXT: stdu 1, -32(1)519; PC64LE9-NEXT: std 0, 48(1)520; PC64LE9-NEXT: bl expl521; PC64LE9-NEXT: nop522; PC64LE9-NEXT: addi 1, 1, 32523; PC64LE9-NEXT: ld 0, 16(1)524; PC64LE9-NEXT: mtlr 0525; PC64LE9-NEXT: blr526;527; PC64-LABEL: test_exp_ppc_fp128:528; PC64: # %bb.0: # %entry529; PC64-NEXT: mflr 0530; PC64-NEXT: stdu 1, -112(1)531; PC64-NEXT: std 0, 128(1)532; PC64-NEXT: bl expl533; PC64-NEXT: nop534; PC64-NEXT: addi 1, 1, 112535; PC64-NEXT: ld 0, 16(1)536; PC64-NEXT: mtlr 0537; PC64-NEXT: blr538entry:539 %exp = call ppc_fp128 @llvm.experimental.constrained.exp.ppcf128(540 ppc_fp128 %first,541 metadata !"round.dynamic",542 metadata !"fpexcept.strict") #1543 ret ppc_fp128 %exp544}545 546define ppc_fp128 @test_exp2_ppc_fp128(ppc_fp128 %first) #0 {547; PC64LE-LABEL: test_exp2_ppc_fp128:548; PC64LE: # %bb.0: # %entry549; PC64LE-NEXT: mflr 0550; PC64LE-NEXT: stdu 1, -32(1)551; PC64LE-NEXT: std 0, 48(1)552; PC64LE-NEXT: bl exp2l553; PC64LE-NEXT: nop554; PC64LE-NEXT: addi 1, 1, 32555; PC64LE-NEXT: ld 0, 16(1)556; PC64LE-NEXT: mtlr 0557; PC64LE-NEXT: blr558;559; PC64LE9-LABEL: test_exp2_ppc_fp128:560; PC64LE9: # %bb.0: # %entry561; PC64LE9-NEXT: mflr 0562; PC64LE9-NEXT: stdu 1, -32(1)563; PC64LE9-NEXT: std 0, 48(1)564; PC64LE9-NEXT: bl exp2l565; PC64LE9-NEXT: nop566; PC64LE9-NEXT: addi 1, 1, 32567; PC64LE9-NEXT: ld 0, 16(1)568; PC64LE9-NEXT: mtlr 0569; PC64LE9-NEXT: blr570;571; PC64-LABEL: test_exp2_ppc_fp128:572; PC64: # %bb.0: # %entry573; PC64-NEXT: mflr 0574; PC64-NEXT: stdu 1, -112(1)575; PC64-NEXT: std 0, 128(1)576; PC64-NEXT: bl exp2l577; PC64-NEXT: nop578; PC64-NEXT: addi 1, 1, 112579; PC64-NEXT: ld 0, 16(1)580; PC64-NEXT: mtlr 0581; PC64-NEXT: blr582entry:583 %exp2 = call ppc_fp128 @llvm.experimental.constrained.exp2.ppcf128(584 ppc_fp128 %first,585 metadata !"round.dynamic",586 metadata !"fpexcept.strict") #1587 ret ppc_fp128 %exp2588}589 590define ppc_fp128 @test_log_ppc_fp128(ppc_fp128 %first) #0 {591; PC64LE-LABEL: test_log_ppc_fp128:592; PC64LE: # %bb.0: # %entry593; PC64LE-NEXT: mflr 0594; PC64LE-NEXT: stdu 1, -32(1)595; PC64LE-NEXT: std 0, 48(1)596; PC64LE-NEXT: bl logl597; PC64LE-NEXT: nop598; PC64LE-NEXT: addi 1, 1, 32599; PC64LE-NEXT: ld 0, 16(1)600; PC64LE-NEXT: mtlr 0601; PC64LE-NEXT: blr602;603; PC64LE9-LABEL: test_log_ppc_fp128:604; PC64LE9: # %bb.0: # %entry605; PC64LE9-NEXT: mflr 0606; PC64LE9-NEXT: stdu 1, -32(1)607; PC64LE9-NEXT: std 0, 48(1)608; PC64LE9-NEXT: bl logl609; PC64LE9-NEXT: nop610; PC64LE9-NEXT: addi 1, 1, 32611; PC64LE9-NEXT: ld 0, 16(1)612; PC64LE9-NEXT: mtlr 0613; PC64LE9-NEXT: blr614;615; PC64-LABEL: test_log_ppc_fp128:616; PC64: # %bb.0: # %entry617; PC64-NEXT: mflr 0618; PC64-NEXT: stdu 1, -112(1)619; PC64-NEXT: std 0, 128(1)620; PC64-NEXT: bl logl621; PC64-NEXT: nop622; PC64-NEXT: addi 1, 1, 112623; PC64-NEXT: ld 0, 16(1)624; PC64-NEXT: mtlr 0625; PC64-NEXT: blr626entry:627 %log = call ppc_fp128 @llvm.experimental.constrained.log.ppcf128(628 ppc_fp128 %first,629 metadata !"round.dynamic",630 metadata !"fpexcept.strict") #1631 ret ppc_fp128 %log632}633 634define ppc_fp128 @test_log2_ppc_fp128(ppc_fp128 %first) #0 {635; PC64LE-LABEL: test_log2_ppc_fp128:636; PC64LE: # %bb.0: # %entry637; PC64LE-NEXT: mflr 0638; PC64LE-NEXT: stdu 1, -32(1)639; PC64LE-NEXT: std 0, 48(1)640; PC64LE-NEXT: bl log2l641; PC64LE-NEXT: nop642; PC64LE-NEXT: addi 1, 1, 32643; PC64LE-NEXT: ld 0, 16(1)644; PC64LE-NEXT: mtlr 0645; PC64LE-NEXT: blr646;647; PC64LE9-LABEL: test_log2_ppc_fp128:648; PC64LE9: # %bb.0: # %entry649; PC64LE9-NEXT: mflr 0650; PC64LE9-NEXT: stdu 1, -32(1)651; PC64LE9-NEXT: std 0, 48(1)652; PC64LE9-NEXT: bl log2l653; PC64LE9-NEXT: nop654; PC64LE9-NEXT: addi 1, 1, 32655; PC64LE9-NEXT: ld 0, 16(1)656; PC64LE9-NEXT: mtlr 0657; PC64LE9-NEXT: blr658;659; PC64-LABEL: test_log2_ppc_fp128:660; PC64: # %bb.0: # %entry661; PC64-NEXT: mflr 0662; PC64-NEXT: stdu 1, -112(1)663; PC64-NEXT: std 0, 128(1)664; PC64-NEXT: bl log2l665; PC64-NEXT: nop666; PC64-NEXT: addi 1, 1, 112667; PC64-NEXT: ld 0, 16(1)668; PC64-NEXT: mtlr 0669; PC64-NEXT: blr670entry:671 %log2 = call ppc_fp128 @llvm.experimental.constrained.log2.ppcf128(672 ppc_fp128 %first,673 metadata !"round.dynamic",674 metadata !"fpexcept.strict") #1675 ret ppc_fp128 %log2676}677 678define ppc_fp128 @test_log10_ppc_fp128(ppc_fp128 %first) #0 {679; PC64LE-LABEL: test_log10_ppc_fp128:680; PC64LE: # %bb.0: # %entry681; PC64LE-NEXT: mflr 0682; PC64LE-NEXT: stdu 1, -32(1)683; PC64LE-NEXT: std 0, 48(1)684; PC64LE-NEXT: bl log10l685; PC64LE-NEXT: nop686; PC64LE-NEXT: addi 1, 1, 32687; PC64LE-NEXT: ld 0, 16(1)688; PC64LE-NEXT: mtlr 0689; PC64LE-NEXT: blr690;691; PC64LE9-LABEL: test_log10_ppc_fp128:692; PC64LE9: # %bb.0: # %entry693; PC64LE9-NEXT: mflr 0694; PC64LE9-NEXT: stdu 1, -32(1)695; PC64LE9-NEXT: std 0, 48(1)696; PC64LE9-NEXT: bl log10l697; PC64LE9-NEXT: nop698; PC64LE9-NEXT: addi 1, 1, 32699; PC64LE9-NEXT: ld 0, 16(1)700; PC64LE9-NEXT: mtlr 0701; PC64LE9-NEXT: blr702;703; PC64-LABEL: test_log10_ppc_fp128:704; PC64: # %bb.0: # %entry705; PC64-NEXT: mflr 0706; PC64-NEXT: stdu 1, -112(1)707; PC64-NEXT: std 0, 128(1)708; PC64-NEXT: bl log10l709; PC64-NEXT: nop710; PC64-NEXT: addi 1, 1, 112711; PC64-NEXT: ld 0, 16(1)712; PC64-NEXT: mtlr 0713; PC64-NEXT: blr714entry:715 %log10 = call ppc_fp128 @llvm.experimental.constrained.log10.ppcf128(716 ppc_fp128 %first,717 metadata !"round.dynamic",718 metadata !"fpexcept.strict") #1719 ret ppc_fp128 %log10720}721 722define ppc_fp128 @test_rint_ppc_fp128(ppc_fp128 %first) #0 {723; PC64LE-LABEL: test_rint_ppc_fp128:724; PC64LE: # %bb.0: # %entry725; PC64LE-NEXT: mflr 0726; PC64LE-NEXT: stdu 1, -32(1)727; PC64LE-NEXT: std 0, 48(1)728; PC64LE-NEXT: bl rintl729; PC64LE-NEXT: nop730; PC64LE-NEXT: addi 1, 1, 32731; PC64LE-NEXT: ld 0, 16(1)732; PC64LE-NEXT: mtlr 0733; PC64LE-NEXT: blr734;735; PC64LE9-LABEL: test_rint_ppc_fp128:736; PC64LE9: # %bb.0: # %entry737; PC64LE9-NEXT: mflr 0738; PC64LE9-NEXT: stdu 1, -32(1)739; PC64LE9-NEXT: std 0, 48(1)740; PC64LE9-NEXT: bl rintl741; PC64LE9-NEXT: nop742; PC64LE9-NEXT: addi 1, 1, 32743; PC64LE9-NEXT: ld 0, 16(1)744; PC64LE9-NEXT: mtlr 0745; PC64LE9-NEXT: blr746;747; PC64-LABEL: test_rint_ppc_fp128:748; PC64: # %bb.0: # %entry749; PC64-NEXT: mflr 0750; PC64-NEXT: stdu 1, -112(1)751; PC64-NEXT: std 0, 128(1)752; PC64-NEXT: bl rintl753; PC64-NEXT: nop754; PC64-NEXT: addi 1, 1, 112755; PC64-NEXT: ld 0, 16(1)756; PC64-NEXT: mtlr 0757; PC64-NEXT: blr758entry:759 %rint = call ppc_fp128 @llvm.experimental.constrained.rint.ppcf128(760 ppc_fp128 %first,761 metadata !"round.dynamic",762 metadata !"fpexcept.strict") #1763 ret ppc_fp128 %rint764}765 766define ppc_fp128 @test_nearbyint_ppc_fp128(ppc_fp128 %first) #0 {767; PC64LE-LABEL: test_nearbyint_ppc_fp128:768; PC64LE: # %bb.0: # %entry769; PC64LE-NEXT: mflr 0770; PC64LE-NEXT: stdu 1, -32(1)771; PC64LE-NEXT: std 0, 48(1)772; PC64LE-NEXT: bl nearbyintl773; PC64LE-NEXT: nop774; PC64LE-NEXT: addi 1, 1, 32775; PC64LE-NEXT: ld 0, 16(1)776; PC64LE-NEXT: mtlr 0777; PC64LE-NEXT: blr778;779; PC64LE9-LABEL: test_nearbyint_ppc_fp128:780; PC64LE9: # %bb.0: # %entry781; PC64LE9-NEXT: mflr 0782; PC64LE9-NEXT: stdu 1, -32(1)783; PC64LE9-NEXT: std 0, 48(1)784; PC64LE9-NEXT: bl nearbyintl785; PC64LE9-NEXT: nop786; PC64LE9-NEXT: addi 1, 1, 32787; PC64LE9-NEXT: ld 0, 16(1)788; PC64LE9-NEXT: mtlr 0789; PC64LE9-NEXT: blr790;791; PC64-LABEL: test_nearbyint_ppc_fp128:792; PC64: # %bb.0: # %entry793; PC64-NEXT: mflr 0794; PC64-NEXT: stdu 1, -112(1)795; PC64-NEXT: std 0, 128(1)796; PC64-NEXT: bl nearbyintl797; PC64-NEXT: nop798; PC64-NEXT: addi 1, 1, 112799; PC64-NEXT: ld 0, 16(1)800; PC64-NEXT: mtlr 0801; PC64-NEXT: blr802entry:803 %nearbyint = call ppc_fp128 @llvm.experimental.constrained.nearbyint.ppcf128(804 ppc_fp128 %first,805 metadata !"round.dynamic",806 metadata !"fpexcept.strict") #1807 ret ppc_fp128 %nearbyint808}809 810define ppc_fp128 @test_maxnum_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {811; PC64LE-LABEL: test_maxnum_ppc_fp128:812; PC64LE: # %bb.0: # %entry813; PC64LE-NEXT: mflr 0814; PC64LE-NEXT: stdu 1, -32(1)815; PC64LE-NEXT: std 0, 48(1)816; PC64LE-NEXT: bl fmaxl817; PC64LE-NEXT: nop818; PC64LE-NEXT: addi 1, 1, 32819; PC64LE-NEXT: ld 0, 16(1)820; PC64LE-NEXT: mtlr 0821; PC64LE-NEXT: blr822;823; PC64LE9-LABEL: test_maxnum_ppc_fp128:824; PC64LE9: # %bb.0: # %entry825; PC64LE9-NEXT: mflr 0826; PC64LE9-NEXT: stdu 1, -32(1)827; PC64LE9-NEXT: std 0, 48(1)828; PC64LE9-NEXT: bl fmaxl829; PC64LE9-NEXT: nop830; PC64LE9-NEXT: addi 1, 1, 32831; PC64LE9-NEXT: ld 0, 16(1)832; PC64LE9-NEXT: mtlr 0833; PC64LE9-NEXT: blr834;835; PC64-LABEL: test_maxnum_ppc_fp128:836; PC64: # %bb.0: # %entry837; PC64-NEXT: mflr 0838; PC64-NEXT: stdu 1, -112(1)839; PC64-NEXT: std 0, 128(1)840; PC64-NEXT: bl fmaxl841; PC64-NEXT: nop842; PC64-NEXT: addi 1, 1, 112843; PC64-NEXT: ld 0, 16(1)844; PC64-NEXT: mtlr 0845; PC64-NEXT: blr846entry:847 %maxnum = call ppc_fp128 @llvm.experimental.constrained.maxnum.ppcf128(848 ppc_fp128 %first,849 ppc_fp128 %second,850 metadata !"fpexcept.strict") #1851 ret ppc_fp128 %maxnum852}853 854define ppc_fp128 @test_minnum_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {855; PC64LE-LABEL: test_minnum_ppc_fp128:856; PC64LE: # %bb.0: # %entry857; PC64LE-NEXT: mflr 0858; PC64LE-NEXT: stdu 1, -32(1)859; PC64LE-NEXT: std 0, 48(1)860; PC64LE-NEXT: bl fminl861; PC64LE-NEXT: nop862; PC64LE-NEXT: addi 1, 1, 32863; PC64LE-NEXT: ld 0, 16(1)864; PC64LE-NEXT: mtlr 0865; PC64LE-NEXT: blr866;867; PC64LE9-LABEL: test_minnum_ppc_fp128:868; PC64LE9: # %bb.0: # %entry869; PC64LE9-NEXT: mflr 0870; PC64LE9-NEXT: stdu 1, -32(1)871; PC64LE9-NEXT: std 0, 48(1)872; PC64LE9-NEXT: bl fminl873; PC64LE9-NEXT: nop874; PC64LE9-NEXT: addi 1, 1, 32875; PC64LE9-NEXT: ld 0, 16(1)876; PC64LE9-NEXT: mtlr 0877; PC64LE9-NEXT: blr878;879; PC64-LABEL: test_minnum_ppc_fp128:880; PC64: # %bb.0: # %entry881; PC64-NEXT: mflr 0882; PC64-NEXT: stdu 1, -112(1)883; PC64-NEXT: std 0, 128(1)884; PC64-NEXT: bl fminl885; PC64-NEXT: nop886; PC64-NEXT: addi 1, 1, 112887; PC64-NEXT: ld 0, 16(1)888; PC64-NEXT: mtlr 0889; PC64-NEXT: blr890entry:891 %minnum = call ppc_fp128 @llvm.experimental.constrained.minnum.ppcf128(892 ppc_fp128 %first,893 ppc_fp128 %second,894 metadata !"fpexcept.strict") #1895 ret ppc_fp128 %minnum896}897 898define ppc_fp128 @test_ceil_ppc_fp128(ppc_fp128 %first) #0 {899; PC64LE-LABEL: test_ceil_ppc_fp128:900; PC64LE: # %bb.0: # %entry901; PC64LE-NEXT: mflr 0902; PC64LE-NEXT: stdu 1, -32(1)903; PC64LE-NEXT: std 0, 48(1)904; PC64LE-NEXT: bl ceill905; PC64LE-NEXT: nop906; PC64LE-NEXT: addi 1, 1, 32907; PC64LE-NEXT: ld 0, 16(1)908; PC64LE-NEXT: mtlr 0909; PC64LE-NEXT: blr910;911; PC64LE9-LABEL: test_ceil_ppc_fp128:912; PC64LE9: # %bb.0: # %entry913; PC64LE9-NEXT: mflr 0914; PC64LE9-NEXT: stdu 1, -32(1)915; PC64LE9-NEXT: std 0, 48(1)916; PC64LE9-NEXT: bl ceill917; PC64LE9-NEXT: nop918; PC64LE9-NEXT: addi 1, 1, 32919; PC64LE9-NEXT: ld 0, 16(1)920; PC64LE9-NEXT: mtlr 0921; PC64LE9-NEXT: blr922;923; PC64-LABEL: test_ceil_ppc_fp128:924; PC64: # %bb.0: # %entry925; PC64-NEXT: mflr 0926; PC64-NEXT: stdu 1, -112(1)927; PC64-NEXT: std 0, 128(1)928; PC64-NEXT: bl ceill929; PC64-NEXT: nop930; PC64-NEXT: addi 1, 1, 112931; PC64-NEXT: ld 0, 16(1)932; PC64-NEXT: mtlr 0933; PC64-NEXT: blr934entry:935 %ceil = call ppc_fp128 @llvm.experimental.constrained.ceil.ppcf128(936 ppc_fp128 %first,937 metadata !"fpexcept.strict") #1938 ret ppc_fp128 %ceil939}940 941define ppc_fp128 @test_floor_ppc_fp128(ppc_fp128 %first) #0 {942; PC64LE-LABEL: test_floor_ppc_fp128:943; PC64LE: # %bb.0: # %entry944; PC64LE-NEXT: mflr 0945; PC64LE-NEXT: stdu 1, -32(1)946; PC64LE-NEXT: std 0, 48(1)947; PC64LE-NEXT: bl floorl948; PC64LE-NEXT: nop949; PC64LE-NEXT: addi 1, 1, 32950; PC64LE-NEXT: ld 0, 16(1)951; PC64LE-NEXT: mtlr 0952; PC64LE-NEXT: blr953;954; PC64LE9-LABEL: test_floor_ppc_fp128:955; PC64LE9: # %bb.0: # %entry956; PC64LE9-NEXT: mflr 0957; PC64LE9-NEXT: stdu 1, -32(1)958; PC64LE9-NEXT: std 0, 48(1)959; PC64LE9-NEXT: bl floorl960; PC64LE9-NEXT: nop961; PC64LE9-NEXT: addi 1, 1, 32962; PC64LE9-NEXT: ld 0, 16(1)963; PC64LE9-NEXT: mtlr 0964; PC64LE9-NEXT: blr965;966; PC64-LABEL: test_floor_ppc_fp128:967; PC64: # %bb.0: # %entry968; PC64-NEXT: mflr 0969; PC64-NEXT: stdu 1, -112(1)970; PC64-NEXT: std 0, 128(1)971; PC64-NEXT: bl floorl972; PC64-NEXT: nop973; PC64-NEXT: addi 1, 1, 112974; PC64-NEXT: ld 0, 16(1)975; PC64-NEXT: mtlr 0976; PC64-NEXT: blr977entry:978 %floor = call ppc_fp128 @llvm.experimental.constrained.floor.ppcf128(979 ppc_fp128 %first,980 metadata !"fpexcept.strict") #1981 ret ppc_fp128 %floor982}983 984define ppc_fp128 @test_round_ppc_fp128(ppc_fp128 %first) #0 {985; PC64LE-LABEL: test_round_ppc_fp128:986; PC64LE: # %bb.0: # %entry987; PC64LE-NEXT: mflr 0988; PC64LE-NEXT: stdu 1, -32(1)989; PC64LE-NEXT: std 0, 48(1)990; PC64LE-NEXT: bl roundl991; PC64LE-NEXT: nop992; PC64LE-NEXT: addi 1, 1, 32993; PC64LE-NEXT: ld 0, 16(1)994; PC64LE-NEXT: mtlr 0995; PC64LE-NEXT: blr996;997; PC64LE9-LABEL: test_round_ppc_fp128:998; PC64LE9: # %bb.0: # %entry999; PC64LE9-NEXT: mflr 01000; PC64LE9-NEXT: stdu 1, -32(1)1001; PC64LE9-NEXT: std 0, 48(1)1002; PC64LE9-NEXT: bl roundl1003; PC64LE9-NEXT: nop1004; PC64LE9-NEXT: addi 1, 1, 321005; PC64LE9-NEXT: ld 0, 16(1)1006; PC64LE9-NEXT: mtlr 01007; PC64LE9-NEXT: blr1008;1009; PC64-LABEL: test_round_ppc_fp128:1010; PC64: # %bb.0: # %entry1011; PC64-NEXT: mflr 01012; PC64-NEXT: stdu 1, -112(1)1013; PC64-NEXT: std 0, 128(1)1014; PC64-NEXT: bl roundl1015; PC64-NEXT: nop1016; PC64-NEXT: addi 1, 1, 1121017; PC64-NEXT: ld 0, 16(1)1018; PC64-NEXT: mtlr 01019; PC64-NEXT: blr1020entry:1021 %round = call ppc_fp128 @llvm.experimental.constrained.round.ppcf128(1022 ppc_fp128 %first,1023 metadata !"fpexcept.strict") #11024 ret ppc_fp128 %round1025}1026 1027define ppc_fp128 @test_trunc_ppc_fp128(ppc_fp128 %first) #0 {1028; PC64LE-LABEL: test_trunc_ppc_fp128:1029; PC64LE: # %bb.0: # %entry1030; PC64LE-NEXT: mflr 01031; PC64LE-NEXT: stdu 1, -32(1)1032; PC64LE-NEXT: std 0, 48(1)1033; PC64LE-NEXT: bl truncl1034; PC64LE-NEXT: nop1035; PC64LE-NEXT: addi 1, 1, 321036; PC64LE-NEXT: ld 0, 16(1)1037; PC64LE-NEXT: mtlr 01038; PC64LE-NEXT: blr1039;1040; PC64LE9-LABEL: test_trunc_ppc_fp128:1041; PC64LE9: # %bb.0: # %entry1042; PC64LE9-NEXT: mflr 01043; PC64LE9-NEXT: stdu 1, -32(1)1044; PC64LE9-NEXT: std 0, 48(1)1045; PC64LE9-NEXT: bl truncl1046; PC64LE9-NEXT: nop1047; PC64LE9-NEXT: addi 1, 1, 321048; PC64LE9-NEXT: ld 0, 16(1)1049; PC64LE9-NEXT: mtlr 01050; PC64LE9-NEXT: blr1051;1052; PC64-LABEL: test_trunc_ppc_fp128:1053; PC64: # %bb.0: # %entry1054; PC64-NEXT: mflr 01055; PC64-NEXT: stdu 1, -112(1)1056; PC64-NEXT: std 0, 128(1)1057; PC64-NEXT: bl truncl1058; PC64-NEXT: nop1059; PC64-NEXT: addi 1, 1, 1121060; PC64-NEXT: ld 0, 16(1)1061; PC64-NEXT: mtlr 01062; PC64-NEXT: blr1063entry:1064 %trunc = call ppc_fp128 @llvm.experimental.constrained.trunc.ppcf128(1065 ppc_fp128 %first,1066 metadata !"fpexcept.strict") #11067 ret ppc_fp128 %trunc1068}1069 1070define float @test_fptrunc_ppc_fp128_f32(ppc_fp128 %first) #0 {1071; PC64LE-LABEL: test_fptrunc_ppc_fp128_f32:1072; PC64LE: # %bb.0: # %entry1073; PC64LE-NEXT: xsrsp 1, 11074; PC64LE-NEXT: blr1075;1076; PC64LE9-LABEL: test_fptrunc_ppc_fp128_f32:1077; PC64LE9: # %bb.0: # %entry1078; PC64LE9-NEXT: xsrsp 1, 11079; PC64LE9-NEXT: blr1080;1081; PC64-LABEL: test_fptrunc_ppc_fp128_f32:1082; PC64: # %bb.0: # %entry1083; PC64-NEXT: frsp 1, 11084; PC64-NEXT: blr1085entry:1086 %fptrunc = call float @llvm.experimental.constrained.fptrunc.f32.ppcf128.f32(1087 ppc_fp128 %first,1088 metadata !"round.dynamic",1089 metadata !"fpexcept.strict") #11090 ret float %fptrunc1091}1092 1093define double @test_fptrunc_ppc_fp128_f64(ppc_fp128 %first) #0 {1094; PC64LE-LABEL: test_fptrunc_ppc_fp128_f64:1095; PC64LE: # %bb.0: # %entry1096; PC64LE-NEXT: blr1097;1098; PC64LE9-LABEL: test_fptrunc_ppc_fp128_f64:1099; PC64LE9: # %bb.0: # %entry1100; PC64LE9-NEXT: blr1101;1102; PC64-LABEL: test_fptrunc_ppc_fp128_f64:1103; PC64: # %bb.0: # %entry1104; PC64-NEXT: blr1105entry:1106 %fptrunc = call double @llvm.experimental.constrained.fptrunc.f64.ppcf128(1107 ppc_fp128 %first,1108 metadata !"round.dynamic",1109 metadata !"fpexcept.strict") #11110 ret double %fptrunc1111}1112 1113define ppc_fp128 @test_fpext_ppc_fp128_f32(float %first) #0 {1114; PC64LE-LABEL: test_fpext_ppc_fp128_f32:1115; PC64LE: # %bb.0: # %entry1116; PC64LE-NEXT: xxlxor 2, 2, 21117; PC64LE-NEXT: blr1118;1119; PC64LE9-LABEL: test_fpext_ppc_fp128_f32:1120; PC64LE9: # %bb.0: # %entry1121; PC64LE9-NEXT: xxlxor 2, 2, 21122; PC64LE9-NEXT: blr1123;1124; PC64-LABEL: test_fpext_ppc_fp128_f32:1125; PC64: # %bb.0: # %entry1126; PC64-NEXT: addis 3, 2, .LCPI26_0@toc@ha1127; PC64-NEXT: lfs 2, .LCPI26_0@toc@l(3)1128; PC64-NEXT: blr1129entry:1130 %fpext = call ppc_fp128 @llvm.experimental.constrained.fpext.ppcf128.f32(1131 float %first,1132 metadata !"fpexcept.strict") #11133 ret ppc_fp128 %fpext1134}1135 1136define ppc_fp128 @test_fpext_ppc_fp128_f64(double %first) #0 {1137; PC64LE-LABEL: test_fpext_ppc_fp128_f64:1138; PC64LE: # %bb.0: # %entry1139; PC64LE-NEXT: xxlxor 2, 2, 21140; PC64LE-NEXT: blr1141;1142; PC64LE9-LABEL: test_fpext_ppc_fp128_f64:1143; PC64LE9: # %bb.0: # %entry1144; PC64LE9-NEXT: xxlxor 2, 2, 21145; PC64LE9-NEXT: blr1146;1147; PC64-LABEL: test_fpext_ppc_fp128_f64:1148; PC64: # %bb.0: # %entry1149; PC64-NEXT: addis 3, 2, .LCPI27_0@toc@ha1150; PC64-NEXT: lfs 2, .LCPI27_0@toc@l(3)1151; PC64-NEXT: blr1152entry:1153 %fpext = call ppc_fp128 @llvm.experimental.constrained.fpext.ppcf128.f64(1154 double %first,1155 metadata !"fpexcept.strict") #11156 ret ppc_fp128 %fpext1157}1158 1159define i64 @test_fptosi_ppc_i64_ppc_fp128(ppc_fp128 %first) #0 {1160; PC64LE-LABEL: test_fptosi_ppc_i64_ppc_fp128:1161; PC64LE: # %bb.0: # %entry1162; PC64LE-NEXT: mflr 01163; PC64LE-NEXT: stdu 1, -32(1)1164; PC64LE-NEXT: std 0, 48(1)1165; PC64LE-NEXT: bl __fixtfdi1166; PC64LE-NEXT: nop1167; PC64LE-NEXT: addi 1, 1, 321168; PC64LE-NEXT: ld 0, 16(1)1169; PC64LE-NEXT: mtlr 01170; PC64LE-NEXT: blr1171;1172; PC64LE9-LABEL: test_fptosi_ppc_i64_ppc_fp128:1173; PC64LE9: # %bb.0: # %entry1174; PC64LE9-NEXT: mflr 01175; PC64LE9-NEXT: stdu 1, -32(1)1176; PC64LE9-NEXT: std 0, 48(1)1177; PC64LE9-NEXT: bl __fixtfdi1178; PC64LE9-NEXT: nop1179; PC64LE9-NEXT: addi 1, 1, 321180; PC64LE9-NEXT: ld 0, 16(1)1181; PC64LE9-NEXT: mtlr 01182; PC64LE9-NEXT: blr1183;1184; PC64-LABEL: test_fptosi_ppc_i64_ppc_fp128:1185; PC64: # %bb.0: # %entry1186; PC64-NEXT: mflr 01187; PC64-NEXT: stdu 1, -112(1)1188; PC64-NEXT: std 0, 128(1)1189; PC64-NEXT: bl __fixtfdi1190; PC64-NEXT: nop1191; PC64-NEXT: addi 1, 1, 1121192; PC64-NEXT: ld 0, 16(1)1193; PC64-NEXT: mtlr 01194; PC64-NEXT: blr1195entry:1196 %fpext = call i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(1197 ppc_fp128 %first,1198 metadata !"fpexcept.strict") #11199 ret i64 %fpext1200}1201 1202define i32 @test_fptosi_ppc_i32_ppc_fp128(ppc_fp128 %first) #0 {1203; PC64LE-LABEL: test_fptosi_ppc_i32_ppc_fp128:1204; PC64LE: # %bb.0: # %entry1205; PC64LE-NEXT: mffs 01206; PC64LE-NEXT: mtfsb1 311207; PC64LE-NEXT: mtfsb0 301208; PC64LE-NEXT: fadd 1, 2, 11209; PC64LE-NEXT: mtfsf 1, 01210; PC64LE-NEXT: xscvdpsxws 0, 11211; PC64LE-NEXT: mffprwz 3, 01212; PC64LE-NEXT: blr1213;1214; PC64LE9-LABEL: test_fptosi_ppc_i32_ppc_fp128:1215; PC64LE9: # %bb.0: # %entry1216; PC64LE9-NEXT: mffs 01217; PC64LE9-NEXT: mtfsb1 311218; PC64LE9-NEXT: mtfsb0 301219; PC64LE9-NEXT: fadd 1, 2, 11220; PC64LE9-NEXT: mtfsf 1, 01221; PC64LE9-NEXT: xscvdpsxws 0, 11222; PC64LE9-NEXT: mffprwz 3, 01223; PC64LE9-NEXT: blr1224;1225; PC64-LABEL: test_fptosi_ppc_i32_ppc_fp128:1226; PC64: # %bb.0: # %entry1227; PC64-NEXT: mffs 01228; PC64-NEXT: mtfsb1 311229; PC64-NEXT: mtfsb0 301230; PC64-NEXT: fadd 1, 2, 11231; PC64-NEXT: mtfsf 1, 01232; PC64-NEXT: fctiwz 0, 11233; PC64-NEXT: stfd 0, -8(1)1234; PC64-NEXT: lwz 3, -4(1)1235; PC64-NEXT: blr1236entry:1237 %fpext = call i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(1238 ppc_fp128 %first,1239 metadata !"fpexcept.strict") #11240 ret i32 %fpext1241}1242 1243define i64 @test_fptoui_ppc_i64_ppc_fp128(ppc_fp128 %first) #0 {1244; PC64LE-LABEL: test_fptoui_ppc_i64_ppc_fp128:1245; PC64LE: # %bb.0: # %entry1246; PC64LE-NEXT: mflr 01247; PC64LE-NEXT: stdu 1, -32(1)1248; PC64LE-NEXT: std 0, 48(1)1249; PC64LE-NEXT: bl __fixunstfdi1250; PC64LE-NEXT: nop1251; PC64LE-NEXT: addi 1, 1, 321252; PC64LE-NEXT: ld 0, 16(1)1253; PC64LE-NEXT: mtlr 01254; PC64LE-NEXT: blr1255;1256; PC64LE9-LABEL: test_fptoui_ppc_i64_ppc_fp128:1257; PC64LE9: # %bb.0: # %entry1258; PC64LE9-NEXT: mflr 01259; PC64LE9-NEXT: stdu 1, -32(1)1260; PC64LE9-NEXT: std 0, 48(1)1261; PC64LE9-NEXT: bl __fixunstfdi1262; PC64LE9-NEXT: nop1263; PC64LE9-NEXT: addi 1, 1, 321264; PC64LE9-NEXT: ld 0, 16(1)1265; PC64LE9-NEXT: mtlr 01266; PC64LE9-NEXT: blr1267;1268; PC64-LABEL: test_fptoui_ppc_i64_ppc_fp128:1269; PC64: # %bb.0: # %entry1270; PC64-NEXT: mflr 01271; PC64-NEXT: stdu 1, -112(1)1272; PC64-NEXT: std 0, 128(1)1273; PC64-NEXT: bl __fixunstfdi1274; PC64-NEXT: nop1275; PC64-NEXT: addi 1, 1, 1121276; PC64-NEXT: ld 0, 16(1)1277; PC64-NEXT: mtlr 01278; PC64-NEXT: blr1279entry:1280 %fpext = call i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(1281 ppc_fp128 %first,1282 metadata !"fpexcept.strict") #11283 ret i64 %fpext1284}1285 1286define i32 @test_fptoui_ppc_i32_ppc_fp128(ppc_fp128 %first) #0 {1287; PC64LE-LABEL: test_fptoui_ppc_i32_ppc_fp128:1288; PC64LE: # %bb.0: # %entry1289; PC64LE-NEXT: mflr 01290; PC64LE-NEXT: std 30, -16(1) # 8-byte Folded Spill1291; PC64LE-NEXT: stdu 1, -48(1)1292; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha1293; PC64LE-NEXT: xxlxor 3, 3, 31294; PC64LE-NEXT: std 0, 64(1)1295; PC64LE-NEXT: lfs 0, .LCPI31_0@toc@l(3)1296; PC64LE-NEXT: fcmpo 1, 2, 31297; PC64LE-NEXT: lis 3, -327681298; PC64LE-NEXT: fcmpo 0, 1, 01299; PC64LE-NEXT: crand 20, 2, 41300; PC64LE-NEXT: crandc 21, 0, 21301; PC64LE-NEXT: cror 20, 21, 201302; PC64LE-NEXT: isel 30, 0, 3, 201303; PC64LE-NEXT: bc 12, 20, .LBB31_21304; PC64LE-NEXT: # %bb.1: # %entry1305; PC64LE-NEXT: fmr 3, 01306; PC64LE-NEXT: .LBB31_2: # %entry1307; PC64LE-NEXT: xxlxor 4, 4, 41308; PC64LE-NEXT: bl __gcc_qsub1309; PC64LE-NEXT: nop1310; PC64LE-NEXT: mffs 01311; PC64LE-NEXT: mtfsb1 311312; PC64LE-NEXT: mtfsb0 301313; PC64LE-NEXT: fadd 1, 2, 11314; PC64LE-NEXT: mtfsf 1, 01315; PC64LE-NEXT: xscvdpsxws 0, 11316; PC64LE-NEXT: mffprwz 3, 01317; PC64LE-NEXT: xor 3, 3, 301318; PC64LE-NEXT: addi 1, 1, 481319; PC64LE-NEXT: ld 0, 16(1)1320; PC64LE-NEXT: ld 30, -16(1) # 8-byte Folded Reload1321; PC64LE-NEXT: mtlr 01322; PC64LE-NEXT: blr1323;1324; PC64LE9-LABEL: test_fptoui_ppc_i32_ppc_fp128:1325; PC64LE9: # %bb.0: # %entry1326; PC64LE9-NEXT: mflr 01327; PC64LE9-NEXT: std 30, -16(1) # 8-byte Folded Spill1328; PC64LE9-NEXT: stdu 1, -48(1)1329; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha1330; PC64LE9-NEXT: xxlxor 3, 3, 31331; PC64LE9-NEXT: std 0, 64(1)1332; PC64LE9-NEXT: lfs 0, .LCPI31_0@toc@l(3)1333; PC64LE9-NEXT: fcmpo 1, 2, 31334; PC64LE9-NEXT: lis 3, -327681335; PC64LE9-NEXT: fcmpo 0, 1, 01336; PC64LE9-NEXT: crand 20, 2, 41337; PC64LE9-NEXT: crandc 21, 0, 21338; PC64LE9-NEXT: cror 20, 21, 201339; PC64LE9-NEXT: isel 30, 0, 3, 201340; PC64LE9-NEXT: bc 12, 20, .LBB31_21341; PC64LE9-NEXT: # %bb.1: # %entry1342; PC64LE9-NEXT: fmr 3, 01343; PC64LE9-NEXT: .LBB31_2: # %entry1344; PC64LE9-NEXT: xxlxor 4, 4, 41345; PC64LE9-NEXT: bl __gcc_qsub1346; PC64LE9-NEXT: nop1347; PC64LE9-NEXT: mffs 01348; PC64LE9-NEXT: mtfsb1 311349; PC64LE9-NEXT: mtfsb0 301350; PC64LE9-NEXT: fadd 1, 2, 11351; PC64LE9-NEXT: mtfsf 1, 01352; PC64LE9-NEXT: xscvdpsxws 0, 11353; PC64LE9-NEXT: mffprwz 3, 01354; PC64LE9-NEXT: xor 3, 3, 301355; PC64LE9-NEXT: addi 1, 1, 481356; PC64LE9-NEXT: ld 0, 16(1)1357; PC64LE9-NEXT: ld 30, -16(1) # 8-byte Folded Reload1358; PC64LE9-NEXT: mtlr 01359; PC64LE9-NEXT: blr1360;1361; PC64-LABEL: test_fptoui_ppc_i32_ppc_fp128:1362; PC64: # %bb.0: # %entry1363; PC64-NEXT: mfcr 121364; PC64-NEXT: mflr 01365; PC64-NEXT: stw 12, 8(1)1366; PC64-NEXT: stdu 1, -128(1)1367; PC64-NEXT: addis 3, 2, .LCPI31_0@toc@ha1368; PC64-NEXT: std 0, 144(1)1369; PC64-NEXT: lfs 0, .LCPI31_0@toc@l(3)1370; PC64-NEXT: addis 3, 2, .LCPI31_1@toc@ha1371; PC64-NEXT: lfs 4, .LCPI31_1@toc@l(3)1372; PC64-NEXT: fcmpo 0, 1, 01373; PC64-NEXT: crandc 21, 0, 21374; PC64-NEXT: fcmpo 1, 2, 41375; PC64-NEXT: crand 20, 2, 41376; PC64-NEXT: cror 8, 21, 201377; PC64-NEXT: fmr 3, 41378; PC64-NEXT: bc 12, 8, .LBB31_21379; PC64-NEXT: # %bb.1: # %entry1380; PC64-NEXT: fmr 3, 01381; PC64-NEXT: .LBB31_2: # %entry1382; PC64-NEXT: bl __gcc_qsub1383; PC64-NEXT: nop1384; PC64-NEXT: mffs 01385; PC64-NEXT: mtfsb1 311386; PC64-NEXT: li 3, 01387; PC64-NEXT: mtfsb0 301388; PC64-NEXT: fadd 1, 2, 11389; PC64-NEXT: mtfsf 1, 01390; PC64-NEXT: fctiwz 0, 11391; PC64-NEXT: stfd 0, 120(1)1392; PC64-NEXT: bc 12, 8, .LBB31_41393; PC64-NEXT: # %bb.3: # %entry1394; PC64-NEXT: lis 3, -327681395; PC64-NEXT: .LBB31_4: # %entry1396; PC64-NEXT: lwz 4, 124(1)1397; PC64-NEXT: xor 3, 4, 31398; PC64-NEXT: addi 1, 1, 1281399; PC64-NEXT: ld 0, 16(1)1400; PC64-NEXT: lwz 12, 8(1)1401; PC64-NEXT: mtlr 01402; PC64-NEXT: mtcrf 32, 12 # cr21403; PC64-NEXT: blr1404entry:1405 %fpext = call i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(1406 ppc_fp128 %first,1407 metadata !"fpexcept.strict") #11408 ret i32 %fpext1409}1410 1411; Test that resultant libcalls retain order even when their non-strict FLOP form could be1412; trivially optimized into differing sequences.1413define void @test_constrained_libcall_multichain(ptr %firstptr, ptr %result) #0 {1414; PC64LE-LABEL: test_constrained_libcall_multichain:1415; PC64LE: # %bb.0:1416; PC64LE-NEXT: mflr 01417; PC64LE-NEXT: std 29, -48(1) # 8-byte Folded Spill1418; PC64LE-NEXT: std 30, -40(1) # 8-byte Folded Spill1419; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill1420; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1421; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1422; PC64LE-NEXT: stdu 1, -80(1)1423; PC64LE-NEXT: std 0, 96(1)1424; PC64LE-NEXT: mr 29, 31425; PC64LE-NEXT: xxlxor 2, 2, 21426; PC64LE-NEXT: xxlxor 4, 4, 41427; PC64LE-NEXT: lfs 31, 0(3)1428; PC64LE-NEXT: li 3, 01429; PC64LE-NEXT: mr 30, 41430; PC64LE-NEXT: std 3, 8(4)1431; PC64LE-NEXT: fmr 1, 311432; PC64LE-NEXT: fmr 3, 311433; PC64LE-NEXT: stfd 31, 0(4)1434; PC64LE-NEXT: bl __gcc_qadd1435; PC64LE-NEXT: nop1436; PC64LE-NEXT: fmr 3, 11437; PC64LE-NEXT: fmr 4, 21438; PC64LE-NEXT: stfd 2, 24(30)1439; PC64LE-NEXT: stfd 1, 16(30)1440; PC64LE-NEXT: fmr 30, 11441; PC64LE-NEXT: fmr 29, 21442; PC64LE-NEXT: bl __gcc_qmul1443; PC64LE-NEXT: nop1444; PC64LE-NEXT: fmr 1, 311445; PC64LE-NEXT: xxlxor 2, 2, 21446; PC64LE-NEXT: li 5, 21447; PC64LE-NEXT: stfd 29, 40(30)1448; PC64LE-NEXT: stfd 30, 32(30)1449; PC64LE-NEXT: bl __powitf21450; PC64LE-NEXT: nop1451; PC64LE-NEXT: xsrsp 0, 11452; PC64LE-NEXT: stfs 0, 0(29)1453; PC64LE-NEXT: stfd 1, -16(30)1454; PC64LE-NEXT: stfd 2, -8(30)1455; PC64LE-NEXT: addi 1, 1, 801456; PC64LE-NEXT: ld 0, 16(1)1457; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1458; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1459; PC64LE-NEXT: ld 30, -40(1) # 8-byte Folded Reload1460; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload1461; PC64LE-NEXT: ld 29, -48(1) # 8-byte Folded Reload1462; PC64LE-NEXT: mtlr 01463; PC64LE-NEXT: blr1464;1465; PC64LE9-LABEL: test_constrained_libcall_multichain:1466; PC64LE9: # %bb.0:1467; PC64LE9-NEXT: mflr 01468; PC64LE9-NEXT: std 29, -48(1) # 8-byte Folded Spill1469; PC64LE9-NEXT: std 30, -40(1) # 8-byte Folded Spill1470; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill1471; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1472; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1473; PC64LE9-NEXT: stdu 1, -80(1)1474; PC64LE9-NEXT: std 0, 96(1)1475; PC64LE9-NEXT: mr 29, 31476; PC64LE9-NEXT: xxlxor 2, 2, 21477; PC64LE9-NEXT: mr 30, 41478; PC64LE9-NEXT: lfs 31, 0(3)1479; PC64LE9-NEXT: li 3, 01480; PC64LE9-NEXT: xxlxor 4, 4, 41481; PC64LE9-NEXT: std 3, 8(4)1482; PC64LE9-NEXT: fmr 1, 311483; PC64LE9-NEXT: fmr 3, 311484; PC64LE9-NEXT: stfd 31, 0(4)1485; PC64LE9-NEXT: bl __gcc_qadd1486; PC64LE9-NEXT: nop1487; PC64LE9-NEXT: fmr 3, 11488; PC64LE9-NEXT: fmr 4, 21489; PC64LE9-NEXT: fmr 30, 11490; PC64LE9-NEXT: fmr 29, 21491; PC64LE9-NEXT: stfd 2, 24(30)1492; PC64LE9-NEXT: stfd 1, 16(30)1493; PC64LE9-NEXT: bl __gcc_qmul1494; PC64LE9-NEXT: nop1495; PC64LE9-NEXT: fmr 1, 311496; PC64LE9-NEXT: xxlxor 2, 2, 21497; PC64LE9-NEXT: li 5, 21498; PC64LE9-NEXT: stfd 29, 40(30)1499; PC64LE9-NEXT: stfd 30, 32(30)1500; PC64LE9-NEXT: bl __powitf21501; PC64LE9-NEXT: nop1502; PC64LE9-NEXT: xsrsp 0, 11503; PC64LE9-NEXT: stfs 0, 0(29)1504; PC64LE9-NEXT: stfd 1, -16(30)1505; PC64LE9-NEXT: stfd 2, -8(30)1506; PC64LE9-NEXT: addi 1, 1, 801507; PC64LE9-NEXT: ld 0, 16(1)1508; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1509; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1510; PC64LE9-NEXT: ld 30, -40(1) # 8-byte Folded Reload1511; PC64LE9-NEXT: ld 29, -48(1) # 8-byte Folded Reload1512; PC64LE9-NEXT: mtlr 01513; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload1514; PC64LE9-NEXT: blr1515;1516; PC64-LABEL: test_constrained_libcall_multichain:1517; PC64: # %bb.0:1518; PC64-NEXT: mflr 01519; PC64-NEXT: stdu 1, -176(1)1520; PC64-NEXT: std 0, 192(1)1521; PC64-NEXT: std 29, 120(1) # 8-byte Folded Spill1522; PC64-NEXT: mr 29, 31523; PC64-NEXT: li 3, 01524; PC64-NEXT: stfd 31, 168(1) # 8-byte Folded Spill1525; PC64-NEXT: std 30, 128(1) # 8-byte Folded Spill1526; PC64-NEXT: mr 30, 41527; PC64-NEXT: lfs 31, 0(29)1528; PC64-NEXT: std 3, 8(4)1529; PC64-NEXT: addis 3, 2, .LCPI32_0@toc@ha1530; PC64-NEXT: stfd 30, 160(1) # 8-byte Folded Spill1531; PC64-NEXT: lfs 30, .LCPI32_0@toc@l(3)1532; PC64-NEXT: fmr 1, 311533; PC64-NEXT: fmr 3, 311534; PC64-NEXT: stfd 28, 144(1) # 8-byte Folded Spill1535; PC64-NEXT: fmr 2, 301536; PC64-NEXT: fmr 4, 301537; PC64-NEXT: stfd 29, 152(1) # 8-byte Folded Spill1538; PC64-NEXT: stfd 31, 0(4)1539; PC64-NEXT: bl __gcc_qadd1540; PC64-NEXT: nop1541; PC64-NEXT: fmr 3, 11542; PC64-NEXT: fmr 4, 21543; PC64-NEXT: fmr 29, 11544; PC64-NEXT: fmr 28, 21545; PC64-NEXT: stfd 2, 24(30)1546; PC64-NEXT: stfd 1, 16(30)1547; PC64-NEXT: bl __gcc_qmul1548; PC64-NEXT: nop1549; PC64-NEXT: fmr 1, 311550; PC64-NEXT: fmr 2, 301551; PC64-NEXT: li 5, 21552; PC64-NEXT: stfd 28, 40(30)1553; PC64-NEXT: stfd 29, 32(30)1554; PC64-NEXT: bl __powitf21555; PC64-NEXT: nop1556; PC64-NEXT: frsp 0, 11557; PC64-NEXT: stfs 0, 0(29)1558; PC64-NEXT: ld 29, 120(1) # 8-byte Folded Reload1559; PC64-NEXT: stfd 1, -16(30)1560; PC64-NEXT: stfd 2, -8(30)1561; PC64-NEXT: ld 30, 128(1) # 8-byte Folded Reload1562; PC64-NEXT: lfd 31, 168(1) # 8-byte Folded Reload1563; PC64-NEXT: lfd 30, 160(1) # 8-byte Folded Reload1564; PC64-NEXT: lfd 29, 152(1) # 8-byte Folded Reload1565; PC64-NEXT: lfd 28, 144(1) # 8-byte Folded Reload1566; PC64-NEXT: addi 1, 1, 1761567; PC64-NEXT: ld 0, 16(1)1568; PC64-NEXT: mtlr 01569; PC64-NEXT: blr1570 %load = load float, ptr %firstptr1571 %first = call ppc_fp128 @llvm.experimental.constrained.fpext.ppcf128.f32(1572 float %load,1573 metadata !"fpexcept.strict") #11574 store ppc_fp128 %first, ptr %result1575 1576 ; For unconstrained FLOPs, these next two FP instructions would necessarily1577 ; be executed in series with one another.1578 %fadd = call ppc_fp128 @llvm.experimental.constrained.fadd.ppcf128(1579 ppc_fp128 %first,1580 ppc_fp128 %first,1581 metadata !"round.dynamic",1582 metadata !"fpexcept.strict") #11583 %stridx1 = getelementptr ppc_fp128, ptr %result, i32 11584 store ppc_fp128 %fadd, ptr %stridx11585 %fmul = call ppc_fp128 @llvm.experimental.constrained.fmul.ppcf128(1586 ppc_fp128 %fadd,1587 ppc_fp128 %fadd,1588 metadata !"round.dynamic",1589 metadata !"fpexcept.strict") #11590 %stridx2 = getelementptr ppc_fp128, ptr %stridx1, i32 11591 store ppc_fp128 %fadd, ptr %stridx21592 1593 ; For unconstrained FLOPs, these next two FP instructions could be reordered1594 ; or even executed in parallel with respect to the previous two instructions.1595 ; However, strict floating point rules would not allow this.1596 %powi = call ppc_fp128 @llvm.experimental.constrained.powi.ppcf128(1597 ppc_fp128 %first,1598 i32 2,1599 metadata !"round.dynamic",1600 metadata !"fpexcept.strict") #11601 %tinypow = call float @llvm.experimental.constrained.fptrunc.f32.ppcf128(1602 ppc_fp128 %powi,1603 metadata !"round.dynamic",1604 metadata !"fpexcept.strict") #11605 store float %tinypow, ptr %firstptr1606 %stridxn1 = getelementptr ppc_fp128, ptr %result, i32 -11607 store ppc_fp128 %powi, ptr %stridxn11608 ret void1609}1610 1611define ppc_fp128 @i32_to_ppcq(i32 signext %m) #0 {1612; PC64LE-LABEL: i32_to_ppcq:1613; PC64LE: # %bb.0: # %entry1614; PC64LE-NEXT: mtfprwa 0, 31615; PC64LE-NEXT: xxlxor 2, 2, 21616; PC64LE-NEXT: xscvsxddp 1, 01617; PC64LE-NEXT: blr1618;1619; PC64LE9-LABEL: i32_to_ppcq:1620; PC64LE9: # %bb.0: # %entry1621; PC64LE9-NEXT: mtfprwa 0, 31622; PC64LE9-NEXT: xxlxor 2, 2, 21623; PC64LE9-NEXT: xscvsxddp 1, 01624; PC64LE9-NEXT: blr1625;1626; PC64-LABEL: i32_to_ppcq:1627; PC64: # %bb.0: # %entry1628; PC64-NEXT: std 3, -8(1)1629; PC64-NEXT: addis 3, 2, .LCPI33_0@toc@ha1630; PC64-NEXT: lfd 0, -8(1)1631; PC64-NEXT: lfs 2, .LCPI33_0@toc@l(3)1632; PC64-NEXT: fcfid 1, 01633; PC64-NEXT: blr1634entry:1635 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11636 ret ppc_fp128 %conv1637}1638 1639define ppc_fp128 @i64_to_ppcq(i64 %m) #0 {1640; PC64LE-LABEL: i64_to_ppcq:1641; PC64LE: # %bb.0: # %entry1642; PC64LE-NEXT: mflr 01643; PC64LE-NEXT: stdu 1, -32(1)1644; PC64LE-NEXT: std 0, 48(1)1645; PC64LE-NEXT: bl __floatditf1646; PC64LE-NEXT: nop1647; PC64LE-NEXT: addi 1, 1, 321648; PC64LE-NEXT: ld 0, 16(1)1649; PC64LE-NEXT: mtlr 01650; PC64LE-NEXT: blr1651;1652; PC64LE9-LABEL: i64_to_ppcq:1653; PC64LE9: # %bb.0: # %entry1654; PC64LE9-NEXT: mflr 01655; PC64LE9-NEXT: stdu 1, -32(1)1656; PC64LE9-NEXT: std 0, 48(1)1657; PC64LE9-NEXT: bl __floatditf1658; PC64LE9-NEXT: nop1659; PC64LE9-NEXT: addi 1, 1, 321660; PC64LE9-NEXT: ld 0, 16(1)1661; PC64LE9-NEXT: mtlr 01662; PC64LE9-NEXT: blr1663;1664; PC64-LABEL: i64_to_ppcq:1665; PC64: # %bb.0: # %entry1666; PC64-NEXT: mflr 01667; PC64-NEXT: stdu 1, -112(1)1668; PC64-NEXT: std 0, 128(1)1669; PC64-NEXT: bl __floatditf1670; PC64-NEXT: nop1671; PC64-NEXT: addi 1, 1, 1121672; PC64-NEXT: ld 0, 16(1)1673; PC64-NEXT: mtlr 01674; PC64-NEXT: blr1675entry:1676 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11677 ret ppc_fp128 %conv1678}1679 1680define ppc_fp128 @u32_to_ppcq(i32 zeroext %m) #0 {1681; PC64LE-LABEL: u32_to_ppcq:1682; PC64LE: # %bb.0: # %entry1683; PC64LE-NEXT: mtfprwz 0, 31684; PC64LE-NEXT: xxlxor 2, 2, 21685; PC64LE-NEXT: xscvuxddp 1, 01686; PC64LE-NEXT: blr1687;1688; PC64LE9-LABEL: u32_to_ppcq:1689; PC64LE9: # %bb.0: # %entry1690; PC64LE9-NEXT: mtfprwz 0, 31691; PC64LE9-NEXT: xxlxor 2, 2, 21692; PC64LE9-NEXT: xscvuxddp 1, 01693; PC64LE9-NEXT: blr1694;1695; PC64-LABEL: u32_to_ppcq:1696; PC64: # %bb.0: # %entry1697; PC64-NEXT: lis 4, 172001698; PC64-NEXT: stw 3, -4(1)1699; PC64-NEXT: addis 3, 2, .LCPI35_0@toc@ha1700; PC64-NEXT: stw 4, -8(1)1701; PC64-NEXT: lfs 0, .LCPI35_0@toc@l(3)1702; PC64-NEXT: addis 3, 2, .LCPI35_1@toc@ha1703; PC64-NEXT: lfd 1, -8(1)1704; PC64-NEXT: lfs 2, .LCPI35_1@toc@l(3)1705; PC64-NEXT: fsub 1, 1, 01706; PC64-NEXT: blr1707entry:1708 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11709 ret ppc_fp128 %conv1710}1711 1712define ppc_fp128 @u64_to_ppcq(i64 %m) #0 {1713; PC64LE-LABEL: u64_to_ppcq:1714; PC64LE: # %bb.0: # %entry1715; PC64LE-NEXT: mflr 01716; PC64LE-NEXT: std 30, -32(1) # 8-byte Folded Spill1717; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1718; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1719; PC64LE-NEXT: stdu 1, -64(1)1720; PC64LE-NEXT: std 0, 80(1)1721; PC64LE-NEXT: mr 30, 31722; PC64LE-NEXT: bl __floatditf1723; PC64LE-NEXT: nop1724; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha1725; PC64LE-NEXT: xxlxor 4, 4, 41726; PC64LE-NEXT: fmr 30, 11727; PC64LE-NEXT: lfs 3, .LCPI36_0@toc@l(3)1728; PC64LE-NEXT: fmr 31, 21729; PC64LE-NEXT: bl __gcc_qadd1730; PC64LE-NEXT: nop1731; PC64LE-NEXT: cmpdi 30, 01732; PC64LE-NEXT: blt 0, .LBB36_21733; PC64LE-NEXT: # %bb.1: # %entry1734; PC64LE-NEXT: fmr 1, 301735; PC64LE-NEXT: .LBB36_2: # %entry1736; PC64LE-NEXT: blt 0, .LBB36_41737; PC64LE-NEXT: # %bb.3: # %entry1738; PC64LE-NEXT: fmr 2, 311739; PC64LE-NEXT: .LBB36_4: # %entry1740; PC64LE-NEXT: addi 1, 1, 641741; PC64LE-NEXT: ld 0, 16(1)1742; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1743; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1744; PC64LE-NEXT: ld 30, -32(1) # 8-byte Folded Reload1745; PC64LE-NEXT: mtlr 01746; PC64LE-NEXT: blr1747;1748; PC64LE9-LABEL: u64_to_ppcq:1749; PC64LE9: # %bb.0: # %entry1750; PC64LE9-NEXT: mflr 01751; PC64LE9-NEXT: std 30, -32(1) # 8-byte Folded Spill1752; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1753; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1754; PC64LE9-NEXT: stdu 1, -64(1)1755; PC64LE9-NEXT: std 0, 80(1)1756; PC64LE9-NEXT: mr 30, 31757; PC64LE9-NEXT: bl __floatditf1758; PC64LE9-NEXT: nop1759; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha1760; PC64LE9-NEXT: xxlxor 4, 4, 41761; PC64LE9-NEXT: fmr 30, 11762; PC64LE9-NEXT: fmr 31, 21763; PC64LE9-NEXT: lfs 3, .LCPI36_0@toc@l(3)1764; PC64LE9-NEXT: bl __gcc_qadd1765; PC64LE9-NEXT: nop1766; PC64LE9-NEXT: cmpdi 30, 01767; PC64LE9-NEXT: blt 0, .LBB36_21768; PC64LE9-NEXT: # %bb.1: # %entry1769; PC64LE9-NEXT: fmr 1, 301770; PC64LE9-NEXT: .LBB36_2: # %entry1771; PC64LE9-NEXT: blt 0, .LBB36_41772; PC64LE9-NEXT: # %bb.3: # %entry1773; PC64LE9-NEXT: fmr 2, 311774; PC64LE9-NEXT: .LBB36_4: # %entry1775; PC64LE9-NEXT: addi 1, 1, 641776; PC64LE9-NEXT: ld 0, 16(1)1777; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1778; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1779; PC64LE9-NEXT: ld 30, -32(1) # 8-byte Folded Reload1780; PC64LE9-NEXT: mtlr 01781; PC64LE9-NEXT: blr1782;1783; PC64-LABEL: u64_to_ppcq:1784; PC64: # %bb.0: # %entry1785; PC64-NEXT: mflr 01786; PC64-NEXT: stdu 1, -144(1)1787; PC64-NEXT: std 0, 160(1)1788; PC64-NEXT: std 30, 112(1) # 8-byte Folded Spill1789; PC64-NEXT: stfd 30, 128(1) # 8-byte Folded Spill1790; PC64-NEXT: mr 30, 31791; PC64-NEXT: stfd 31, 136(1) # 8-byte Folded Spill1792; PC64-NEXT: bl __floatditf1793; PC64-NEXT: nop1794; PC64-NEXT: addis 3, 2, .LCPI36_0@toc@ha1795; PC64-NEXT: fmr 31, 21796; PC64-NEXT: lfs 3, .LCPI36_0@toc@l(3)1797; PC64-NEXT: addis 3, 2, .LCPI36_1@toc@ha1798; PC64-NEXT: fmr 30, 11799; PC64-NEXT: lfs 4, .LCPI36_1@toc@l(3)1800; PC64-NEXT: bl __gcc_qadd1801; PC64-NEXT: nop1802; PC64-NEXT: cmpdi 30, 01803; PC64-NEXT: blt 0, .LBB36_21804; PC64-NEXT: # %bb.1: # %entry1805; PC64-NEXT: fmr 1, 301806; PC64-NEXT: .LBB36_2: # %entry1807; PC64-NEXT: blt 0, .LBB36_41808; PC64-NEXT: # %bb.3: # %entry1809; PC64-NEXT: fmr 2, 311810; PC64-NEXT: .LBB36_4: # %entry1811; PC64-NEXT: lfd 31, 136(1) # 8-byte Folded Reload1812; PC64-NEXT: ld 30, 112(1) # 8-byte Folded Reload1813; PC64-NEXT: lfd 30, 128(1) # 8-byte Folded Reload1814; PC64-NEXT: addi 1, 1, 1441815; PC64-NEXT: ld 0, 16(1)1816; PC64-NEXT: mtlr 01817; PC64-NEXT: blr1818entry:1819 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11820 ret ppc_fp128 %conv1821}1822 1823define ppc_fp128 @i128_to_ppcq(i128 %m) #0 {1824; PC64LE-LABEL: i128_to_ppcq:1825; PC64LE: # %bb.0: # %entry1826; PC64LE-NEXT: mflr 01827; PC64LE-NEXT: stdu 1, -32(1)1828; PC64LE-NEXT: std 0, 48(1)1829; PC64LE-NEXT: bl __floattitf1830; PC64LE-NEXT: nop1831; PC64LE-NEXT: addi 1, 1, 321832; PC64LE-NEXT: ld 0, 16(1)1833; PC64LE-NEXT: mtlr 01834; PC64LE-NEXT: blr1835;1836; PC64LE9-LABEL: i128_to_ppcq:1837; PC64LE9: # %bb.0: # %entry1838; PC64LE9-NEXT: mflr 01839; PC64LE9-NEXT: stdu 1, -32(1)1840; PC64LE9-NEXT: std 0, 48(1)1841; PC64LE9-NEXT: bl __floattitf1842; PC64LE9-NEXT: nop1843; PC64LE9-NEXT: addi 1, 1, 321844; PC64LE9-NEXT: ld 0, 16(1)1845; PC64LE9-NEXT: mtlr 01846; PC64LE9-NEXT: blr1847;1848; PC64-LABEL: i128_to_ppcq:1849; PC64: # %bb.0: # %entry1850; PC64-NEXT: mflr 01851; PC64-NEXT: stdu 1, -112(1)1852; PC64-NEXT: std 0, 128(1)1853; PC64-NEXT: bl __floattitf1854; PC64-NEXT: nop1855; PC64-NEXT: addi 1, 1, 1121856; PC64-NEXT: ld 0, 16(1)1857; PC64-NEXT: mtlr 01858; PC64-NEXT: blr1859entry:1860 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i128(i128 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11861 ret ppc_fp128 %conv1862}1863 1864define ppc_fp128 @u128_to_ppcq(i128 %m) #0 {1865; PC64LE-LABEL: u128_to_ppcq:1866; PC64LE: # %bb.0: # %entry1867; PC64LE-NEXT: mflr 01868; PC64LE-NEXT: std 30, -32(1) # 8-byte Folded Spill1869; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1870; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1871; PC64LE-NEXT: stdu 1, -64(1)1872; PC64LE-NEXT: std 0, 80(1)1873; PC64LE-NEXT: mr 30, 41874; PC64LE-NEXT: bl __floattitf1875; PC64LE-NEXT: nop1876; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha1877; PC64LE-NEXT: xxlxor 4, 4, 41878; PC64LE-NEXT: fmr 30, 11879; PC64LE-NEXT: lfd 3, .LCPI38_0@toc@l(3)1880; PC64LE-NEXT: fmr 31, 21881; PC64LE-NEXT: bl __gcc_qadd1882; PC64LE-NEXT: nop1883; PC64LE-NEXT: cmpdi 30, 01884; PC64LE-NEXT: blt 0, .LBB38_21885; PC64LE-NEXT: # %bb.1: # %entry1886; PC64LE-NEXT: fmr 1, 301887; PC64LE-NEXT: .LBB38_2: # %entry1888; PC64LE-NEXT: blt 0, .LBB38_41889; PC64LE-NEXT: # %bb.3: # %entry1890; PC64LE-NEXT: fmr 2, 311891; PC64LE-NEXT: .LBB38_4: # %entry1892; PC64LE-NEXT: addi 1, 1, 641893; PC64LE-NEXT: ld 0, 16(1)1894; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1895; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1896; PC64LE-NEXT: ld 30, -32(1) # 8-byte Folded Reload1897; PC64LE-NEXT: mtlr 01898; PC64LE-NEXT: blr1899;1900; PC64LE9-LABEL: u128_to_ppcq:1901; PC64LE9: # %bb.0: # %entry1902; PC64LE9-NEXT: mflr 01903; PC64LE9-NEXT: std 30, -32(1) # 8-byte Folded Spill1904; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill1905; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill1906; PC64LE9-NEXT: stdu 1, -64(1)1907; PC64LE9-NEXT: std 0, 80(1)1908; PC64LE9-NEXT: mr 30, 41909; PC64LE9-NEXT: bl __floattitf1910; PC64LE9-NEXT: nop1911; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha1912; PC64LE9-NEXT: xxlxor 4, 4, 41913; PC64LE9-NEXT: fmr 30, 11914; PC64LE9-NEXT: lfd 3, .LCPI38_0@toc@l(3)1915; PC64LE9-NEXT: fmr 31, 21916; PC64LE9-NEXT: bl __gcc_qadd1917; PC64LE9-NEXT: nop1918; PC64LE9-NEXT: cmpdi 30, 01919; PC64LE9-NEXT: blt 0, .LBB38_21920; PC64LE9-NEXT: # %bb.1: # %entry1921; PC64LE9-NEXT: fmr 1, 301922; PC64LE9-NEXT: .LBB38_2: # %entry1923; PC64LE9-NEXT: blt 0, .LBB38_41924; PC64LE9-NEXT: # %bb.3: # %entry1925; PC64LE9-NEXT: fmr 2, 311926; PC64LE9-NEXT: .LBB38_4: # %entry1927; PC64LE9-NEXT: addi 1, 1, 641928; PC64LE9-NEXT: ld 0, 16(1)1929; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload1930; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload1931; PC64LE9-NEXT: ld 30, -32(1) # 8-byte Folded Reload1932; PC64LE9-NEXT: mtlr 01933; PC64LE9-NEXT: blr1934;1935; PC64-LABEL: u128_to_ppcq:1936; PC64: # %bb.0: # %entry1937; PC64-NEXT: mflr 01938; PC64-NEXT: stdu 1, -144(1)1939; PC64-NEXT: std 0, 160(1)1940; PC64-NEXT: std 30, 112(1) # 8-byte Folded Spill1941; PC64-NEXT: stfd 30, 128(1) # 8-byte Folded Spill1942; PC64-NEXT: mr 30, 31943; PC64-NEXT: stfd 31, 136(1) # 8-byte Folded Spill1944; PC64-NEXT: bl __floattitf1945; PC64-NEXT: nop1946; PC64-NEXT: addis 3, 2, .LCPI38_0@toc@ha1947; PC64-NEXT: fmr 31, 21948; PC64-NEXT: lfd 3, .LCPI38_0@toc@l(3)1949; PC64-NEXT: addis 3, 2, .LCPI38_1@toc@ha1950; PC64-NEXT: fmr 30, 11951; PC64-NEXT: lfs 4, .LCPI38_1@toc@l(3)1952; PC64-NEXT: bl __gcc_qadd1953; PC64-NEXT: nop1954; PC64-NEXT: cmpdi 30, 01955; PC64-NEXT: blt 0, .LBB38_21956; PC64-NEXT: # %bb.1: # %entry1957; PC64-NEXT: fmr 1, 301958; PC64-NEXT: .LBB38_2: # %entry1959; PC64-NEXT: blt 0, .LBB38_41960; PC64-NEXT: # %bb.3: # %entry1961; PC64-NEXT: fmr 2, 311962; PC64-NEXT: .LBB38_4: # %entry1963; PC64-NEXT: lfd 31, 136(1) # 8-byte Folded Reload1964; PC64-NEXT: ld 30, 112(1) # 8-byte Folded Reload1965; PC64-NEXT: lfd 30, 128(1) # 8-byte Folded Reload1966; PC64-NEXT: addi 1, 1, 1441967; PC64-NEXT: ld 0, 16(1)1968; PC64-NEXT: mtlr 01969; PC64-NEXT: blr1970entry:1971 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i128(i128 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #11972 ret ppc_fp128 %conv1973}1974 1975define i1 @ppcq_to_s1(ppc_fp128 %a) {1976; PC64LE-LABEL: ppcq_to_s1:1977; PC64LE: # %bb.0: # %entry1978; PC64LE-NEXT: mflr 01979; PC64LE-NEXT: stdu 1, -32(1)1980; PC64LE-NEXT: std 0, 48(1)1981; PC64LE-NEXT: .cfi_def_cfa_offset 321982; PC64LE-NEXT: .cfi_offset lr, 161983; PC64LE-NEXT: bl __gcc_qtou1984; PC64LE-NEXT: nop1985; PC64LE-NEXT: addi 1, 1, 321986; PC64LE-NEXT: ld 0, 16(1)1987; PC64LE-NEXT: mtlr 01988; PC64LE-NEXT: blr1989;1990; PC64LE9-LABEL: ppcq_to_s1:1991; PC64LE9: # %bb.0: # %entry1992; PC64LE9-NEXT: mflr 01993; PC64LE9-NEXT: stdu 1, -32(1)1994; PC64LE9-NEXT: std 0, 48(1)1995; PC64LE9-NEXT: .cfi_def_cfa_offset 321996; PC64LE9-NEXT: .cfi_offset lr, 161997; PC64LE9-NEXT: bl __gcc_qtou1998; PC64LE9-NEXT: nop1999; PC64LE9-NEXT: addi 1, 1, 322000; PC64LE9-NEXT: ld 0, 16(1)2001; PC64LE9-NEXT: mtlr 02002; PC64LE9-NEXT: blr2003;2004; PC64-LABEL: ppcq_to_s1:2005; PC64: # %bb.0: # %entry2006; PC64-NEXT: mflr 02007; PC64-NEXT: stdu 1, -112(1)2008; PC64-NEXT: std 0, 128(1)2009; PC64-NEXT: .cfi_def_cfa_offset 1122010; PC64-NEXT: .cfi_offset lr, 162011; PC64-NEXT: bl __gcc_qtou2012; PC64-NEXT: nop2013; PC64-NEXT: addi 1, 1, 1122014; PC64-NEXT: ld 0, 16(1)2015; PC64-NEXT: mtlr 02016; PC64-NEXT: blr2017entry:2018 %conv = tail call i1 @llvm.experimental.constrained.fptosi.i1.ppcf128(ppc_fp128 %a, metadata !"fpexcept.strict") #12019 ret i1 %conv2020}2021 2022define i1 @ppcq_to_u1(ppc_fp128 %a) {2023; PC64LE-LABEL: ppcq_to_u1:2024; PC64LE: # %bb.0: # %entry2025; PC64LE-NEXT: mflr 02026; PC64LE-NEXT: stdu 1, -32(1)2027; PC64LE-NEXT: std 0, 48(1)2028; PC64LE-NEXT: .cfi_def_cfa_offset 322029; PC64LE-NEXT: .cfi_offset lr, 162030; PC64LE-NEXT: bl __fixunstfsi2031; PC64LE-NEXT: nop2032; PC64LE-NEXT: addi 1, 1, 322033; PC64LE-NEXT: ld 0, 16(1)2034; PC64LE-NEXT: mtlr 02035; PC64LE-NEXT: blr2036;2037; PC64LE9-LABEL: ppcq_to_u1:2038; PC64LE9: # %bb.0: # %entry2039; PC64LE9-NEXT: mflr 02040; PC64LE9-NEXT: stdu 1, -32(1)2041; PC64LE9-NEXT: std 0, 48(1)2042; PC64LE9-NEXT: .cfi_def_cfa_offset 322043; PC64LE9-NEXT: .cfi_offset lr, 162044; PC64LE9-NEXT: bl __fixunstfsi2045; PC64LE9-NEXT: nop2046; PC64LE9-NEXT: addi 1, 1, 322047; PC64LE9-NEXT: ld 0, 16(1)2048; PC64LE9-NEXT: mtlr 02049; PC64LE9-NEXT: blr2050;2051; PC64-LABEL: ppcq_to_u1:2052; PC64: # %bb.0: # %entry2053; PC64-NEXT: mflr 02054; PC64-NEXT: stdu 1, -112(1)2055; PC64-NEXT: std 0, 128(1)2056; PC64-NEXT: .cfi_def_cfa_offset 1122057; PC64-NEXT: .cfi_offset lr, 162058; PC64-NEXT: bl __fixunstfsi2059; PC64-NEXT: nop2060; PC64-NEXT: addi 1, 1, 1122061; PC64-NEXT: ld 0, 16(1)2062; PC64-NEXT: mtlr 02063; PC64-NEXT: blr2064entry:2065 %conv = tail call i1 @llvm.experimental.constrained.fptoui.i1.ppcf128(ppc_fp128 %a, metadata !"fpexcept.strict") #12066 ret i1 %conv2067}2068 2069define ppc_fp128 @test_tan_ppc_fp128(ppc_fp128 %first) #0 {2070; PC64LE-LABEL: test_tan_ppc_fp128:2071; PC64LE: # %bb.0: # %entry2072; PC64LE-NEXT: mflr 02073; PC64LE-NEXT: stdu 1, -32(1)2074; PC64LE-NEXT: std 0, 48(1)2075; PC64LE-NEXT: bl tanl2076; PC64LE-NEXT: nop2077; PC64LE-NEXT: addi 1, 1, 322078; PC64LE-NEXT: ld 0, 16(1)2079; PC64LE-NEXT: mtlr 02080; PC64LE-NEXT: blr2081;2082; PC64LE9-LABEL: test_tan_ppc_fp128:2083; PC64LE9: # %bb.0: # %entry2084; PC64LE9-NEXT: mflr 02085; PC64LE9-NEXT: stdu 1, -32(1)2086; PC64LE9-NEXT: std 0, 48(1)2087; PC64LE9-NEXT: bl tanl2088; PC64LE9-NEXT: nop2089; PC64LE9-NEXT: addi 1, 1, 322090; PC64LE9-NEXT: ld 0, 16(1)2091; PC64LE9-NEXT: mtlr 02092; PC64LE9-NEXT: blr2093;2094; PC64-LABEL: test_tan_ppc_fp128:2095; PC64: # %bb.0: # %entry2096; PC64-NEXT: mflr 02097; PC64-NEXT: stdu 1, -112(1)2098; PC64-NEXT: std 0, 128(1)2099; PC64-NEXT: bl tanl2100; PC64-NEXT: nop2101; PC64-NEXT: addi 1, 1, 1122102; PC64-NEXT: ld 0, 16(1)2103; PC64-NEXT: mtlr 02104; PC64-NEXT: blr2105entry:2106 %tan = call ppc_fp128 @llvm.experimental.constrained.tan.ppcf128(2107 ppc_fp128 %first,2108 metadata !"round.dynamic",2109 metadata !"fpexcept.strict") #12110 ret ppc_fp128 %tan2111}2112 2113define ppc_fp128 @test_atan2_ppc_fp128(ppc_fp128 %first, ppc_fp128 %second) #0 {2114; PC64LE-LABEL: test_atan2_ppc_fp128:2115; PC64LE: # %bb.0: # %entry2116; PC64LE-NEXT: mflr 02117; PC64LE-NEXT: stdu 1, -32(1)2118; PC64LE-NEXT: std 0, 48(1)2119; PC64LE-NEXT: bl atan2l2120; PC64LE-NEXT: nop2121; PC64LE-NEXT: addi 1, 1, 322122; PC64LE-NEXT: ld 0, 16(1)2123; PC64LE-NEXT: mtlr 02124; PC64LE-NEXT: blr2125;2126; PC64LE9-LABEL: test_atan2_ppc_fp128:2127; PC64LE9: # %bb.0: # %entry2128; PC64LE9-NEXT: mflr 02129; PC64LE9-NEXT: stdu 1, -32(1)2130; PC64LE9-NEXT: std 0, 48(1)2131; PC64LE9-NEXT: bl atan2l2132; PC64LE9-NEXT: nop2133; PC64LE9-NEXT: addi 1, 1, 322134; PC64LE9-NEXT: ld 0, 16(1)2135; PC64LE9-NEXT: mtlr 02136; PC64LE9-NEXT: blr2137;2138; PC64-LABEL: test_atan2_ppc_fp128:2139; PC64: # %bb.0: # %entry2140; PC64-NEXT: mflr 02141; PC64-NEXT: stdu 1, -112(1)2142; PC64-NEXT: std 0, 128(1)2143; PC64-NEXT: bl atan2l2144; PC64-NEXT: nop2145; PC64-NEXT: addi 1, 1, 1122146; PC64-NEXT: ld 0, 16(1)2147; PC64-NEXT: mtlr 02148; PC64-NEXT: blr2149entry:2150 %atan2 = call ppc_fp128 @llvm.experimental.constrained.atan2.ppcf128(2151 ppc_fp128 %first,2152 ppc_fp128 %second,2153 metadata !"round.dynamic",2154 metadata !"fpexcept.strict") #12155 ret ppc_fp128 %atan22156}2157 2158attributes #0 = { nounwind strictfp }2159attributes #1 = { strictfp }2160 2161declare ppc_fp128 @llvm.experimental.constrained.fadd.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2162declare ppc_fp128 @llvm.experimental.constrained.ceil.ppcf128(ppc_fp128, metadata)2163declare ppc_fp128 @llvm.experimental.constrained.cos.ppcf128(ppc_fp128, metadata, metadata)2164declare ppc_fp128 @llvm.experimental.constrained.fdiv.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2165declare ppc_fp128 @llvm.experimental.constrained.exp.ppcf128(ppc_fp128, metadata, metadata)2166declare ppc_fp128 @llvm.experimental.constrained.exp2.ppcf128(ppc_fp128, metadata, metadata)2167declare ppc_fp128 @llvm.experimental.constrained.floor.ppcf128(ppc_fp128, metadata)2168declare ppc_fp128 @llvm.experimental.constrained.fma.ppcf128(ppc_fp128, ppc_fp128, ppc_fp128, metadata, metadata)2169declare ppc_fp128 @llvm.experimental.constrained.fpext.ppcf128.f32(float, metadata)2170declare ppc_fp128 @llvm.experimental.constrained.fpext.ppcf128.f64(double, metadata)2171declare float @llvm.experimental.constrained.fptrunc.f32.ppcf128(ppc_fp128, metadata, metadata)2172declare double @llvm.experimental.constrained.fptrunc.f64.ppcf128(ppc_fp128, metadata, metadata)2173declare ppc_fp128 @llvm.experimental.constrained.log.ppcf128(ppc_fp128, metadata, metadata)2174declare ppc_fp128 @llvm.experimental.constrained.log10.ppcf128(ppc_fp128, metadata, metadata)2175declare ppc_fp128 @llvm.experimental.constrained.log2.ppcf128(ppc_fp128, metadata, metadata)2176declare ppc_fp128 @llvm.experimental.constrained.maxnum.ppcf128(ppc_fp128, ppc_fp128, metadata)2177declare ppc_fp128 @llvm.experimental.constrained.minnum.ppcf128(ppc_fp128, ppc_fp128, metadata)2178declare ppc_fp128 @llvm.experimental.constrained.fmul.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2179declare ppc_fp128 @llvm.experimental.constrained.nearbyint.ppcf128(ppc_fp128, metadata, metadata)2180declare ppc_fp128 @llvm.experimental.constrained.pow.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2181declare ppc_fp128 @llvm.experimental.constrained.powi.ppcf128(ppc_fp128, i32, metadata, metadata)2182declare ppc_fp128 @llvm.experimental.constrained.frem.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2183declare ppc_fp128 @llvm.experimental.constrained.rint.ppcf128(ppc_fp128, metadata, metadata)2184declare ppc_fp128 @llvm.experimental.constrained.round.ppcf128(ppc_fp128, metadata)2185declare ppc_fp128 @llvm.experimental.constrained.sin.ppcf128(ppc_fp128, metadata, metadata)2186declare ppc_fp128 @llvm.experimental.constrained.sqrt.ppcf128(ppc_fp128, metadata, metadata)2187declare ppc_fp128 @llvm.experimental.constrained.fsub.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2188declare ppc_fp128 @llvm.experimental.constrained.tan.ppcf128(ppc_fp128, metadata, metadata)2189declare ppc_fp128 @llvm.experimental.constrained.atan2.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)2190declare ppc_fp128 @llvm.experimental.constrained.trunc.ppcf128(ppc_fp128, metadata)2191declare i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128, metadata)2192declare i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128, metadata)2193declare i1 @llvm.experimental.constrained.fptosi.i1.ppcf128(ppc_fp128, metadata)2194declare i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128, metadata)2195declare i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128, metadata)2196declare i1 @llvm.experimental.constrained.fptoui.i1.ppcf128(ppc_fp128, metadata)2197declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32, metadata, metadata)2198declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32, metadata, metadata)2199declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64, metadata, metadata)2200declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64, metadata, metadata)2201declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i128(i128, metadata, metadata)2202declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i128(i128, metadata, metadata)2203