1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 3; RUN: < %s -mtriple=powerpc64-unknown-linux -mcpu=pwr8 | FileCheck %s\ 4; RUN: -check-prefix=P8 5; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 6; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 | FileCheck %s \ 7; RUN: -check-prefix=P9 8; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 9; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -mattr=-vsx \ 10; RUN: | FileCheck %s -check-prefix=NOVSX 11 12declare i1 @llvm.experimental.constrained.fptosi.i1.f128(fp128, metadata) 13declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata) 14declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata) 15declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata) 16declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata) 17declare i1 @llvm.experimental.constrained.fptoui.i1.f128(fp128, metadata) 18 19declare i1 @llvm.experimental.constrained.fptosi.i1.ppcf128(ppc_fp128, metadata) 20declare i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128, metadata) 21declare i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128, metadata) 22declare i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128, metadata) 23declare i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128, metadata) 24declare i1 @llvm.experimental.constrained.fptoui.i1.ppcf128(ppc_fp128, metadata) 25 26declare i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128, metadata) 27declare i128 @llvm.experimental.constrained.fptoui.i128.ppcf128(ppc_fp128, metadata) 28declare i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128, metadata) 29declare i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128, metadata) 30 31declare fp128 @llvm.experimental.constrained.sitofp.f128.i1(i1, metadata, metadata) 32declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata) 33declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata) 34declare fp128 @llvm.experimental.constrained.uitofp.f128.i1(i1, metadata, metadata) 35declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata) 36declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata) 37 38declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i1(i1, metadata, metadata) 39declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32, metadata, metadata) 40declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64, metadata, metadata) 41declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i1(i1, metadata, metadata) 42declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32, metadata, metadata) 43declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64, metadata, metadata) 44 45define i128 @q_to_i128(fp128 %m) #0 { 46; P8-LABEL: q_to_i128: 47; P8: # %bb.0: # %entry 48; P8-NEXT: mflr r0 49; P8-NEXT: stdu r1, -112(r1) 50; P8-NEXT: std r0, 128(r1) 51; P8-NEXT: .cfi_def_cfa_offset 112 52; P8-NEXT: .cfi_offset lr, 16 53; P8-NEXT: bl __fixkfti 54; P8-NEXT: nop 55; P8-NEXT: addi r1, r1, 112 56; P8-NEXT: ld r0, 16(r1) 57; P8-NEXT: mtlr r0 58; P8-NEXT: blr 59; 60; P9-LABEL: q_to_i128: 61; P9: # %bb.0: # %entry 62; P9-NEXT: mflr r0 63; P9-NEXT: stdu r1, -32(r1) 64; P9-NEXT: std r0, 48(r1) 65; P9-NEXT: .cfi_def_cfa_offset 32 66; P9-NEXT: .cfi_offset lr, 16 67; P9-NEXT: bl __fixkfti 68; P9-NEXT: nop 69; P9-NEXT: addi r1, r1, 32 70; P9-NEXT: ld r0, 16(r1) 71; P9-NEXT: mtlr r0 72; P9-NEXT: blr 73; 74; NOVSX-LABEL: q_to_i128: 75; NOVSX: # %bb.0: # %entry 76; NOVSX-NEXT: mflr r0 77; NOVSX-NEXT: stdu r1, -32(r1) 78; NOVSX-NEXT: std r0, 48(r1) 79; NOVSX-NEXT: .cfi_def_cfa_offset 32 80; NOVSX-NEXT: .cfi_offset lr, 16 81; NOVSX-NEXT: bl __fixkfti 82; NOVSX-NEXT: nop 83; NOVSX-NEXT: addi r1, r1, 32 84; NOVSX-NEXT: ld r0, 16(r1) 85; NOVSX-NEXT: mtlr r0 86; NOVSX-NEXT: blr 87entry: 88 %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128 %m, metadata !"fpexcept.strict") #0 89 ret i128 %conv 90} 91 92define i128 @q_to_u128(fp128 %m) #0 { 93; P8-LABEL: q_to_u128: 94; P8: # %bb.0: # %entry 95; P8-NEXT: mflr r0 96; P8-NEXT: stdu r1, -112(r1) 97; P8-NEXT: std r0, 128(r1) 98; P8-NEXT: .cfi_def_cfa_offset 112 99; P8-NEXT: .cfi_offset lr, 16 100; P8-NEXT: bl __fixunskfti 101; P8-NEXT: nop 102; P8-NEXT: addi r1, r1, 112 103; P8-NEXT: ld r0, 16(r1) 104; P8-NEXT: mtlr r0 105; P8-NEXT: blr 106; 107; P9-LABEL: q_to_u128: 108; P9: # %bb.0: # %entry 109; P9-NEXT: mflr r0 110; P9-NEXT: stdu r1, -32(r1) 111; P9-NEXT: std r0, 48(r1) 112; P9-NEXT: .cfi_def_cfa_offset 32 113; P9-NEXT: .cfi_offset lr, 16 114; P9-NEXT: bl __fixunskfti 115; P9-NEXT: nop 116; P9-NEXT: addi r1, r1, 32 117; P9-NEXT: ld r0, 16(r1) 118; P9-NEXT: mtlr r0 119; P9-NEXT: blr 120; 121; NOVSX-LABEL: q_to_u128: 122; NOVSX: # %bb.0: # %entry 123; NOVSX-NEXT: mflr r0 124; NOVSX-NEXT: stdu r1, -32(r1) 125; NOVSX-NEXT: std r0, 48(r1) 126; NOVSX-NEXT: .cfi_def_cfa_offset 32 127; NOVSX-NEXT: .cfi_offset lr, 16 128; NOVSX-NEXT: bl __fixunskfti 129; NOVSX-NEXT: nop 130; NOVSX-NEXT: addi r1, r1, 32 131; NOVSX-NEXT: ld r0, 16(r1) 132; NOVSX-NEXT: mtlr r0 133; NOVSX-NEXT: blr 134entry: 135 %conv = tail call i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128 %m, metadata !"fpexcept.strict") #0 136 ret i128 %conv 137} 138 139define i1 @q_to_s1(fp128 %m) #0 { 140; P8-LABEL: q_to_s1: 141; P8: # %bb.0: # %entry 142; P8-NEXT: mflr r0 143; P8-NEXT: stdu r1, -112(r1) 144; P8-NEXT: std r0, 128(r1) 145; P8-NEXT: .cfi_def_cfa_offset 112 146; P8-NEXT: .cfi_offset lr, 16 147; P8-NEXT: bl __fixkfsi 148; P8-NEXT: nop 149; P8-NEXT: addi r1, r1, 112 150; P8-NEXT: ld r0, 16(r1) 151; P8-NEXT: mtlr r0 152; P8-NEXT: blr 153; 154; P9-LABEL: q_to_s1: 155; P9: # %bb.0: # %entry 156; P9-NEXT: xscvqpswz v2, v2 157; P9-NEXT: mfvsrwz r3, v2 158; P9-NEXT: blr 159; 160; NOVSX-LABEL: q_to_s1: 161; NOVSX: # %bb.0: # %entry 162; NOVSX-NEXT: mflr r0 163; NOVSX-NEXT: stdu r1, -32(r1) 164; NOVSX-NEXT: std r0, 48(r1) 165; NOVSX-NEXT: .cfi_def_cfa_offset 32 166; NOVSX-NEXT: .cfi_offset lr, 16 167; NOVSX-NEXT: bl __fixkfsi 168; NOVSX-NEXT: nop 169; NOVSX-NEXT: addi r1, r1, 32 170; NOVSX-NEXT: ld r0, 16(r1) 171; NOVSX-NEXT: mtlr r0 172; NOVSX-NEXT: blr 173entry: 174 %conv = tail call i1 @llvm.experimental.constrained.fptosi.i1.f128(fp128 %m, metadata !"fpexcept.strict") #0 175 ret i1 %conv 176} 177 178define i1 @q_to_u1(fp128 %m) #0 { 179; P8-LABEL: q_to_u1: 180; P8: # %bb.0: # %entry 181; P8-NEXT: mflr r0 182; P8-NEXT: stdu r1, -112(r1) 183; P8-NEXT: std r0, 128(r1) 184; P8-NEXT: .cfi_def_cfa_offset 112 185; P8-NEXT: .cfi_offset lr, 16 186; P8-NEXT: bl __fixkfsi 187; P8-NEXT: nop 188; P8-NEXT: addi r1, r1, 112 189; P8-NEXT: ld r0, 16(r1) 190; P8-NEXT: mtlr r0 191; P8-NEXT: blr 192; 193; P9-LABEL: q_to_u1: 194; P9: # %bb.0: # %entry 195; P9-NEXT: xscvqpswz v2, v2 196; P9-NEXT: mfvsrwz r3, v2 197; P9-NEXT: blr 198; 199; NOVSX-LABEL: q_to_u1: 200; NOVSX: # %bb.0: # %entry 201; NOVSX-NEXT: mflr r0 202; NOVSX-NEXT: stdu r1, -32(r1) 203; NOVSX-NEXT: std r0, 48(r1) 204; NOVSX-NEXT: .cfi_def_cfa_offset 32 205; NOVSX-NEXT: .cfi_offset lr, 16 206; NOVSX-NEXT: bl __fixunskfsi 207; NOVSX-NEXT: nop 208; NOVSX-NEXT: addi r1, r1, 32 209; NOVSX-NEXT: ld r0, 16(r1) 210; NOVSX-NEXT: mtlr r0 211; NOVSX-NEXT: blr 212entry: 213 %conv = tail call i1 @llvm.experimental.constrained.fptoui.i1.f128(fp128 %m, metadata !"fpexcept.strict") #0 214 ret i1 %conv 215} 216 217define i128 @ppcq_to_i128(ppc_fp128 %m) #0 { 218; P8-LABEL: ppcq_to_i128: 219; P8: # %bb.0: # %entry 220; P8-NEXT: mflr r0 221; P8-NEXT: stdu r1, -112(r1) 222; P8-NEXT: std r0, 128(r1) 223; P8-NEXT: .cfi_def_cfa_offset 112 224; P8-NEXT: .cfi_offset lr, 16 225; P8-NEXT: bl __fixtfti 226; P8-NEXT: nop 227; P8-NEXT: addi r1, r1, 112 228; P8-NEXT: ld r0, 16(r1) 229; P8-NEXT: mtlr r0 230; P8-NEXT: blr 231; 232; P9-LABEL: ppcq_to_i128: 233; P9: # %bb.0: # %entry 234; P9-NEXT: mflr r0 235; P9-NEXT: stdu r1, -32(r1) 236; P9-NEXT: std r0, 48(r1) 237; P9-NEXT: .cfi_def_cfa_offset 32 238; P9-NEXT: .cfi_offset lr, 16 239; P9-NEXT: bl __fixtfti 240; P9-NEXT: nop 241; P9-NEXT: addi r1, r1, 32 242; P9-NEXT: ld r0, 16(r1) 243; P9-NEXT: mtlr r0 244; P9-NEXT: blr 245; 246; NOVSX-LABEL: ppcq_to_i128: 247; NOVSX: # %bb.0: # %entry 248; NOVSX-NEXT: mflr r0 249; NOVSX-NEXT: stdu r1, -32(r1) 250; NOVSX-NEXT: std r0, 48(r1) 251; NOVSX-NEXT: .cfi_def_cfa_offset 32 252; NOVSX-NEXT: .cfi_offset lr, 16 253; NOVSX-NEXT: bl __fixtfti 254; NOVSX-NEXT: nop 255; NOVSX-NEXT: addi r1, r1, 32 256; NOVSX-NEXT: ld r0, 16(r1) 257; NOVSX-NEXT: mtlr r0 258; NOVSX-NEXT: blr 259entry: 260 %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 261 ret i128 %conv 262} 263 264define i128 @ppcq_to_u128(ppc_fp128 %m) #0 { 265; P8-LABEL: ppcq_to_u128: 266; P8: # %bb.0: # %entry 267; P8-NEXT: mflr r0 268; P8-NEXT: stdu r1, -112(r1) 269; P8-NEXT: std r0, 128(r1) 270; P8-NEXT: .cfi_def_cfa_offset 112 271; P8-NEXT: .cfi_offset lr, 16 272; P8-NEXT: bl __fixtfti 273; P8-NEXT: nop 274; P8-NEXT: addi r1, r1, 112 275; P8-NEXT: ld r0, 16(r1) 276; P8-NEXT: mtlr r0 277; P8-NEXT: blr 278; 279; P9-LABEL: ppcq_to_u128: 280; P9: # %bb.0: # %entry 281; P9-NEXT: mflr r0 282; P9-NEXT: stdu r1, -32(r1) 283; P9-NEXT: std r0, 48(r1) 284; P9-NEXT: .cfi_def_cfa_offset 32 285; P9-NEXT: .cfi_offset lr, 16 286; P9-NEXT: bl __fixtfti 287; P9-NEXT: nop 288; P9-NEXT: addi r1, r1, 32 289; P9-NEXT: ld r0, 16(r1) 290; P9-NEXT: mtlr r0 291; P9-NEXT: blr 292; 293; NOVSX-LABEL: ppcq_to_u128: 294; NOVSX: # %bb.0: # %entry 295; NOVSX-NEXT: mflr r0 296; NOVSX-NEXT: stdu r1, -32(r1) 297; NOVSX-NEXT: std r0, 48(r1) 298; NOVSX-NEXT: .cfi_def_cfa_offset 32 299; NOVSX-NEXT: .cfi_offset lr, 16 300; NOVSX-NEXT: bl __fixtfti 301; NOVSX-NEXT: nop 302; NOVSX-NEXT: addi r1, r1, 32 303; NOVSX-NEXT: ld r0, 16(r1) 304; NOVSX-NEXT: mtlr r0 305; NOVSX-NEXT: blr 306entry: 307 %conv = tail call i128 @llvm.experimental.constrained.fptosi.i128.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 308 ret i128 %conv 309} 310 311define signext i32 @q_to_i32(fp128 %m) #0 { 312; P8-LABEL: q_to_i32: 313; P8: # %bb.0: # %entry 314; P8-NEXT: mflr r0 315; P8-NEXT: stdu r1, -112(r1) 316; P8-NEXT: std r0, 128(r1) 317; P8-NEXT: .cfi_def_cfa_offset 112 318; P8-NEXT: .cfi_offset lr, 16 319; P8-NEXT: bl __fixkfsi 320; P8-NEXT: nop 321; P8-NEXT: extsw r3, r3 322; P8-NEXT: addi r1, r1, 112 323; P8-NEXT: ld r0, 16(r1) 324; P8-NEXT: mtlr r0 325; P8-NEXT: blr 326; 327; P9-LABEL: q_to_i32: 328; P9: # %bb.0: # %entry 329; P9-NEXT: xscvqpswz v2, v2 330; P9-NEXT: mfvsrwz r3, v2 331; P9-NEXT: extsw r3, r3 332; P9-NEXT: blr 333; 334; NOVSX-LABEL: q_to_i32: 335; NOVSX: # %bb.0: # %entry 336; NOVSX-NEXT: mflr r0 337; NOVSX-NEXT: stdu r1, -32(r1) 338; NOVSX-NEXT: std r0, 48(r1) 339; NOVSX-NEXT: .cfi_def_cfa_offset 32 340; NOVSX-NEXT: .cfi_offset lr, 16 341; NOVSX-NEXT: bl __fixkfsi 342; NOVSX-NEXT: nop 343; NOVSX-NEXT: extsw r3, r3 344; NOVSX-NEXT: addi r1, r1, 32 345; NOVSX-NEXT: ld r0, 16(r1) 346; NOVSX-NEXT: mtlr r0 347; NOVSX-NEXT: blr 348entry: 349 %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %m, metadata !"fpexcept.strict") #0 350 ret i32 %conv 351} 352 353define i64 @q_to_i64(fp128 %m) #0 { 354; P8-LABEL: q_to_i64: 355; P8: # %bb.0: # %entry 356; P8-NEXT: mflr r0 357; P8-NEXT: stdu r1, -112(r1) 358; P8-NEXT: std r0, 128(r1) 359; P8-NEXT: .cfi_def_cfa_offset 112 360; P8-NEXT: .cfi_offset lr, 16 361; P8-NEXT: bl __fixkfdi 362; P8-NEXT: nop 363; P8-NEXT: addi r1, r1, 112 364; P8-NEXT: ld r0, 16(r1) 365; P8-NEXT: mtlr r0 366; P8-NEXT: blr 367; 368; P9-LABEL: q_to_i64: 369; P9: # %bb.0: # %entry 370; P9-NEXT: xscvqpsdz v2, v2 371; P9-NEXT: mfvsrd r3, v2 372; P9-NEXT: blr 373; 374; NOVSX-LABEL: q_to_i64: 375; NOVSX: # %bb.0: # %entry 376; NOVSX-NEXT: mflr r0 377; NOVSX-NEXT: stdu r1, -32(r1) 378; NOVSX-NEXT: std r0, 48(r1) 379; NOVSX-NEXT: .cfi_def_cfa_offset 32 380; NOVSX-NEXT: .cfi_offset lr, 16 381; NOVSX-NEXT: bl __fixkfdi 382; NOVSX-NEXT: nop 383; NOVSX-NEXT: addi r1, r1, 32 384; NOVSX-NEXT: ld r0, 16(r1) 385; NOVSX-NEXT: mtlr r0 386; NOVSX-NEXT: blr 387entry: 388 %conv = tail call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %m, metadata !"fpexcept.strict") #0 389 ret i64 %conv 390} 391 392define i64 @q_to_u64(fp128 %m) #0 { 393; P8-LABEL: q_to_u64: 394; P8: # %bb.0: # %entry 395; P8-NEXT: mflr r0 396; P8-NEXT: stdu r1, -112(r1) 397; P8-NEXT: std r0, 128(r1) 398; P8-NEXT: .cfi_def_cfa_offset 112 399; P8-NEXT: .cfi_offset lr, 16 400; P8-NEXT: bl __fixunskfdi 401; P8-NEXT: nop 402; P8-NEXT: addi r1, r1, 112 403; P8-NEXT: ld r0, 16(r1) 404; P8-NEXT: mtlr r0 405; P8-NEXT: blr 406; 407; P9-LABEL: q_to_u64: 408; P9: # %bb.0: # %entry 409; P9-NEXT: xscvqpudz v2, v2 410; P9-NEXT: mfvsrd r3, v2 411; P9-NEXT: blr 412; 413; NOVSX-LABEL: q_to_u64: 414; NOVSX: # %bb.0: # %entry 415; NOVSX-NEXT: mflr r0 416; NOVSX-NEXT: stdu r1, -32(r1) 417; NOVSX-NEXT: std r0, 48(r1) 418; NOVSX-NEXT: .cfi_def_cfa_offset 32 419; NOVSX-NEXT: .cfi_offset lr, 16 420; NOVSX-NEXT: bl __fixunskfdi 421; NOVSX-NEXT: nop 422; NOVSX-NEXT: addi r1, r1, 32 423; NOVSX-NEXT: ld r0, 16(r1) 424; NOVSX-NEXT: mtlr r0 425; NOVSX-NEXT: blr 426entry: 427 %conv = tail call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %m, metadata !"fpexcept.strict") #0 428 ret i64 %conv 429} 430 431define zeroext i32 @q_to_u32(fp128 %m) #0 { 432; P8-LABEL: q_to_u32: 433; P8: # %bb.0: # %entry 434; P8-NEXT: mflr r0 435; P8-NEXT: stdu r1, -112(r1) 436; P8-NEXT: std r0, 128(r1) 437; P8-NEXT: .cfi_def_cfa_offset 112 438; P8-NEXT: .cfi_offset lr, 16 439; P8-NEXT: bl __fixunskfsi 440; P8-NEXT: nop 441; P8-NEXT: addi r1, r1, 112 442; P8-NEXT: ld r0, 16(r1) 443; P8-NEXT: mtlr r0 444; P8-NEXT: blr 445; 446; P9-LABEL: q_to_u32: 447; P9: # %bb.0: # %entry 448; P9-NEXT: xscvqpuwz v2, v2 449; P9-NEXT: mfvsrwz r3, v2 450; P9-NEXT: blr 451; 452; NOVSX-LABEL: q_to_u32: 453; NOVSX: # %bb.0: # %entry 454; NOVSX-NEXT: mflr r0 455; NOVSX-NEXT: stdu r1, -32(r1) 456; NOVSX-NEXT: std r0, 48(r1) 457; NOVSX-NEXT: .cfi_def_cfa_offset 32 458; NOVSX-NEXT: .cfi_offset lr, 16 459; NOVSX-NEXT: bl __fixunskfsi 460; NOVSX-NEXT: nop 461; NOVSX-NEXT: addi r1, r1, 32 462; NOVSX-NEXT: ld r0, 16(r1) 463; NOVSX-NEXT: mtlr r0 464; NOVSX-NEXT: blr 465entry: 466 %conv = tail call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %m, metadata !"fpexcept.strict") #0 467 ret i32 %conv 468} 469 470define signext i32 @ppcq_to_i32(ppc_fp128 %m) #0 { 471; P8-LABEL: ppcq_to_i32: 472; P8: # %bb.0: # %entry 473; P8-NEXT: mffs f0 474; P8-NEXT: mtfsb1 31 475; P8-NEXT: mtfsb0 30 476; P8-NEXT: fadd f1, f2, f1 477; P8-NEXT: mtfsf 1, f0 478; P8-NEXT: xscvdpsxws f0, f1 479; P8-NEXT: mffprwz r3, f0 480; P8-NEXT: extsw r3, r3 481; P8-NEXT: blr 482; 483; P9-LABEL: ppcq_to_i32: 484; P9: # %bb.0: # %entry 485; P9-NEXT: mffs f0 486; P9-NEXT: mtfsb1 31 487; P9-NEXT: mtfsb0 30 488; P9-NEXT: fadd f1, f2, f1 489; P9-NEXT: mtfsf 1, f0 490; P9-NEXT: xscvdpsxws f0, f1 491; P9-NEXT: mffprwz r3, f0 492; P9-NEXT: extsw r3, r3 493; P9-NEXT: blr 494; 495; NOVSX-LABEL: ppcq_to_i32: 496; NOVSX: # %bb.0: # %entry 497; NOVSX-NEXT: mffs f0 498; NOVSX-NEXT: mtfsb1 31 499; NOVSX-NEXT: mtfsb0 30 500; NOVSX-NEXT: addi r3, r1, -4 501; NOVSX-NEXT: fadd f1, f2, f1 502; NOVSX-NEXT: mtfsf 1, f0 503; NOVSX-NEXT: fctiwz f0, f1 504; NOVSX-NEXT: stfiwx f0, 0, r3 505; NOVSX-NEXT: lwa r3, -4(r1) 506; NOVSX-NEXT: blr 507entry: 508 %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 509 ret i32 %conv 510} 511 512define i64 @ppcq_to_i64(ppc_fp128 %m) #0 { 513; P8-LABEL: ppcq_to_i64: 514; P8: # %bb.0: # %entry 515; P8-NEXT: mflr r0 516; P8-NEXT: stdu r1, -112(r1) 517; P8-NEXT: std r0, 128(r1) 518; P8-NEXT: .cfi_def_cfa_offset 112 519; P8-NEXT: .cfi_offset lr, 16 520; P8-NEXT: bl __fixtfdi 521; P8-NEXT: nop 522; P8-NEXT: addi r1, r1, 112 523; P8-NEXT: ld r0, 16(r1) 524; P8-NEXT: mtlr r0 525; P8-NEXT: blr 526; 527; P9-LABEL: ppcq_to_i64: 528; P9: # %bb.0: # %entry 529; P9-NEXT: mflr r0 530; P9-NEXT: stdu r1, -32(r1) 531; P9-NEXT: std r0, 48(r1) 532; P9-NEXT: .cfi_def_cfa_offset 32 533; P9-NEXT: .cfi_offset lr, 16 534; P9-NEXT: bl __fixtfdi 535; P9-NEXT: nop 536; P9-NEXT: addi r1, r1, 32 537; P9-NEXT: ld r0, 16(r1) 538; P9-NEXT: mtlr r0 539; P9-NEXT: blr 540; 541; NOVSX-LABEL: ppcq_to_i64: 542; NOVSX: # %bb.0: # %entry 543; NOVSX-NEXT: mflr r0 544; NOVSX-NEXT: stdu r1, -32(r1) 545; NOVSX-NEXT: std r0, 48(r1) 546; NOVSX-NEXT: .cfi_def_cfa_offset 32 547; NOVSX-NEXT: .cfi_offset lr, 16 548; NOVSX-NEXT: bl __fixtfdi 549; NOVSX-NEXT: nop 550; NOVSX-NEXT: addi r1, r1, 32 551; NOVSX-NEXT: ld r0, 16(r1) 552; NOVSX-NEXT: mtlr r0 553; NOVSX-NEXT: blr 554entry: 555 %conv = tail call i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 556 ret i64 %conv 557} 558 559define i64 @ppcq_to_u64(ppc_fp128 %m) #0 { 560; P8-LABEL: ppcq_to_u64: 561; P8: # %bb.0: # %entry 562; P8-NEXT: mflr r0 563; P8-NEXT: stdu r1, -112(r1) 564; P8-NEXT: std r0, 128(r1) 565; P8-NEXT: .cfi_def_cfa_offset 112 566; P8-NEXT: .cfi_offset lr, 16 567; P8-NEXT: bl __fixunstfdi 568; P8-NEXT: nop 569; P8-NEXT: addi r1, r1, 112 570; P8-NEXT: ld r0, 16(r1) 571; P8-NEXT: mtlr r0 572; P8-NEXT: blr 573; 574; P9-LABEL: ppcq_to_u64: 575; P9: # %bb.0: # %entry 576; P9-NEXT: mflr r0 577; P9-NEXT: stdu r1, -32(r1) 578; P9-NEXT: std r0, 48(r1) 579; P9-NEXT: .cfi_def_cfa_offset 32 580; P9-NEXT: .cfi_offset lr, 16 581; P9-NEXT: bl __fixunstfdi 582; P9-NEXT: nop 583; P9-NEXT: addi r1, r1, 32 584; P9-NEXT: ld r0, 16(r1) 585; P9-NEXT: mtlr r0 586; P9-NEXT: blr 587; 588; NOVSX-LABEL: ppcq_to_u64: 589; NOVSX: # %bb.0: # %entry 590; NOVSX-NEXT: mflr r0 591; NOVSX-NEXT: stdu r1, -32(r1) 592; NOVSX-NEXT: std r0, 48(r1) 593; NOVSX-NEXT: .cfi_def_cfa_offset 32 594; NOVSX-NEXT: .cfi_offset lr, 16 595; NOVSX-NEXT: bl __fixunstfdi 596; NOVSX-NEXT: nop 597; NOVSX-NEXT: addi r1, r1, 32 598; NOVSX-NEXT: ld r0, 16(r1) 599; NOVSX-NEXT: mtlr r0 600; NOVSX-NEXT: blr 601entry: 602 %conv = tail call i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 603 ret i64 %conv 604} 605 606define zeroext i32 @ppcq_to_u32(ppc_fp128 %m) #0 { 607; P8-LABEL: ppcq_to_u32: 608; P8: # %bb.0: # %entry 609; P8-NEXT: mflr r0 610; P8-NEXT: stdu r1, -128(r1) 611; P8-NEXT: std r0, 144(r1) 612; P8-NEXT: .cfi_def_cfa_offset 128 613; P8-NEXT: .cfi_offset lr, 16 614; P8-NEXT: .cfi_offset r30, -16 615; P8-NEXT: addis r3, r2, .LCPI13_0@toc@ha 616; P8-NEXT: xxlxor f3, f3, f3 617; P8-NEXT: std r30, 112(r1) # 8-byte Folded Spill 618; P8-NEXT: lfs f0, .LCPI13_0@toc@l(r3) 619; P8-NEXT: fcmpo cr1, f2, f3 620; P8-NEXT: lis r3, -32768 621; P8-NEXT: fcmpo cr0, f1, f0 622; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt 623; P8-NEXT: crandc 4*cr5+gt, lt, eq 624; P8-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt 625; P8-NEXT: isel r30, 0, r3, 4*cr5+lt 626; P8-NEXT: bc 12, 4*cr5+lt, .LBB13_2 627; P8-NEXT: # %bb.1: # %entry 628; P8-NEXT: fmr f3, f0 629; P8-NEXT: .LBB13_2: # %entry 630; P8-NEXT: xxlxor f4, f4, f4 631; P8-NEXT: bl __gcc_qsub 632; P8-NEXT: nop 633; P8-NEXT: mffs f0 634; P8-NEXT: mtfsb1 31 635; P8-NEXT: mtfsb0 30 636; P8-NEXT: fadd f1, f2, f1 637; P8-NEXT: mtfsf 1, f0 638; P8-NEXT: xscvdpsxws f0, f1 639; P8-NEXT: mffprwz r3, f0 640; P8-NEXT: xor r3, r3, r30 641; P8-NEXT: ld r30, 112(r1) # 8-byte Folded Reload 642; P8-NEXT: clrldi r3, r3, 32 643; P8-NEXT: addi r1, r1, 128 644; P8-NEXT: ld r0, 16(r1) 645; P8-NEXT: mtlr r0 646; P8-NEXT: blr 647; 648; P9-LABEL: ppcq_to_u32: 649; P9: # %bb.0: # %entry 650; P9-NEXT: mflr r0 651; P9-NEXT: .cfi_def_cfa_offset 48 652; P9-NEXT: .cfi_offset lr, 16 653; P9-NEXT: .cfi_offset r30, -16 654; P9-NEXT: std r30, -16(r1) # 8-byte Folded Spill 655; P9-NEXT: stdu r1, -48(r1) 656; P9-NEXT: addis r3, r2, .LCPI13_0@toc@ha 657; P9-NEXT: xxlxor f3, f3, f3 658; P9-NEXT: std r0, 64(r1) 659; P9-NEXT: lfs f0, .LCPI13_0@toc@l(r3) 660; P9-NEXT: fcmpo cr1, f2, f3 661; P9-NEXT: lis r3, -32768 662; P9-NEXT: fcmpo cr0, f1, f0 663; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt 664; P9-NEXT: crandc 4*cr5+gt, lt, eq 665; P9-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt 666; P9-NEXT: isel r30, 0, r3, 4*cr5+lt 667; P9-NEXT: bc 12, 4*cr5+lt, .LBB13_2 668; P9-NEXT: # %bb.1: # %entry 669; P9-NEXT: fmr f3, f0 670; P9-NEXT: .LBB13_2: # %entry 671; P9-NEXT: xxlxor f4, f4, f4 672; P9-NEXT: bl __gcc_qsub 673; P9-NEXT: nop 674; P9-NEXT: mffs f0 675; P9-NEXT: mtfsb1 31 676; P9-NEXT: mtfsb0 30 677; P9-NEXT: fadd f1, f2, f1 678; P9-NEXT: mtfsf 1, f0 679; P9-NEXT: xscvdpsxws f0, f1 680; P9-NEXT: mffprwz r3, f0 681; P9-NEXT: xor r3, r3, r30 682; P9-NEXT: clrldi r3, r3, 32 683; P9-NEXT: addi r1, r1, 48 684; P9-NEXT: ld r0, 16(r1) 685; P9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 686; P9-NEXT: mtlr r0 687; P9-NEXT: blr 688; 689; NOVSX-LABEL: ppcq_to_u32: 690; NOVSX: # %bb.0: # %entry 691; NOVSX-NEXT: mfocrf r12, 32 692; NOVSX-NEXT: stw r12, 8(r1) 693; NOVSX-NEXT: mflr r0 694; NOVSX-NEXT: stdu r1, -48(r1) 695; NOVSX-NEXT: std r0, 64(r1) 696; NOVSX-NEXT: .cfi_def_cfa_offset 48 697; NOVSX-NEXT: .cfi_offset lr, 16 698; NOVSX-NEXT: .cfi_offset cr2, 8 699; NOVSX-NEXT: addis r3, r2, .LCPI13_0@toc@ha 700; NOVSX-NEXT: lfs f0, .LCPI13_0@toc@l(r3) 701; NOVSX-NEXT: addis r3, r2, .LCPI13_1@toc@ha 702; NOVSX-NEXT: lfs f4, .LCPI13_1@toc@l(r3) 703; NOVSX-NEXT: fcmpo cr0, f1, f0 704; NOVSX-NEXT: fcmpo cr1, f2, f4 705; NOVSX-NEXT: fmr f3, f4 706; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq 707; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt 708; NOVSX-NEXT: cror 4*cr2+lt, 4*cr5+gt, 4*cr5+lt 709; NOVSX-NEXT: bc 12, 4*cr2+lt, .LBB13_2 710; NOVSX-NEXT: # %bb.1: # %entry 711; NOVSX-NEXT: fmr f3, f0 712; NOVSX-NEXT: .LBB13_2: # %entry 713; NOVSX-NEXT: bl __gcc_qsub 714; NOVSX-NEXT: nop 715; NOVSX-NEXT: mffs f0 716; NOVSX-NEXT: mtfsb1 31 717; NOVSX-NEXT: mtfsb0 30 718; NOVSX-NEXT: addi r3, r1, 44 719; NOVSX-NEXT: fadd f1, f2, f1 720; NOVSX-NEXT: mtfsf 1, f0 721; NOVSX-NEXT: fctiwz f0, f1 722; NOVSX-NEXT: stfiwx f0, 0, r3 723; NOVSX-NEXT: lis r3, -32768 724; NOVSX-NEXT: lwz r4, 44(r1) 725; NOVSX-NEXT: isel r3, 0, r3, 4*cr2+lt 726; NOVSX-NEXT: xor r3, r4, r3 727; NOVSX-NEXT: clrldi r3, r3, 32 728; NOVSX-NEXT: addi r1, r1, 48 729; NOVSX-NEXT: ld r0, 16(r1) 730; NOVSX-NEXT: lwz r12, 8(r1) 731; NOVSX-NEXT: mtlr r0 732; NOVSX-NEXT: mtocrf 32, r12 733; NOVSX-NEXT: blr 734entry: 735 %conv = tail call i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128 %m, metadata !"fpexcept.strict") #0 736 ret i32 %conv 737} 738 739define fp128 @i1_to_q(i1 signext %m) #0 { 740; P8-LABEL: i1_to_q: 741; P8: # %bb.0: # %entry 742; P8-NEXT: mflr r0 743; P8-NEXT: stdu r1, -112(r1) 744; P8-NEXT: std r0, 128(r1) 745; P8-NEXT: .cfi_def_cfa_offset 112 746; P8-NEXT: .cfi_offset lr, 16 747; P8-NEXT: bl __floatsikf 748; P8-NEXT: nop 749; P8-NEXT: addi r1, r1, 112 750; P8-NEXT: ld r0, 16(r1) 751; P8-NEXT: mtlr r0 752; P8-NEXT: blr 753; 754; P9-LABEL: i1_to_q: 755; P9: # %bb.0: # %entry 756; P9-NEXT: mtvsrwa v2, r3 757; P9-NEXT: xscvsdqp v2, v2 758; P9-NEXT: blr 759; 760; NOVSX-LABEL: i1_to_q: 761; NOVSX: # %bb.0: # %entry 762; NOVSX-NEXT: mflr r0 763; NOVSX-NEXT: stdu r1, -32(r1) 764; NOVSX-NEXT: std r0, 48(r1) 765; NOVSX-NEXT: .cfi_def_cfa_offset 32 766; NOVSX-NEXT: .cfi_offset lr, 16 767; NOVSX-NEXT: bl __floatsikf 768; NOVSX-NEXT: nop 769; NOVSX-NEXT: addi r1, r1, 32 770; NOVSX-NEXT: ld r0, 16(r1) 771; NOVSX-NEXT: mtlr r0 772; NOVSX-NEXT: blr 773entry: 774 %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 775 ret fp128 %conv 776} 777 778define fp128 @u1_to_q(i1 zeroext %m) #0 { 779; P8-LABEL: u1_to_q: 780; P8: # %bb.0: # %entry 781; P8-NEXT: mflr r0 782; P8-NEXT: stdu r1, -112(r1) 783; P8-NEXT: std r0, 128(r1) 784; P8-NEXT: .cfi_def_cfa_offset 112 785; P8-NEXT: .cfi_offset lr, 16 786; P8-NEXT: bl __floatsikf 787; P8-NEXT: nop 788; P8-NEXT: addi r1, r1, 112 789; P8-NEXT: ld r0, 16(r1) 790; P8-NEXT: mtlr r0 791; P8-NEXT: blr 792; 793; P9-LABEL: u1_to_q: 794; P9: # %bb.0: # %entry 795; P9-NEXT: mtvsrwa v2, r3 796; P9-NEXT: xscvsdqp v2, v2 797; P9-NEXT: blr 798; 799; NOVSX-LABEL: u1_to_q: 800; NOVSX: # %bb.0: # %entry 801; NOVSX-NEXT: mflr r0 802; NOVSX-NEXT: stdu r1, -32(r1) 803; NOVSX-NEXT: std r0, 48(r1) 804; NOVSX-NEXT: .cfi_def_cfa_offset 32 805; NOVSX-NEXT: .cfi_offset lr, 16 806; NOVSX-NEXT: bl __floatunsikf 807; NOVSX-NEXT: nop 808; NOVSX-NEXT: addi r1, r1, 32 809; NOVSX-NEXT: ld r0, 16(r1) 810; NOVSX-NEXT: mtlr r0 811; NOVSX-NEXT: blr 812entry: 813 %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 814 ret fp128 %conv 815} 816 817define ppc_fp128 @i1_to_ppcq(i1 signext %m) #0 { 818; P8-LABEL: i1_to_ppcq: 819; P8: # %bb.0: # %entry 820; P8-NEXT: mtfprwa f0, r3 821; P8-NEXT: xxlxor f2, f2, f2 822; P8-NEXT: xscvsxddp f1, f0 823; P8-NEXT: blr 824; 825; P9-LABEL: i1_to_ppcq: 826; P9: # %bb.0: # %entry 827; P9-NEXT: mtfprwa f0, r3 828; P9-NEXT: xxlxor f2, f2, f2 829; P9-NEXT: xscvsxddp f1, f0 830; P9-NEXT: blr 831; 832; NOVSX-LABEL: i1_to_ppcq: 833; NOVSX: # %bb.0: # %entry 834; NOVSX-NEXT: stw r3, -4(r1) 835; NOVSX-NEXT: addi r3, r1, -4 836; NOVSX-NEXT: lfiwax f0, 0, r3 837; NOVSX-NEXT: addis r3, r2, .LCPI16_0@toc@ha 838; NOVSX-NEXT: lfs f2, .LCPI16_0@toc@l(r3) 839; NOVSX-NEXT: fcfid f1, f0 840; NOVSX-NEXT: blr 841entry: 842 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 843 ret ppc_fp128 %conv 844} 845 846define ppc_fp128 @u1_to_ppcq(i1 zeroext %m) #0 { 847; P8-LABEL: u1_to_ppcq: 848; P8: # %bb.0: # %entry 849; P8-NEXT: mtfprwa f0, r3 850; P8-NEXT: xxlxor f2, f2, f2 851; P8-NEXT: xscvsxddp f1, f0 852; P8-NEXT: blr 853; 854; P9-LABEL: u1_to_ppcq: 855; P9: # %bb.0: # %entry 856; P9-NEXT: mtfprwa f0, r3 857; P9-NEXT: xxlxor f2, f2, f2 858; P9-NEXT: xscvsxddp f1, f0 859; P9-NEXT: blr 860; 861; NOVSX-LABEL: u1_to_ppcq: 862; NOVSX: # %bb.0: # %entry 863; NOVSX-NEXT: stw r3, -4(r1) 864; NOVSX-NEXT: addi r3, r1, -4 865; NOVSX-NEXT: lfiwax f0, 0, r3 866; NOVSX-NEXT: addis r3, r2, .LCPI17_0@toc@ha 867; NOVSX-NEXT: lfs f2, .LCPI17_0@toc@l(r3) 868; NOVSX-NEXT: fcfid f1, f0 869; NOVSX-NEXT: blr 870entry: 871 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i1(i1 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 872 ret ppc_fp128 %conv 873} 874 875define fp128 @i32_to_q(i32 signext %m) #0 { 876; P8-LABEL: i32_to_q: 877; P8: # %bb.0: # %entry 878; P8-NEXT: mflr r0 879; P8-NEXT: stdu r1, -112(r1) 880; P8-NEXT: std r0, 128(r1) 881; P8-NEXT: .cfi_def_cfa_offset 112 882; P8-NEXT: .cfi_offset lr, 16 883; P8-NEXT: bl __floatsikf 884; P8-NEXT: nop 885; P8-NEXT: addi r1, r1, 112 886; P8-NEXT: ld r0, 16(r1) 887; P8-NEXT: mtlr r0 888; P8-NEXT: blr 889; 890; P9-LABEL: i32_to_q: 891; P9: # %bb.0: # %entry 892; P9-NEXT: mtvsrwa v2, r3 893; P9-NEXT: xscvsdqp v2, v2 894; P9-NEXT: blr 895; 896; NOVSX-LABEL: i32_to_q: 897; NOVSX: # %bb.0: # %entry 898; NOVSX-NEXT: mflr r0 899; NOVSX-NEXT: stdu r1, -32(r1) 900; NOVSX-NEXT: std r0, 48(r1) 901; NOVSX-NEXT: .cfi_def_cfa_offset 32 902; NOVSX-NEXT: .cfi_offset lr, 16 903; NOVSX-NEXT: bl __floatsikf 904; NOVSX-NEXT: nop 905; NOVSX-NEXT: addi r1, r1, 32 906; NOVSX-NEXT: ld r0, 16(r1) 907; NOVSX-NEXT: mtlr r0 908; NOVSX-NEXT: blr 909entry: 910 %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 911 ret fp128 %conv 912} 913 914define fp128 @i64_to_q(i64 %m) #0 { 915; P8-LABEL: i64_to_q: 916; P8: # %bb.0: # %entry 917; P8-NEXT: mflr r0 918; P8-NEXT: stdu r1, -112(r1) 919; P8-NEXT: std r0, 128(r1) 920; P8-NEXT: .cfi_def_cfa_offset 112 921; P8-NEXT: .cfi_offset lr, 16 922; P8-NEXT: bl __floatdikf 923; P8-NEXT: nop 924; P8-NEXT: addi r1, r1, 112 925; P8-NEXT: ld r0, 16(r1) 926; P8-NEXT: mtlr r0 927; P8-NEXT: blr 928; 929; P9-LABEL: i64_to_q: 930; P9: # %bb.0: # %entry 931; P9-NEXT: mtvsrd v2, r3 932; P9-NEXT: xscvsdqp v2, v2 933; P9-NEXT: blr 934; 935; NOVSX-LABEL: i64_to_q: 936; NOVSX: # %bb.0: # %entry 937; NOVSX-NEXT: mflr r0 938; NOVSX-NEXT: stdu r1, -32(r1) 939; NOVSX-NEXT: std r0, 48(r1) 940; NOVSX-NEXT: .cfi_def_cfa_offset 32 941; NOVSX-NEXT: .cfi_offset lr, 16 942; NOVSX-NEXT: bl __floatdikf 943; NOVSX-NEXT: nop 944; NOVSX-NEXT: addi r1, r1, 32 945; NOVSX-NEXT: ld r0, 16(r1) 946; NOVSX-NEXT: mtlr r0 947; NOVSX-NEXT: blr 948entry: 949 %conv = tail call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 950 ret fp128 %conv 951} 952 953define fp128 @u32_to_q(i32 zeroext %m) #0 { 954; P8-LABEL: u32_to_q: 955; P8: # %bb.0: # %entry 956; P8-NEXT: mflr r0 957; P8-NEXT: stdu r1, -112(r1) 958; P8-NEXT: std r0, 128(r1) 959; P8-NEXT: .cfi_def_cfa_offset 112 960; P8-NEXT: .cfi_offset lr, 16 961; P8-NEXT: bl __floatunsikf 962; P8-NEXT: nop 963; P8-NEXT: addi r1, r1, 112 964; P8-NEXT: ld r0, 16(r1) 965; P8-NEXT: mtlr r0 966; P8-NEXT: blr 967; 968; P9-LABEL: u32_to_q: 969; P9: # %bb.0: # %entry 970; P9-NEXT: mtvsrwz v2, r3 971; P9-NEXT: xscvudqp v2, v2 972; P9-NEXT: blr 973; 974; NOVSX-LABEL: u32_to_q: 975; NOVSX: # %bb.0: # %entry 976; NOVSX-NEXT: mflr r0 977; NOVSX-NEXT: stdu r1, -32(r1) 978; NOVSX-NEXT: std r0, 48(r1) 979; NOVSX-NEXT: .cfi_def_cfa_offset 32 980; NOVSX-NEXT: .cfi_offset lr, 16 981; NOVSX-NEXT: bl __floatunsikf 982; NOVSX-NEXT: nop 983; NOVSX-NEXT: addi r1, r1, 32 984; NOVSX-NEXT: ld r0, 16(r1) 985; NOVSX-NEXT: mtlr r0 986; NOVSX-NEXT: blr 987entry: 988 %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 989 ret fp128 %conv 990} 991 992define fp128 @u64_to_q(i64 %m) #0 { 993; P8-LABEL: u64_to_q: 994; P8: # %bb.0: # %entry 995; P8-NEXT: mflr r0 996; P8-NEXT: stdu r1, -112(r1) 997; P8-NEXT: std r0, 128(r1) 998; P8-NEXT: .cfi_def_cfa_offset 112 999; P8-NEXT: .cfi_offset lr, 16 1000; P8-NEXT: bl __floatundikf 1001; P8-NEXT: nop 1002; P8-NEXT: addi r1, r1, 112 1003; P8-NEXT: ld r0, 16(r1) 1004; P8-NEXT: mtlr r0 1005; P8-NEXT: blr 1006; 1007; P9-LABEL: u64_to_q: 1008; P9: # %bb.0: # %entry 1009; P9-NEXT: mtvsrd v2, r3 1010; P9-NEXT: xscvudqp v2, v2 1011; P9-NEXT: blr 1012; 1013; NOVSX-LABEL: u64_to_q: 1014; NOVSX: # %bb.0: # %entry 1015; NOVSX-NEXT: mflr r0 1016; NOVSX-NEXT: stdu r1, -32(r1) 1017; NOVSX-NEXT: std r0, 48(r1) 1018; NOVSX-NEXT: .cfi_def_cfa_offset 32 1019; NOVSX-NEXT: .cfi_offset lr, 16 1020; NOVSX-NEXT: bl __floatundikf 1021; NOVSX-NEXT: nop 1022; NOVSX-NEXT: addi r1, r1, 32 1023; NOVSX-NEXT: ld r0, 16(r1) 1024; NOVSX-NEXT: mtlr r0 1025; NOVSX-NEXT: blr 1026entry: 1027 %conv = tail call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 1028 ret fp128 %conv 1029} 1030 1031attributes #0 = { strictfp } 1032