913 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \3; RUN: -mtriple=powerpc64-unknown-unknown -verify-machineinstrs < %s | \4; RUN: FileCheck %s --check-prefix=BE5; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \6; RUN: -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs < %s | \7; RUN: FileCheck %s8define dso_local i64 @test_lrint(double %d) local_unnamed_addr {9; BE-LABEL: test_lrint:10; BE: # %bb.0: # %entry11; BE-NEXT: mflr r012; BE-NEXT: stdu r1, -112(r1)13; BE-NEXT: std r0, 128(r1)14; BE-NEXT: .cfi_def_cfa_offset 11215; BE-NEXT: .cfi_offset lr, 1616; BE-NEXT: bl lrint17; BE-NEXT: nop18; BE-NEXT: addi r1, r1, 11219; BE-NEXT: ld r0, 16(r1)20; BE-NEXT: mtlr r021; BE-NEXT: blr22;23; CHECK-LABEL: test_lrint:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: mflr r026; CHECK-NEXT: stdu r1, -32(r1)27; CHECK-NEXT: std r0, 48(r1)28; CHECK-NEXT: .cfi_def_cfa_offset 3229; CHECK-NEXT: .cfi_offset lr, 1630; CHECK-NEXT: bl lrint31; CHECK-NEXT: nop32; CHECK-NEXT: addi r1, r1, 3233; CHECK-NEXT: ld r0, 16(r1)34; CHECK-NEXT: mtlr r035; CHECK-NEXT: blr36entry:37 %0 = tail call i64 @llvm.lrint.i64.f64(double %d)38 ret i64 %039}40 41define dso_local i64 @test_constrained_lrint(double %d) local_unnamed_addr {42; BE-LABEL: test_constrained_lrint:43; BE: # %bb.0: # %entry44; BE-NEXT: mflr r045; BE-NEXT: stdu r1, -112(r1)46; BE-NEXT: std r0, 128(r1)47; BE-NEXT: .cfi_def_cfa_offset 11248; BE-NEXT: .cfi_offset lr, 1649; BE-NEXT: bl lrint50; BE-NEXT: nop51; BE-NEXT: addi r1, r1, 11252; BE-NEXT: ld r0, 16(r1)53; BE-NEXT: mtlr r054; BE-NEXT: blr55;56; CHECK-LABEL: test_constrained_lrint:57; CHECK: # %bb.0: # %entry58; CHECK-NEXT: fctid f0, f159; CHECK-NEXT: mffprd r3, f060; CHECK-NEXT: blr61entry:62 %0 = tail call i64 @llvm.experimental.constrained.lrint(double %d, metadata !"round.dynamic", metadata !"fpexcept.ignore")63 ret i64 %064}65 66declare i64 @llvm.lrint.i64.f64(double)67 68define dso_local i64 @test_lrintf(float %f) local_unnamed_addr {69; BE-LABEL: test_lrintf:70; BE: # %bb.0: # %entry71; BE-NEXT: mflr r072; BE-NEXT: stdu r1, -112(r1)73; BE-NEXT: std r0, 128(r1)74; BE-NEXT: .cfi_def_cfa_offset 11275; BE-NEXT: .cfi_offset lr, 1676; BE-NEXT: bl lrintf77; BE-NEXT: nop78; BE-NEXT: addi r1, r1, 11279; BE-NEXT: ld r0, 16(r1)80; BE-NEXT: mtlr r081; BE-NEXT: blr82;83; CHECK-LABEL: test_lrintf:84; CHECK: # %bb.0: # %entry85; CHECK-NEXT: mflr r086; CHECK-NEXT: stdu r1, -32(r1)87; CHECK-NEXT: std r0, 48(r1)88; CHECK-NEXT: .cfi_def_cfa_offset 3289; CHECK-NEXT: .cfi_offset lr, 1690; CHECK-NEXT: bl lrintf91; CHECK-NEXT: nop92; CHECK-NEXT: addi r1, r1, 3293; CHECK-NEXT: ld r0, 16(r1)94; CHECK-NEXT: mtlr r095; CHECK-NEXT: blr96entry:97 %0 = tail call i64 @llvm.lrint.i64.f32(float %f)98 ret i64 %099}100 101define dso_local i64 @test_constrained_lrintf(float %f) local_unnamed_addr {102; BE-LABEL: test_constrained_lrintf:103; BE: # %bb.0: # %entry104; BE-NEXT: mflr r0105; BE-NEXT: stdu r1, -112(r1)106; BE-NEXT: std r0, 128(r1)107; BE-NEXT: .cfi_def_cfa_offset 112108; BE-NEXT: .cfi_offset lr, 16109; BE-NEXT: bl lrintf110; BE-NEXT: nop111; BE-NEXT: addi r1, r1, 112112; BE-NEXT: ld r0, 16(r1)113; BE-NEXT: mtlr r0114; BE-NEXT: blr115;116; CHECK-LABEL: test_constrained_lrintf:117; CHECK: # %bb.0: # %entry118; CHECK-NEXT: fctid f0, f1119; CHECK-NEXT: mffprd r3, f0120; CHECK-NEXT: blr121entry:122 %0 = tail call i64 @llvm.experimental.constrained.lrint(float %f, metadata !"round.dynamic", metadata !"fpexcept.ignore")123 ret i64 %0124}125 126declare i64 @llvm.lrint.i64.f32(float)127 128define dso_local i64 @test_llrint(double %d) local_unnamed_addr {129; BE-LABEL: test_llrint:130; BE: # %bb.0: # %entry131; BE-NEXT: mflr r0132; BE-NEXT: stdu r1, -112(r1)133; BE-NEXT: std r0, 128(r1)134; BE-NEXT: .cfi_def_cfa_offset 112135; BE-NEXT: .cfi_offset lr, 16136; BE-NEXT: bl llrint137; BE-NEXT: nop138; BE-NEXT: addi r1, r1, 112139; BE-NEXT: ld r0, 16(r1)140; BE-NEXT: mtlr r0141; BE-NEXT: blr142;143; CHECK-LABEL: test_llrint:144; CHECK: # %bb.0: # %entry145; CHECK-NEXT: mflr r0146; CHECK-NEXT: stdu r1, -32(r1)147; CHECK-NEXT: std r0, 48(r1)148; CHECK-NEXT: .cfi_def_cfa_offset 32149; CHECK-NEXT: .cfi_offset lr, 16150; CHECK-NEXT: bl llrint151; CHECK-NEXT: nop152; CHECK-NEXT: addi r1, r1, 32153; CHECK-NEXT: ld r0, 16(r1)154; CHECK-NEXT: mtlr r0155; CHECK-NEXT: blr156entry:157 %0 = tail call i64 @llvm.llrint.i64.f64(double %d)158 ret i64 %0159}160 161define dso_local i64 @test_constrained_llrint(double %d) local_unnamed_addr {162; BE-LABEL: test_constrained_llrint:163; BE: # %bb.0: # %entry164; BE-NEXT: mflr r0165; BE-NEXT: stdu r1, -112(r1)166; BE-NEXT: std r0, 128(r1)167; BE-NEXT: .cfi_def_cfa_offset 112168; BE-NEXT: .cfi_offset lr, 16169; BE-NEXT: bl llrint170; BE-NEXT: nop171; BE-NEXT: addi r1, r1, 112172; BE-NEXT: ld r0, 16(r1)173; BE-NEXT: mtlr r0174; BE-NEXT: blr175;176; CHECK-LABEL: test_constrained_llrint:177; CHECK: # %bb.0: # %entry178; CHECK-NEXT: fctid f0, f1179; CHECK-NEXT: mffprd r3, f0180; CHECK-NEXT: blr181entry:182 %0 = tail call i64 @llvm.experimental.constrained.llrint(double %d, metadata !"round.dynamic", metadata !"fpexcept.ignore")183 ret i64 %0184}185 186declare i64 @llvm.llrint.i64.f64(double)187 188define dso_local i64 @test_llrintf(float %f) local_unnamed_addr {189; BE-LABEL: test_llrintf:190; BE: # %bb.0: # %entry191; BE-NEXT: mflr r0192; BE-NEXT: stdu r1, -112(r1)193; BE-NEXT: std r0, 128(r1)194; BE-NEXT: .cfi_def_cfa_offset 112195; BE-NEXT: .cfi_offset lr, 16196; BE-NEXT: bl llrintf197; BE-NEXT: nop198; BE-NEXT: addi r1, r1, 112199; BE-NEXT: ld r0, 16(r1)200; BE-NEXT: mtlr r0201; BE-NEXT: blr202;203; CHECK-LABEL: test_llrintf:204; CHECK: # %bb.0: # %entry205; CHECK-NEXT: mflr r0206; CHECK-NEXT: stdu r1, -32(r1)207; CHECK-NEXT: std r0, 48(r1)208; CHECK-NEXT: .cfi_def_cfa_offset 32209; CHECK-NEXT: .cfi_offset lr, 16210; CHECK-NEXT: bl llrintf211; CHECK-NEXT: nop212; CHECK-NEXT: addi r1, r1, 32213; CHECK-NEXT: ld r0, 16(r1)214; CHECK-NEXT: mtlr r0215; CHECK-NEXT: blr216entry:217 %0 = tail call i64 @llvm.llrint.i64.f32(float %f)218 ret i64 %0219}220 221define dso_local i64 @test_constrained_llrintf(float %f) local_unnamed_addr {222; BE-LABEL: test_constrained_llrintf:223; BE: # %bb.0: # %entry224; BE-NEXT: mflr r0225; BE-NEXT: stdu r1, -112(r1)226; BE-NEXT: std r0, 128(r1)227; BE-NEXT: .cfi_def_cfa_offset 112228; BE-NEXT: .cfi_offset lr, 16229; BE-NEXT: bl llrintf230; BE-NEXT: nop231; BE-NEXT: addi r1, r1, 112232; BE-NEXT: ld r0, 16(r1)233; BE-NEXT: mtlr r0234; BE-NEXT: blr235;236; CHECK-LABEL: test_constrained_llrintf:237; CHECK: # %bb.0: # %entry238; CHECK-NEXT: fctid f0, f1239; CHECK-NEXT: mffprd r3, f0240; CHECK-NEXT: blr241entry:242 %0 = tail call i64 @llvm.experimental.constrained.llrint(float %f, metadata !"round.dynamic", metadata !"fpexcept.ignore")243 ret i64 %0244}245 246declare i64 @llvm.llrint.i64.f32(float)247 248define dso_local i64 @test_lround(double %d) local_unnamed_addr {249; BE-LABEL: test_lround:250; BE: # %bb.0: # %entry251; BE-NEXT: mflr r0252; BE-NEXT: stdu r1, -112(r1)253; BE-NEXT: std r0, 128(r1)254; BE-NEXT: .cfi_def_cfa_offset 112255; BE-NEXT: .cfi_offset lr, 16256; BE-NEXT: bl lround257; BE-NEXT: nop258; BE-NEXT: addi r1, r1, 112259; BE-NEXT: ld r0, 16(r1)260; BE-NEXT: mtlr r0261; BE-NEXT: blr262;263; CHECK-LABEL: test_lround:264; CHECK: # %bb.0: # %entry265; CHECK-NEXT: mflr r0266; CHECK-NEXT: stdu r1, -32(r1)267; CHECK-NEXT: std r0, 48(r1)268; CHECK-NEXT: .cfi_def_cfa_offset 32269; CHECK-NEXT: .cfi_offset lr, 16270; CHECK-NEXT: bl lround271; CHECK-NEXT: nop272; CHECK-NEXT: addi r1, r1, 32273; CHECK-NEXT: ld r0, 16(r1)274; CHECK-NEXT: mtlr r0275; CHECK-NEXT: blr276entry:277 %0 = tail call i64 @llvm.lround.i64.f64(double %d)278 ret i64 %0279}280 281define dso_local i64 @test_constrained_lround(double %d) local_unnamed_addr {282; BE-LABEL: test_constrained_lround:283; BE: # %bb.0: # %entry284; BE-NEXT: mflr r0285; BE-NEXT: stdu r1, -112(r1)286; BE-NEXT: std r0, 128(r1)287; BE-NEXT: .cfi_def_cfa_offset 112288; BE-NEXT: .cfi_offset lr, 16289; BE-NEXT: bl lround290; BE-NEXT: nop291; BE-NEXT: addi r1, r1, 112292; BE-NEXT: ld r0, 16(r1)293; BE-NEXT: mtlr r0294; BE-NEXT: blr295;296; CHECK-LABEL: test_constrained_lround:297; CHECK: # %bb.0: # %entry298; CHECK-NEXT: xsrdpi f0, f1299; CHECK-NEXT: fctid f0, f0300; CHECK-NEXT: mffprd r3, f0301; CHECK-NEXT: blr302entry:303 %0 = tail call i64 @llvm.experimental.constrained.lround(double %d, metadata !"fpexcept.ignore")304 ret i64 %0305}306 307declare i64 @llvm.lround.i64.f64(double)308 309define dso_local i32 @test_lroundi32f64(double %d) local_unnamed_addr {310; BE-LABEL: test_lroundi32f64:311; BE: # %bb.0: # %entry312; BE-NEXT: mflr r0313; BE-NEXT: stdu r1, -112(r1)314; BE-NEXT: std r0, 128(r1)315; BE-NEXT: .cfi_def_cfa_offset 112316; BE-NEXT: .cfi_offset lr, 16317; BE-NEXT: bl lround318; BE-NEXT: nop319; BE-NEXT: addi r1, r1, 112320; BE-NEXT: ld r0, 16(r1)321; BE-NEXT: mtlr r0322; BE-NEXT: blr323;324; CHECK-LABEL: test_lroundi32f64:325; CHECK: # %bb.0: # %entry326; CHECK-NEXT: mflr r0327; CHECK-NEXT: stdu r1, -32(r1)328; CHECK-NEXT: std r0, 48(r1)329; CHECK-NEXT: .cfi_def_cfa_offset 32330; CHECK-NEXT: .cfi_offset lr, 16331; CHECK-NEXT: bl lround332; CHECK-NEXT: nop333; CHECK-NEXT: addi r1, r1, 32334; CHECK-NEXT: ld r0, 16(r1)335; CHECK-NEXT: mtlr r0336; CHECK-NEXT: blr337entry:338 %0 = tail call i32 @llvm.lround.i32.f64(double %d)339 ret i32 %0340}341 342define dso_local i32 @test_constrained_lroundi32f64(double %d) local_unnamed_addr {343; BE-LABEL: test_constrained_lroundi32f64:344; BE: # %bb.0: # %entry345; BE-NEXT: mflr r0346; BE-NEXT: stdu r1, -112(r1)347; BE-NEXT: std r0, 128(r1)348; BE-NEXT: .cfi_def_cfa_offset 112349; BE-NEXT: .cfi_offset lr, 16350; BE-NEXT: bl lround351; BE-NEXT: nop352; BE-NEXT: addi r1, r1, 112353; BE-NEXT: ld r0, 16(r1)354; BE-NEXT: mtlr r0355; BE-NEXT: blr356;357; CHECK-LABEL: test_constrained_lroundi32f64:358; CHECK: # %bb.0: # %entry359; CHECK-NEXT: xsrdpi f0, f1360; CHECK-NEXT: fctiw f0, f0361; CHECK-NEXT: mffprwz r3, f0362; CHECK-NEXT: blr363entry:364 %0 = tail call i32 @llvm.experimental.constrained.lround(double %d, metadata !"fpexcept.ignore")365 ret i32 %0366}367 368declare i32 @llvm.lround.i32.f64(double)369 370define dso_local i64 @test_lroundf(float %f) local_unnamed_addr {371; BE-LABEL: test_lroundf:372; BE: # %bb.0: # %entry373; BE-NEXT: mflr r0374; BE-NEXT: stdu r1, -112(r1)375; BE-NEXT: std r0, 128(r1)376; BE-NEXT: .cfi_def_cfa_offset 112377; BE-NEXT: .cfi_offset lr, 16378; BE-NEXT: bl lroundf379; BE-NEXT: nop380; BE-NEXT: addi r1, r1, 112381; BE-NEXT: ld r0, 16(r1)382; BE-NEXT: mtlr r0383; BE-NEXT: blr384;385; CHECK-LABEL: test_lroundf:386; CHECK: # %bb.0: # %entry387; CHECK-NEXT: mflr r0388; CHECK-NEXT: stdu r1, -32(r1)389; CHECK-NEXT: std r0, 48(r1)390; CHECK-NEXT: .cfi_def_cfa_offset 32391; CHECK-NEXT: .cfi_offset lr, 16392; CHECK-NEXT: bl lroundf393; CHECK-NEXT: nop394; CHECK-NEXT: addi r1, r1, 32395; CHECK-NEXT: ld r0, 16(r1)396; CHECK-NEXT: mtlr r0397; CHECK-NEXT: blr398entry:399 %0 = tail call i64 @llvm.lround.i64.f32(float %f)400 ret i64 %0401}402 403define dso_local i64 @test_constrained_lroundf(float %f) local_unnamed_addr {404; BE-LABEL: test_constrained_lroundf:405; BE: # %bb.0: # %entry406; BE-NEXT: mflr r0407; BE-NEXT: stdu r1, -112(r1)408; BE-NEXT: std r0, 128(r1)409; BE-NEXT: .cfi_def_cfa_offset 112410; BE-NEXT: .cfi_offset lr, 16411; BE-NEXT: bl lroundf412; BE-NEXT: nop413; BE-NEXT: addi r1, r1, 112414; BE-NEXT: ld r0, 16(r1)415; BE-NEXT: mtlr r0416; BE-NEXT: blr417;418; CHECK-LABEL: test_constrained_lroundf:419; CHECK: # %bb.0: # %entry420; CHECK-NEXT: xsrdpi f0, f1421; CHECK-NEXT: fctid f0, f0422; CHECK-NEXT: mffprd r3, f0423; CHECK-NEXT: blr424entry:425 %0 = tail call i64 @llvm.experimental.constrained.lround(float %f, metadata !"fpexcept.ignore")426 ret i64 %0427}428 429declare i64 @llvm.lround.i64.f32(float)430 431define dso_local i32 @test_lroundi32f32(float %d) local_unnamed_addr {432; BE-LABEL: test_lroundi32f32:433; BE: # %bb.0: # %entry434; BE-NEXT: mflr r0435; BE-NEXT: stdu r1, -112(r1)436; BE-NEXT: std r0, 128(r1)437; BE-NEXT: .cfi_def_cfa_offset 112438; BE-NEXT: .cfi_offset lr, 16439; BE-NEXT: bl lroundf440; BE-NEXT: nop441; BE-NEXT: addi r1, r1, 112442; BE-NEXT: ld r0, 16(r1)443; BE-NEXT: mtlr r0444; BE-NEXT: blr445;446; CHECK-LABEL: test_lroundi32f32:447; CHECK: # %bb.0: # %entry448; CHECK-NEXT: mflr r0449; CHECK-NEXT: stdu r1, -32(r1)450; CHECK-NEXT: std r0, 48(r1)451; CHECK-NEXT: .cfi_def_cfa_offset 32452; CHECK-NEXT: .cfi_offset lr, 16453; CHECK-NEXT: bl lroundf454; CHECK-NEXT: nop455; CHECK-NEXT: addi r1, r1, 32456; CHECK-NEXT: ld r0, 16(r1)457; CHECK-NEXT: mtlr r0458; CHECK-NEXT: blr459entry:460 %0 = tail call i32 @llvm.lround.i32.f32(float %d)461 ret i32 %0462}463 464define dso_local i32 @test_constrained_lroundi32f32(float %f) local_unnamed_addr {465; BE-LABEL: test_constrained_lroundi32f32:466; BE: # %bb.0: # %entry467; BE-NEXT: mflr r0468; BE-NEXT: stdu r1, -112(r1)469; BE-NEXT: std r0, 128(r1)470; BE-NEXT: .cfi_def_cfa_offset 112471; BE-NEXT: .cfi_offset lr, 16472; BE-NEXT: bl lroundf473; BE-NEXT: nop474; BE-NEXT: addi r1, r1, 112475; BE-NEXT: ld r0, 16(r1)476; BE-NEXT: mtlr r0477; BE-NEXT: blr478;479; CHECK-LABEL: test_constrained_lroundi32f32:480; CHECK: # %bb.0: # %entry481; CHECK-NEXT: xsrdpi f0, f1482; CHECK-NEXT: fctiw f0, f0483; CHECK-NEXT: mffprwz r3, f0484; CHECK-NEXT: blr485entry:486 %0 = tail call i32 @llvm.experimental.constrained.lround(float %f, metadata !"fpexcept.ignore")487 ret i32 %0488}489 490declare i32 @llvm.lround.i32.f32(float)491 492define dso_local i64 @test_llround(double %d) local_unnamed_addr {493; BE-LABEL: test_llround:494; BE: # %bb.0: # %entry495; BE-NEXT: mflr r0496; BE-NEXT: stdu r1, -112(r1)497; BE-NEXT: std r0, 128(r1)498; BE-NEXT: .cfi_def_cfa_offset 112499; BE-NEXT: .cfi_offset lr, 16500; BE-NEXT: bl llround501; BE-NEXT: nop502; BE-NEXT: addi r1, r1, 112503; BE-NEXT: ld r0, 16(r1)504; BE-NEXT: mtlr r0505; BE-NEXT: blr506;507; CHECK-LABEL: test_llround:508; CHECK: # %bb.0: # %entry509; CHECK-NEXT: mflr r0510; CHECK-NEXT: stdu r1, -32(r1)511; CHECK-NEXT: std r0, 48(r1)512; CHECK-NEXT: .cfi_def_cfa_offset 32513; CHECK-NEXT: .cfi_offset lr, 16514; CHECK-NEXT: bl llround515; CHECK-NEXT: nop516; CHECK-NEXT: addi r1, r1, 32517; CHECK-NEXT: ld r0, 16(r1)518; CHECK-NEXT: mtlr r0519; CHECK-NEXT: blr520entry:521 %0 = tail call i64 @llvm.llround.i64.f64(double %d)522 ret i64 %0523}524 525define dso_local i64 @test_constrained_llround(double %d) local_unnamed_addr {526; BE-LABEL: test_constrained_llround:527; BE: # %bb.0: # %entry528; BE-NEXT: mflr r0529; BE-NEXT: stdu r1, -112(r1)530; BE-NEXT: std r0, 128(r1)531; BE-NEXT: .cfi_def_cfa_offset 112532; BE-NEXT: .cfi_offset lr, 16533; BE-NEXT: bl llround534; BE-NEXT: nop535; BE-NEXT: addi r1, r1, 112536; BE-NEXT: ld r0, 16(r1)537; BE-NEXT: mtlr r0538; BE-NEXT: blr539;540; CHECK-LABEL: test_constrained_llround:541; CHECK: # %bb.0: # %entry542; CHECK-NEXT: xsrdpi f0, f1543; CHECK-NEXT: fctid f0, f0544; CHECK-NEXT: mffprd r3, f0545; CHECK-NEXT: blr546entry:547 %0 = tail call i64 @llvm.experimental.constrained.llround(double %d, metadata !"fpexcept.ignore")548 ret i64 %0549}550 551declare i64 @llvm.llround.i64.f64(double)552 553define dso_local i64 @test_llroundf(float %f) local_unnamed_addr {554; BE-LABEL: test_llroundf:555; BE: # %bb.0: # %entry556; BE-NEXT: mflr r0557; BE-NEXT: stdu r1, -112(r1)558; BE-NEXT: std r0, 128(r1)559; BE-NEXT: .cfi_def_cfa_offset 112560; BE-NEXT: .cfi_offset lr, 16561; BE-NEXT: bl llroundf562; BE-NEXT: nop563; BE-NEXT: addi r1, r1, 112564; BE-NEXT: ld r0, 16(r1)565; BE-NEXT: mtlr r0566; BE-NEXT: blr567;568; CHECK-LABEL: test_llroundf:569; CHECK: # %bb.0: # %entry570; CHECK-NEXT: mflr r0571; CHECK-NEXT: stdu r1, -32(r1)572; CHECK-NEXT: std r0, 48(r1)573; CHECK-NEXT: .cfi_def_cfa_offset 32574; CHECK-NEXT: .cfi_offset lr, 16575; CHECK-NEXT: bl llroundf576; CHECK-NEXT: nop577; CHECK-NEXT: addi r1, r1, 32578; CHECK-NEXT: ld r0, 16(r1)579; CHECK-NEXT: mtlr r0580; CHECK-NEXT: blr581entry:582 %0 = tail call i64 @llvm.llround.i64.f32(float %f)583 ret i64 %0584}585 586define dso_local i64 @test_constrained_llroundf(float %f) local_unnamed_addr {587; BE-LABEL: test_constrained_llroundf:588; BE: # %bb.0: # %entry589; BE-NEXT: mflr r0590; BE-NEXT: stdu r1, -112(r1)591; BE-NEXT: std r0, 128(r1)592; BE-NEXT: .cfi_def_cfa_offset 112593; BE-NEXT: .cfi_offset lr, 16594; BE-NEXT: bl llroundf595; BE-NEXT: nop596; BE-NEXT: addi r1, r1, 112597; BE-NEXT: ld r0, 16(r1)598; BE-NEXT: mtlr r0599; BE-NEXT: blr600;601; CHECK-LABEL: test_constrained_llroundf:602; CHECK: # %bb.0: # %entry603; CHECK-NEXT: xsrdpi f0, f1604; CHECK-NEXT: fctid f0, f0605; CHECK-NEXT: mffprd r3, f0606; CHECK-NEXT: blr607entry:608 %0 = tail call i64 @llvm.experimental.constrained.llround(float %f, metadata !"fpexcept.ignore")609 ret i64 %0610}611 612declare i64 @llvm.llround.i64.f32(float)613 614define dso_local double @test_nearbyint(double %d) local_unnamed_addr {615; BE-LABEL: test_nearbyint:616; BE: # %bb.0: # %entry617; BE-NEXT: mflr r0618; BE-NEXT: stdu r1, -112(r1)619; BE-NEXT: std r0, 128(r1)620; BE-NEXT: .cfi_def_cfa_offset 112621; BE-NEXT: .cfi_offset lr, 16622; BE-NEXT: bl nearbyint623; BE-NEXT: nop624; BE-NEXT: addi r1, r1, 112625; BE-NEXT: ld r0, 16(r1)626; BE-NEXT: mtlr r0627; BE-NEXT: blr628;629; CHECK-LABEL: test_nearbyint:630; CHECK: # %bb.0: # %entry631; CHECK-NEXT: mflr r0632; CHECK-NEXT: stdu r1, -32(r1)633; CHECK-NEXT: std r0, 48(r1)634; CHECK-NEXT: .cfi_def_cfa_offset 32635; CHECK-NEXT: .cfi_offset lr, 16636; CHECK-NEXT: bl nearbyint637; CHECK-NEXT: nop638; CHECK-NEXT: addi r1, r1, 32639; CHECK-NEXT: ld r0, 16(r1)640; CHECK-NEXT: mtlr r0641; CHECK-NEXT: blr642entry:643 %0 = tail call double @llvm.nearbyint.f64(double %d)644 ret double %0645}646 647define dso_local double @test_constrained_nearbyint(double %d) local_unnamed_addr {648; BE-LABEL: test_constrained_nearbyint:649; BE: # %bb.0: # %entry650; BE-NEXT: xsrdpic f1, f1651; BE-NEXT: blr652;653; CHECK-LABEL: test_constrained_nearbyint:654; CHECK: # %bb.0: # %entry655; CHECK-NEXT: xsrdpic f1, f1656; CHECK-NEXT: blr657entry:658 %0 = tail call double @llvm.experimental.constrained.nearbyint(double %d, metadata !"round.dynamic", metadata !"fpexcept.ignore")659 ret double %0660}661 662declare double @llvm.nearbyint.f64(double)663 664define dso_local float @test_nearbyintf(float %f) local_unnamed_addr {665; BE-LABEL: test_nearbyintf:666; BE: # %bb.0: # %entry667; BE-NEXT: mflr r0668; BE-NEXT: stdu r1, -112(r1)669; BE-NEXT: std r0, 128(r1)670; BE-NEXT: .cfi_def_cfa_offset 112671; BE-NEXT: .cfi_offset lr, 16672; BE-NEXT: bl nearbyintf673; BE-NEXT: nop674; BE-NEXT: addi r1, r1, 112675; BE-NEXT: ld r0, 16(r1)676; BE-NEXT: mtlr r0677; BE-NEXT: blr678;679; CHECK-LABEL: test_nearbyintf:680; CHECK: # %bb.0: # %entry681; CHECK-NEXT: mflr r0682; CHECK-NEXT: stdu r1, -32(r1)683; CHECK-NEXT: std r0, 48(r1)684; CHECK-NEXT: .cfi_def_cfa_offset 32685; CHECK-NEXT: .cfi_offset lr, 16686; CHECK-NEXT: bl nearbyintf687; CHECK-NEXT: nop688; CHECK-NEXT: addi r1, r1, 32689; CHECK-NEXT: ld r0, 16(r1)690; CHECK-NEXT: mtlr r0691; CHECK-NEXT: blr692entry:693 %0 = tail call float @llvm.nearbyint.f32(float %f)694 ret float %0695}696 697define dso_local float @test_constrained_nearbyintf(float %f) local_unnamed_addr {698; BE-LABEL: test_constrained_nearbyintf:699; BE: # %bb.0: # %entry700; BE-NEXT: xsrdpic f1, f1701; BE-NEXT: blr702;703; CHECK-LABEL: test_constrained_nearbyintf:704; CHECK: # %bb.0: # %entry705; CHECK-NEXT: xsrdpic f1, f1706; CHECK-NEXT: blr707entry:708 %0 = tail call float @llvm.experimental.constrained.nearbyint(float %f, metadata !"round.dynamic", metadata !"fpexcept.ignore")709 ret float %0710}711 712declare float @llvm.nearbyint.f32(float)713 714define dso_local double @test_round(double %d) local_unnamed_addr {715; BE-LABEL: test_round:716; BE: # %bb.0: # %entry717; BE-NEXT: xsrdpi f1, f1718; BE-NEXT: blr719;720; CHECK-LABEL: test_round:721; CHECK: # %bb.0: # %entry722; CHECK-NEXT: xsrdpi f1, f1723; CHECK-NEXT: blr724entry:725 %0 = tail call double @llvm.round.f64(double %d)726 ret double %0727}728 729define dso_local double @test_constrained_round(double %d) local_unnamed_addr {730; BE-LABEL: test_constrained_round:731; BE: # %bb.0: # %entry732; BE-NEXT: xsrdpi f1, f1733; BE-NEXT: blr734;735; CHECK-LABEL: test_constrained_round:736; CHECK: # %bb.0: # %entry737; CHECK-NEXT: xsrdpi f1, f1738; CHECK-NEXT: blr739entry:740 %0 = tail call double @llvm.experimental.constrained.round(double %d, metadata !"fpexcept.ignore")741 ret double %0742}743 744declare double @llvm.round.f64(double)745 746define dso_local float @test_roundf(float %f) local_unnamed_addr {747; BE-LABEL: test_roundf:748; BE: # %bb.0: # %entry749; BE-NEXT: xsrdpi f1, f1750; BE-NEXT: blr751;752; CHECK-LABEL: test_roundf:753; CHECK: # %bb.0: # %entry754; CHECK-NEXT: xsrdpi f1, f1755; CHECK-NEXT: blr756entry:757 %0 = tail call float @llvm.round.f32(float %f)758 ret float %0759}760 761define dso_local float @test_constrained_roundf(float %f) local_unnamed_addr {762; BE-LABEL: test_constrained_roundf:763; BE: # %bb.0: # %entry764; BE-NEXT: xsrdpi f1, f1765; BE-NEXT: blr766;767; CHECK-LABEL: test_constrained_roundf:768; CHECK: # %bb.0: # %entry769; CHECK-NEXT: xsrdpi f1, f1770; CHECK-NEXT: blr771entry:772 %0 = tail call float @llvm.experimental.constrained.round(float %f, metadata !"fpexcept.ignore")773 ret float %0774}775 776declare float @llvm.round.f32(float)777 778define dso_local double @test_trunc(double %d) local_unnamed_addr {779; BE-LABEL: test_trunc:780; BE: # %bb.0: # %entry781; BE-NEXT: xsrdpiz f1, f1782; BE-NEXT: blr783;784; CHECK-LABEL: test_trunc:785; CHECK: # %bb.0: # %entry786; CHECK-NEXT: xsrdpiz f1, f1787; CHECK-NEXT: blr788entry:789 %0 = tail call double @llvm.trunc.f64(double %d)790 ret double %0791}792 793declare double @llvm.trunc.f64(double)794 795define dso_local float @test_truncf(float %f) local_unnamed_addr {796; BE-LABEL: test_truncf:797; BE: # %bb.0: # %entry798; BE-NEXT: xsrdpiz f1, f1799; BE-NEXT: blr800;801; CHECK-LABEL: test_truncf:802; CHECK: # %bb.0: # %entry803; CHECK-NEXT: xsrdpiz f1, f1804; CHECK-NEXT: blr805entry:806 %0 = tail call float @llvm.trunc.f32(float %f)807 ret float %0808}809 810declare float @llvm.trunc.f32(float)811 812define dso_local double @test_floor(double %d) local_unnamed_addr {813; BE-LABEL: test_floor:814; BE: # %bb.0: # %entry815; BE-NEXT: xsrdpim f1, f1816; BE-NEXT: blr817;818; CHECK-LABEL: test_floor:819; CHECK: # %bb.0: # %entry820; CHECK-NEXT: xsrdpim f1, f1821; CHECK-NEXT: blr822entry:823 %0 = tail call double @llvm.floor.f64(double %d)824 ret double %0825}826 827declare double @llvm.floor.f64(double)828 829define dso_local float @test_floorf(float %f) local_unnamed_addr {830; BE-LABEL: test_floorf:831; BE: # %bb.0: # %entry832; BE-NEXT: xsrdpim f1, f1833; BE-NEXT: blr834;835; CHECK-LABEL: test_floorf:836; CHECK: # %bb.0: # %entry837; CHECK-NEXT: xsrdpim f1, f1838; CHECK-NEXT: blr839entry:840 %0 = tail call float @llvm.floor.f32(float %f)841 ret float %0842}843 844declare float @llvm.floor.f32(float)845 846define dso_local double @test_ceil(double %d) local_unnamed_addr {847; BE-LABEL: test_ceil:848; BE: # %bb.0: # %entry849; BE-NEXT: xsrdpip f1, f1850; BE-NEXT: blr851;852; CHECK-LABEL: test_ceil:853; CHECK: # %bb.0: # %entry854; CHECK-NEXT: xsrdpip f1, f1855; CHECK-NEXT: blr856entry:857 %0 = tail call double @llvm.ceil.f64(double %d)858 ret double %0859}860 861declare double @llvm.ceil.f64(double)862 863define dso_local float @test_ceilf(float %f) local_unnamed_addr {864; BE-LABEL: test_ceilf:865; BE: # %bb.0: # %entry866; BE-NEXT: xsrdpip f1, f1867; BE-NEXT: blr868;869; CHECK-LABEL: test_ceilf:870; CHECK: # %bb.0: # %entry871; CHECK-NEXT: xsrdpip f1, f1872; CHECK-NEXT: blr873entry:874 %0 = tail call float @llvm.ceil.f32(float %f)875 ret float %0876}877 878declare float @llvm.ceil.f32(float)879 880define dso_local double @test_rint(double %d) local_unnamed_addr {881; BE-LABEL: test_rint:882; BE: # %bb.0: # %entry883; BE-NEXT: xsrdpic f1, f1884; BE-NEXT: blr885;886; CHECK-LABEL: test_rint:887; CHECK: # %bb.0: # %entry888; CHECK-NEXT: xsrdpic f1, f1889; CHECK-NEXT: blr890entry:891 %0 = tail call double @llvm.rint.f64(double %d)892 ret double %0893}894 895declare double @llvm.rint.f64(double)896 897define dso_local float @test_rintf(float %f) local_unnamed_addr {898; BE-LABEL: test_rintf:899; BE: # %bb.0: # %entry900; BE-NEXT: xsrdpic f1, f1901; BE-NEXT: blr902;903; CHECK-LABEL: test_rintf:904; CHECK: # %bb.0: # %entry905; CHECK-NEXT: xsrdpic f1, f1906; CHECK-NEXT: blr907entry:908 %0 = tail call float @llvm.rint.f32(float %f)909 ret float %0910}911 912declare float @llvm.rint.f32(float)913