1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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=BE 5; 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 %s 8; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 9; RUN: -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs < %s \ 10; RUN: --enable-unsafe-fp-math | FileCheck %s --check-prefix=FAST 11define dso_local i64 @test_lrint(double %d) local_unnamed_addr { 12; BE-LABEL: test_lrint: 13; BE: # %bb.0: # %entry 14; BE-NEXT: mflr r0 15; BE-NEXT: stdu r1, -112(r1) 16; BE-NEXT: std r0, 128(r1) 17; BE-NEXT: .cfi_def_cfa_offset 112 18; BE-NEXT: .cfi_offset lr, 16 19; BE-NEXT: bl lrint 20; BE-NEXT: nop 21; BE-NEXT: addi r1, r1, 112 22; BE-NEXT: ld r0, 16(r1) 23; BE-NEXT: mtlr r0 24; BE-NEXT: blr 25; 26; CHECK-LABEL: test_lrint: 27; CHECK: # %bb.0: # %entry 28; CHECK-NEXT: mflr r0 29; CHECK-NEXT: stdu r1, -32(r1) 30; CHECK-NEXT: std r0, 48(r1) 31; CHECK-NEXT: .cfi_def_cfa_offset 32 32; CHECK-NEXT: .cfi_offset lr, 16 33; CHECK-NEXT: bl lrint 34; CHECK-NEXT: nop 35; CHECK-NEXT: addi r1, r1, 32 36; CHECK-NEXT: ld r0, 16(r1) 37; CHECK-NEXT: mtlr r0 38; CHECK-NEXT: blr 39; 40; FAST-LABEL: test_lrint: 41; FAST: # %bb.0: # %entry 42; FAST-NEXT: fctid f0, f1 43; FAST-NEXT: mffprd r3, f0 44; FAST-NEXT: blr 45entry: 46 %0 = tail call i64 @llvm.lrint.i64.f64(double %d) 47 ret i64 %0 48} 49 50declare i64 @llvm.lrint.i64.f64(double) 51 52define dso_local i64 @test_lrintf(float %f) local_unnamed_addr { 53; BE-LABEL: test_lrintf: 54; BE: # %bb.0: # %entry 55; BE-NEXT: mflr r0 56; BE-NEXT: stdu r1, -112(r1) 57; BE-NEXT: std r0, 128(r1) 58; BE-NEXT: .cfi_def_cfa_offset 112 59; BE-NEXT: .cfi_offset lr, 16 60; BE-NEXT: bl lrintf 61; BE-NEXT: nop 62; BE-NEXT: addi r1, r1, 112 63; BE-NEXT: ld r0, 16(r1) 64; BE-NEXT: mtlr r0 65; BE-NEXT: blr 66; 67; CHECK-LABEL: test_lrintf: 68; CHECK: # %bb.0: # %entry 69; CHECK-NEXT: mflr r0 70; CHECK-NEXT: stdu r1, -32(r1) 71; CHECK-NEXT: std r0, 48(r1) 72; CHECK-NEXT: .cfi_def_cfa_offset 32 73; CHECK-NEXT: .cfi_offset lr, 16 74; CHECK-NEXT: bl lrintf 75; CHECK-NEXT: nop 76; CHECK-NEXT: addi r1, r1, 32 77; CHECK-NEXT: ld r0, 16(r1) 78; CHECK-NEXT: mtlr r0 79; CHECK-NEXT: blr 80; 81; FAST-LABEL: test_lrintf: 82; FAST: # %bb.0: # %entry 83; FAST-NEXT: fctid f0, f1 84; FAST-NEXT: mffprd r3, f0 85; FAST-NEXT: blr 86entry: 87 %0 = tail call i64 @llvm.lrint.i64.f32(float %f) 88 ret i64 %0 89} 90 91declare i64 @llvm.lrint.i64.f32(float) 92 93define dso_local i64 @test_llrint(double %d) local_unnamed_addr { 94; BE-LABEL: test_llrint: 95; BE: # %bb.0: # %entry 96; BE-NEXT: mflr r0 97; BE-NEXT: stdu r1, -112(r1) 98; BE-NEXT: std r0, 128(r1) 99; BE-NEXT: .cfi_def_cfa_offset 112 100; BE-NEXT: .cfi_offset lr, 16 101; BE-NEXT: bl llrint 102; BE-NEXT: nop 103; BE-NEXT: addi r1, r1, 112 104; BE-NEXT: ld r0, 16(r1) 105; BE-NEXT: mtlr r0 106; BE-NEXT: blr 107; 108; CHECK-LABEL: test_llrint: 109; CHECK: # %bb.0: # %entry 110; CHECK-NEXT: mflr r0 111; CHECK-NEXT: stdu r1, -32(r1) 112; CHECK-NEXT: std r0, 48(r1) 113; CHECK-NEXT: .cfi_def_cfa_offset 32 114; CHECK-NEXT: .cfi_offset lr, 16 115; CHECK-NEXT: bl llrint 116; CHECK-NEXT: nop 117; CHECK-NEXT: addi r1, r1, 32 118; CHECK-NEXT: ld r0, 16(r1) 119; CHECK-NEXT: mtlr r0 120; CHECK-NEXT: blr 121; 122; FAST-LABEL: test_llrint: 123; FAST: # %bb.0: # %entry 124; FAST-NEXT: fctid f0, f1 125; FAST-NEXT: mffprd r3, f0 126; FAST-NEXT: blr 127entry: 128 %0 = tail call i64 @llvm.llrint.i64.f64(double %d) 129 ret i64 %0 130} 131 132declare i64 @llvm.llrint.i64.f64(double) 133 134define dso_local i64 @test_llrintf(float %f) local_unnamed_addr { 135; BE-LABEL: test_llrintf: 136; BE: # %bb.0: # %entry 137; BE-NEXT: mflr r0 138; BE-NEXT: stdu r1, -112(r1) 139; BE-NEXT: std r0, 128(r1) 140; BE-NEXT: .cfi_def_cfa_offset 112 141; BE-NEXT: .cfi_offset lr, 16 142; BE-NEXT: bl llrintf 143; BE-NEXT: nop 144; BE-NEXT: addi r1, r1, 112 145; BE-NEXT: ld r0, 16(r1) 146; BE-NEXT: mtlr r0 147; BE-NEXT: blr 148; 149; CHECK-LABEL: test_llrintf: 150; CHECK: # %bb.0: # %entry 151; CHECK-NEXT: mflr r0 152; CHECK-NEXT: stdu r1, -32(r1) 153; CHECK-NEXT: std r0, 48(r1) 154; CHECK-NEXT: .cfi_def_cfa_offset 32 155; CHECK-NEXT: .cfi_offset lr, 16 156; CHECK-NEXT: bl llrintf 157; CHECK-NEXT: nop 158; CHECK-NEXT: addi r1, r1, 32 159; CHECK-NEXT: ld r0, 16(r1) 160; CHECK-NEXT: mtlr r0 161; CHECK-NEXT: blr 162; 163; FAST-LABEL: test_llrintf: 164; FAST: # %bb.0: # %entry 165; FAST-NEXT: fctid f0, f1 166; FAST-NEXT: mffprd r3, f0 167; FAST-NEXT: blr 168entry: 169 %0 = tail call i64 @llvm.llrint.i64.f32(float %f) 170 ret i64 %0 171} 172 173declare i64 @llvm.llrint.i64.f32(float) 174 175define dso_local i64 @test_lround(double %d) local_unnamed_addr { 176; BE-LABEL: test_lround: 177; BE: # %bb.0: # %entry 178; BE-NEXT: mflr r0 179; BE-NEXT: stdu r1, -112(r1) 180; BE-NEXT: std r0, 128(r1) 181; BE-NEXT: .cfi_def_cfa_offset 112 182; BE-NEXT: .cfi_offset lr, 16 183; BE-NEXT: bl lround 184; BE-NEXT: nop 185; BE-NEXT: addi r1, r1, 112 186; BE-NEXT: ld r0, 16(r1) 187; BE-NEXT: mtlr r0 188; BE-NEXT: blr 189; 190; CHECK-LABEL: test_lround: 191; CHECK: # %bb.0: # %entry 192; CHECK-NEXT: mflr r0 193; CHECK-NEXT: stdu r1, -32(r1) 194; CHECK-NEXT: std r0, 48(r1) 195; CHECK-NEXT: .cfi_def_cfa_offset 32 196; CHECK-NEXT: .cfi_offset lr, 16 197; CHECK-NEXT: bl lround 198; CHECK-NEXT: nop 199; CHECK-NEXT: addi r1, r1, 32 200; CHECK-NEXT: ld r0, 16(r1) 201; CHECK-NEXT: mtlr r0 202; CHECK-NEXT: blr 203; 204; FAST-LABEL: test_lround: 205; FAST: # %bb.0: # %entry 206; FAST-NEXT: xsrdpi f0, f1 207; FAST-NEXT: fctid f0, f0 208; FAST-NEXT: mffprd r3, f0 209; FAST-NEXT: blr 210entry: 211 %0 = tail call i64 @llvm.lround.i64.f64(double %d) 212 ret i64 %0 213} 214 215declare i64 @llvm.lround.i64.f64(double) 216 217define dso_local i32 @test_lroundi32f64(double %d) local_unnamed_addr { 218; BE-LABEL: test_lroundi32f64: 219; BE: # %bb.0: # %entry 220; BE-NEXT: mflr r0 221; BE-NEXT: stdu r1, -112(r1) 222; BE-NEXT: std r0, 128(r1) 223; BE-NEXT: .cfi_def_cfa_offset 112 224; BE-NEXT: .cfi_offset lr, 16 225; BE-NEXT: bl lround 226; BE-NEXT: nop 227; BE-NEXT: addi r1, r1, 112 228; BE-NEXT: ld r0, 16(r1) 229; BE-NEXT: mtlr r0 230; BE-NEXT: blr 231; 232; CHECK-LABEL: test_lroundi32f64: 233; CHECK: # %bb.0: # %entry 234; CHECK-NEXT: mflr r0 235; CHECK-NEXT: stdu r1, -32(r1) 236; CHECK-NEXT: std r0, 48(r1) 237; CHECK-NEXT: .cfi_def_cfa_offset 32 238; CHECK-NEXT: .cfi_offset lr, 16 239; CHECK-NEXT: bl lround 240; CHECK-NEXT: nop 241; CHECK-NEXT: addi r1, r1, 32 242; CHECK-NEXT: ld r0, 16(r1) 243; CHECK-NEXT: mtlr r0 244; CHECK-NEXT: blr 245; 246; FAST-LABEL: test_lroundi32f64: 247; FAST: # %bb.0: # %entry 248; FAST-NEXT: xsrdpi f0, f1 249; FAST-NEXT: fctiw f0, f0 250; FAST-NEXT: mffprwz r3, f0 251; FAST-NEXT: blr 252entry: 253 %0 = tail call i32 @llvm.lround.i32.f64(double %d) 254 ret i32 %0 255} 256 257declare i32 @llvm.lround.i32.f64(double) 258 259define dso_local i64 @test_lroundf(float %f) local_unnamed_addr { 260; BE-LABEL: test_lroundf: 261; BE: # %bb.0: # %entry 262; BE-NEXT: mflr r0 263; BE-NEXT: stdu r1, -112(r1) 264; BE-NEXT: std r0, 128(r1) 265; BE-NEXT: .cfi_def_cfa_offset 112 266; BE-NEXT: .cfi_offset lr, 16 267; BE-NEXT: bl lroundf 268; BE-NEXT: nop 269; BE-NEXT: addi r1, r1, 112 270; BE-NEXT: ld r0, 16(r1) 271; BE-NEXT: mtlr r0 272; BE-NEXT: blr 273; 274; CHECK-LABEL: test_lroundf: 275; CHECK: # %bb.0: # %entry 276; CHECK-NEXT: mflr r0 277; CHECK-NEXT: stdu r1, -32(r1) 278; CHECK-NEXT: std r0, 48(r1) 279; CHECK-NEXT: .cfi_def_cfa_offset 32 280; CHECK-NEXT: .cfi_offset lr, 16 281; CHECK-NEXT: bl lroundf 282; CHECK-NEXT: nop 283; CHECK-NEXT: addi r1, r1, 32 284; CHECK-NEXT: ld r0, 16(r1) 285; CHECK-NEXT: mtlr r0 286; CHECK-NEXT: blr 287; 288; FAST-LABEL: test_lroundf: 289; FAST: # %bb.0: # %entry 290; FAST-NEXT: xsrdpi f0, f1 291; FAST-NEXT: fctid f0, f0 292; FAST-NEXT: mffprd r3, f0 293; FAST-NEXT: blr 294entry: 295 %0 = tail call i64 @llvm.lround.i64.f32(float %f) 296 ret i64 %0 297} 298 299declare i64 @llvm.lround.i64.f32(float) 300 301define dso_local i32 @test_lroundi32f32(float %d) local_unnamed_addr { 302; BE-LABEL: test_lroundi32f32: 303; BE: # %bb.0: # %entry 304; BE-NEXT: mflr r0 305; BE-NEXT: stdu r1, -112(r1) 306; BE-NEXT: std r0, 128(r1) 307; BE-NEXT: .cfi_def_cfa_offset 112 308; BE-NEXT: .cfi_offset lr, 16 309; BE-NEXT: bl lroundf 310; BE-NEXT: nop 311; BE-NEXT: addi r1, r1, 112 312; BE-NEXT: ld r0, 16(r1) 313; BE-NEXT: mtlr r0 314; BE-NEXT: blr 315; 316; CHECK-LABEL: test_lroundi32f32: 317; CHECK: # %bb.0: # %entry 318; CHECK-NEXT: mflr r0 319; CHECK-NEXT: stdu r1, -32(r1) 320; CHECK-NEXT: std r0, 48(r1) 321; CHECK-NEXT: .cfi_def_cfa_offset 32 322; CHECK-NEXT: .cfi_offset lr, 16 323; CHECK-NEXT: bl lroundf 324; CHECK-NEXT: nop 325; CHECK-NEXT: addi r1, r1, 32 326; CHECK-NEXT: ld r0, 16(r1) 327; CHECK-NEXT: mtlr r0 328; CHECK-NEXT: blr 329; 330; FAST-LABEL: test_lroundi32f32: 331; FAST: # %bb.0: # %entry 332; FAST-NEXT: xsrdpi f0, f1 333; FAST-NEXT: fctiw f0, f0 334; FAST-NEXT: mffprwz r3, f0 335; FAST-NEXT: blr 336entry: 337 %0 = tail call i32 @llvm.lround.i32.f32(float %d) 338 ret i32 %0 339} 340 341declare i32 @llvm.lround.i32.f32(float) 342 343define dso_local i64 @test_llround(double %d) local_unnamed_addr { 344; BE-LABEL: test_llround: 345; BE: # %bb.0: # %entry 346; BE-NEXT: mflr r0 347; BE-NEXT: stdu r1, -112(r1) 348; BE-NEXT: std r0, 128(r1) 349; BE-NEXT: .cfi_def_cfa_offset 112 350; BE-NEXT: .cfi_offset lr, 16 351; BE-NEXT: bl llround 352; BE-NEXT: nop 353; BE-NEXT: addi r1, r1, 112 354; BE-NEXT: ld r0, 16(r1) 355; BE-NEXT: mtlr r0 356; BE-NEXT: blr 357; 358; CHECK-LABEL: test_llround: 359; CHECK: # %bb.0: # %entry 360; CHECK-NEXT: mflr r0 361; CHECK-NEXT: stdu r1, -32(r1) 362; CHECK-NEXT: std r0, 48(r1) 363; CHECK-NEXT: .cfi_def_cfa_offset 32 364; CHECK-NEXT: .cfi_offset lr, 16 365; CHECK-NEXT: bl llround 366; CHECK-NEXT: nop 367; CHECK-NEXT: addi r1, r1, 32 368; CHECK-NEXT: ld r0, 16(r1) 369; CHECK-NEXT: mtlr r0 370; CHECK-NEXT: blr 371; 372; FAST-LABEL: test_llround: 373; FAST: # %bb.0: # %entry 374; FAST-NEXT: xsrdpi f0, f1 375; FAST-NEXT: fctid f0, f0 376; FAST-NEXT: mffprd r3, f0 377; FAST-NEXT: blr 378entry: 379 %0 = tail call i64 @llvm.llround.i64.f64(double %d) 380 ret i64 %0 381} 382 383declare i64 @llvm.llround.i64.f64(double) 384 385define dso_local i64 @test_llroundf(float %f) local_unnamed_addr { 386; BE-LABEL: test_llroundf: 387; BE: # %bb.0: # %entry 388; BE-NEXT: mflr r0 389; BE-NEXT: stdu r1, -112(r1) 390; BE-NEXT: std r0, 128(r1) 391; BE-NEXT: .cfi_def_cfa_offset 112 392; BE-NEXT: .cfi_offset lr, 16 393; BE-NEXT: bl llroundf 394; BE-NEXT: nop 395; BE-NEXT: addi r1, r1, 112 396; BE-NEXT: ld r0, 16(r1) 397; BE-NEXT: mtlr r0 398; BE-NEXT: blr 399; 400; CHECK-LABEL: test_llroundf: 401; CHECK: # %bb.0: # %entry 402; CHECK-NEXT: mflr r0 403; CHECK-NEXT: stdu r1, -32(r1) 404; CHECK-NEXT: std r0, 48(r1) 405; CHECK-NEXT: .cfi_def_cfa_offset 32 406; CHECK-NEXT: .cfi_offset lr, 16 407; CHECK-NEXT: bl llroundf 408; CHECK-NEXT: nop 409; CHECK-NEXT: addi r1, r1, 32 410; CHECK-NEXT: ld r0, 16(r1) 411; CHECK-NEXT: mtlr r0 412; CHECK-NEXT: blr 413; 414; FAST-LABEL: test_llroundf: 415; FAST: # %bb.0: # %entry 416; FAST-NEXT: xsrdpi f0, f1 417; FAST-NEXT: fctid f0, f0 418; FAST-NEXT: mffprd r3, f0 419; FAST-NEXT: blr 420entry: 421 %0 = tail call i64 @llvm.llround.i64.f32(float %f) 422 ret i64 %0 423} 424 425declare i64 @llvm.llround.i64.f32(float) 426 427define dso_local double @test_nearbyint(double %d) local_unnamed_addr { 428; BE-LABEL: test_nearbyint: 429; BE: # %bb.0: # %entry 430; BE-NEXT: mflr r0 431; BE-NEXT: stdu r1, -112(r1) 432; BE-NEXT: std r0, 128(r1) 433; BE-NEXT: .cfi_def_cfa_offset 112 434; BE-NEXT: .cfi_offset lr, 16 435; BE-NEXT: bl nearbyint 436; BE-NEXT: nop 437; BE-NEXT: addi r1, r1, 112 438; BE-NEXT: ld r0, 16(r1) 439; BE-NEXT: mtlr r0 440; BE-NEXT: blr 441; 442; CHECK-LABEL: test_nearbyint: 443; CHECK: # %bb.0: # %entry 444; CHECK-NEXT: mflr r0 445; CHECK-NEXT: stdu r1, -32(r1) 446; CHECK-NEXT: std r0, 48(r1) 447; CHECK-NEXT: .cfi_def_cfa_offset 32 448; CHECK-NEXT: .cfi_offset lr, 16 449; CHECK-NEXT: bl nearbyint 450; CHECK-NEXT: nop 451; CHECK-NEXT: addi r1, r1, 32 452; CHECK-NEXT: ld r0, 16(r1) 453; CHECK-NEXT: mtlr r0 454; CHECK-NEXT: blr 455; 456; FAST-LABEL: test_nearbyint: 457; FAST: # %bb.0: # %entry 458; FAST-NEXT: xsrdpic f1, f1 459; FAST-NEXT: blr 460entry: 461 %0 = tail call double @llvm.nearbyint.f64(double %d) 462 ret double %0 463} 464 465declare double @llvm.nearbyint.f64(double) 466 467define dso_local float @test_nearbyintf(float %f) local_unnamed_addr { 468; BE-LABEL: test_nearbyintf: 469; BE: # %bb.0: # %entry 470; BE-NEXT: mflr r0 471; BE-NEXT: stdu r1, -112(r1) 472; BE-NEXT: std r0, 128(r1) 473; BE-NEXT: .cfi_def_cfa_offset 112 474; BE-NEXT: .cfi_offset lr, 16 475; BE-NEXT: bl nearbyintf 476; BE-NEXT: nop 477; BE-NEXT: addi r1, r1, 112 478; BE-NEXT: ld r0, 16(r1) 479; BE-NEXT: mtlr r0 480; BE-NEXT: blr 481; 482; CHECK-LABEL: test_nearbyintf: 483; CHECK: # %bb.0: # %entry 484; CHECK-NEXT: mflr r0 485; CHECK-NEXT: stdu r1, -32(r1) 486; CHECK-NEXT: std r0, 48(r1) 487; CHECK-NEXT: .cfi_def_cfa_offset 32 488; CHECK-NEXT: .cfi_offset lr, 16 489; CHECK-NEXT: bl nearbyintf 490; CHECK-NEXT: nop 491; CHECK-NEXT: addi r1, r1, 32 492; CHECK-NEXT: ld r0, 16(r1) 493; CHECK-NEXT: mtlr r0 494; CHECK-NEXT: blr 495; 496; FAST-LABEL: test_nearbyintf: 497; FAST: # %bb.0: # %entry 498; FAST-NEXT: xsrdpic f1, f1 499; FAST-NEXT: blr 500entry: 501 %0 = tail call float @llvm.nearbyint.f32(float %f) 502 ret float %0 503} 504 505declare float @llvm.nearbyint.f32(float) 506 507define dso_local double @test_round(double %d) local_unnamed_addr { 508; BE-LABEL: test_round: 509; BE: # %bb.0: # %entry 510; BE-NEXT: xsrdpi f1, f1 511; BE-NEXT: blr 512; 513; CHECK-LABEL: test_round: 514; CHECK: # %bb.0: # %entry 515; CHECK-NEXT: xsrdpi f1, f1 516; CHECK-NEXT: blr 517; 518; FAST-LABEL: test_round: 519; FAST: # %bb.0: # %entry 520; FAST-NEXT: xsrdpi f1, f1 521; FAST-NEXT: blr 522entry: 523 %0 = tail call double @llvm.round.f64(double %d) 524 ret double %0 525} 526 527declare double @llvm.round.f64(double) 528 529define dso_local float @test_roundf(float %f) local_unnamed_addr { 530; BE-LABEL: test_roundf: 531; BE: # %bb.0: # %entry 532; BE-NEXT: xsrdpi f1, f1 533; BE-NEXT: blr 534; 535; CHECK-LABEL: test_roundf: 536; CHECK: # %bb.0: # %entry 537; CHECK-NEXT: xsrdpi f1, f1 538; CHECK-NEXT: blr 539; 540; FAST-LABEL: test_roundf: 541; FAST: # %bb.0: # %entry 542; FAST-NEXT: xsrdpi f1, f1 543; FAST-NEXT: blr 544entry: 545 %0 = tail call float @llvm.round.f32(float %f) 546 ret float %0 547} 548 549declare float @llvm.round.f32(float) 550 551define dso_local double @test_trunc(double %d) local_unnamed_addr { 552; BE-LABEL: test_trunc: 553; BE: # %bb.0: # %entry 554; BE-NEXT: xsrdpiz f1, f1 555; BE-NEXT: blr 556; 557; CHECK-LABEL: test_trunc: 558; CHECK: # %bb.0: # %entry 559; CHECK-NEXT: xsrdpiz f1, f1 560; CHECK-NEXT: blr 561; 562; FAST-LABEL: test_trunc: 563; FAST: # %bb.0: # %entry 564; FAST-NEXT: xsrdpiz f1, f1 565; FAST-NEXT: blr 566entry: 567 %0 = tail call double @llvm.trunc.f64(double %d) 568 ret double %0 569} 570 571declare double @llvm.trunc.f64(double) 572 573define dso_local float @test_truncf(float %f) local_unnamed_addr { 574; BE-LABEL: test_truncf: 575; BE: # %bb.0: # %entry 576; BE-NEXT: xsrdpiz f1, f1 577; BE-NEXT: blr 578; 579; CHECK-LABEL: test_truncf: 580; CHECK: # %bb.0: # %entry 581; CHECK-NEXT: xsrdpiz f1, f1 582; CHECK-NEXT: blr 583; 584; FAST-LABEL: test_truncf: 585; FAST: # %bb.0: # %entry 586; FAST-NEXT: xsrdpiz f1, f1 587; FAST-NEXT: blr 588entry: 589 %0 = tail call float @llvm.trunc.f32(float %f) 590 ret float %0 591} 592 593declare float @llvm.trunc.f32(float) 594 595define dso_local double @test_floor(double %d) local_unnamed_addr { 596; BE-LABEL: test_floor: 597; BE: # %bb.0: # %entry 598; BE-NEXT: xsrdpim f1, f1 599; BE-NEXT: blr 600; 601; CHECK-LABEL: test_floor: 602; CHECK: # %bb.0: # %entry 603; CHECK-NEXT: xsrdpim f1, f1 604; CHECK-NEXT: blr 605; 606; FAST-LABEL: test_floor: 607; FAST: # %bb.0: # %entry 608; FAST-NEXT: xsrdpim f1, f1 609; FAST-NEXT: blr 610entry: 611 %0 = tail call double @llvm.floor.f64(double %d) 612 ret double %0 613} 614 615declare double @llvm.floor.f64(double) 616 617define dso_local float @test_floorf(float %f) local_unnamed_addr { 618; BE-LABEL: test_floorf: 619; BE: # %bb.0: # %entry 620; BE-NEXT: xsrdpim f1, f1 621; BE-NEXT: blr 622; 623; CHECK-LABEL: test_floorf: 624; CHECK: # %bb.0: # %entry 625; CHECK-NEXT: xsrdpim f1, f1 626; CHECK-NEXT: blr 627; 628; FAST-LABEL: test_floorf: 629; FAST: # %bb.0: # %entry 630; FAST-NEXT: xsrdpim f1, f1 631; FAST-NEXT: blr 632entry: 633 %0 = tail call float @llvm.floor.f32(float %f) 634 ret float %0 635} 636 637declare float @llvm.floor.f32(float) 638 639define dso_local double @test_ceil(double %d) local_unnamed_addr { 640; BE-LABEL: test_ceil: 641; BE: # %bb.0: # %entry 642; BE-NEXT: xsrdpip f1, f1 643; BE-NEXT: blr 644; 645; CHECK-LABEL: test_ceil: 646; CHECK: # %bb.0: # %entry 647; CHECK-NEXT: xsrdpip f1, f1 648; CHECK-NEXT: blr 649; 650; FAST-LABEL: test_ceil: 651; FAST: # %bb.0: # %entry 652; FAST-NEXT: xsrdpip f1, f1 653; FAST-NEXT: blr 654entry: 655 %0 = tail call double @llvm.ceil.f64(double %d) 656 ret double %0 657} 658 659declare double @llvm.ceil.f64(double) 660 661define dso_local float @test_ceilf(float %f) local_unnamed_addr { 662; BE-LABEL: test_ceilf: 663; BE: # %bb.0: # %entry 664; BE-NEXT: xsrdpip f1, f1 665; BE-NEXT: blr 666; 667; CHECK-LABEL: test_ceilf: 668; CHECK: # %bb.0: # %entry 669; CHECK-NEXT: xsrdpip f1, f1 670; CHECK-NEXT: blr 671; 672; FAST-LABEL: test_ceilf: 673; FAST: # %bb.0: # %entry 674; FAST-NEXT: xsrdpip f1, f1 675; FAST-NEXT: blr 676entry: 677 %0 = tail call float @llvm.ceil.f32(float %f) 678 ret float %0 679} 680 681declare float @llvm.ceil.f32(float) 682 683define dso_local double @test_rint(double %d) local_unnamed_addr { 684; BE-LABEL: test_rint: 685; BE: # %bb.0: # %entry 686; BE-NEXT: xsrdpic f1, f1 687; BE-NEXT: blr 688; 689; CHECK-LABEL: test_rint: 690; CHECK: # %bb.0: # %entry 691; CHECK-NEXT: xsrdpic f1, f1 692; CHECK-NEXT: blr 693; 694; FAST-LABEL: test_rint: 695; FAST: # %bb.0: # %entry 696; FAST-NEXT: xsrdpic f1, f1 697; FAST-NEXT: blr 698entry: 699 %0 = tail call double @llvm.rint.f64(double %d) 700 ret double %0 701} 702 703declare double @llvm.rint.f64(double) 704 705define dso_local float @test_rintf(float %f) local_unnamed_addr { 706; BE-LABEL: test_rintf: 707; BE: # %bb.0: # %entry 708; BE-NEXT: xsrdpic f1, f1 709; BE-NEXT: blr 710; 711; CHECK-LABEL: test_rintf: 712; CHECK: # %bb.0: # %entry 713; CHECK-NEXT: xsrdpic f1, f1 714; CHECK-NEXT: blr 715; 716; FAST-LABEL: test_rintf: 717; FAST: # %bb.0: # %entry 718; FAST-NEXT: xsrdpic f1, f1 719; FAST-NEXT: blr 720entry: 721 %0 = tail call float @llvm.rint.f32(float %f) 722 ret float %0 723} 724 725declare float @llvm.rint.f32(float) 726