1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s 3; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s 4; RUN: llc -O3 -mtriple=powerpc64-linux-gnu < %s | FileCheck --check-prefix=PC64 %s 5 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: # %entry 9; PC64LE-NEXT: mflr 0 10; PC64LE-NEXT: std 0, 16(1) 11; PC64LE-NEXT: stdu 1, -32(1) 12; PC64LE-NEXT: bl __gcc_qadd 13; PC64LE-NEXT: nop 14; PC64LE-NEXT: addi 1, 1, 32 15; PC64LE-NEXT: ld 0, 16(1) 16; PC64LE-NEXT: mtlr 0 17; PC64LE-NEXT: blr 18; 19; PC64LE9-LABEL: test_fadd_ppc_fp128: 20; PC64LE9: # %bb.0: # %entry 21; PC64LE9-NEXT: mflr 0 22; PC64LE9-NEXT: std 0, 16(1) 23; PC64LE9-NEXT: stdu 1, -32(1) 24; PC64LE9-NEXT: bl __gcc_qadd 25; PC64LE9-NEXT: nop 26; PC64LE9-NEXT: addi 1, 1, 32 27; PC64LE9-NEXT: ld 0, 16(1) 28; PC64LE9-NEXT: mtlr 0 29; PC64LE9-NEXT: blr 30; 31; PC64-LABEL: test_fadd_ppc_fp128: 32; PC64: # %bb.0: # %entry 33; PC64-NEXT: mflr 0 34; PC64-NEXT: std 0, 16(1) 35; PC64-NEXT: stdu 1, -112(1) 36; PC64-NEXT: bl __gcc_qadd 37; PC64-NEXT: nop 38; PC64-NEXT: addi 1, 1, 112 39; PC64-NEXT: ld 0, 16(1) 40; PC64-NEXT: mtlr 0 41; PC64-NEXT: blr 42entry: 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") #1 48 ret ppc_fp128 %add 49} 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: # %entry 54; PC64LE-NEXT: mflr 0 55; PC64LE-NEXT: std 0, 16(1) 56; PC64LE-NEXT: stdu 1, -32(1) 57; PC64LE-NEXT: bl __gcc_qsub 58; PC64LE-NEXT: nop 59; PC64LE-NEXT: addi 1, 1, 32 60; PC64LE-NEXT: ld 0, 16(1) 61; PC64LE-NEXT: mtlr 0 62; PC64LE-NEXT: blr 63; 64; PC64LE9-LABEL: test_fsub_ppc_fp128: 65; PC64LE9: # %bb.0: # %entry 66; PC64LE9-NEXT: mflr 0 67; PC64LE9-NEXT: std 0, 16(1) 68; PC64LE9-NEXT: stdu 1, -32(1) 69; PC64LE9-NEXT: bl __gcc_qsub 70; PC64LE9-NEXT: nop 71; PC64LE9-NEXT: addi 1, 1, 32 72; PC64LE9-NEXT: ld 0, 16(1) 73; PC64LE9-NEXT: mtlr 0 74; PC64LE9-NEXT: blr 75; 76; PC64-LABEL: test_fsub_ppc_fp128: 77; PC64: # %bb.0: # %entry 78; PC64-NEXT: mflr 0 79; PC64-NEXT: std 0, 16(1) 80; PC64-NEXT: stdu 1, -112(1) 81; PC64-NEXT: bl __gcc_qsub 82; PC64-NEXT: nop 83; PC64-NEXT: addi 1, 1, 112 84; PC64-NEXT: ld 0, 16(1) 85; PC64-NEXT: mtlr 0 86; PC64-NEXT: blr 87entry: 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") #1 93 ret ppc_fp128 %sub 94} 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: # %entry 99; PC64LE-NEXT: mflr 0 100; PC64LE-NEXT: std 0, 16(1) 101; PC64LE-NEXT: stdu 1, -32(1) 102; PC64LE-NEXT: bl __gcc_qmul 103; PC64LE-NEXT: nop 104; PC64LE-NEXT: addi 1, 1, 32 105; PC64LE-NEXT: ld 0, 16(1) 106; PC64LE-NEXT: mtlr 0 107; PC64LE-NEXT: blr 108; 109; PC64LE9-LABEL: test_fmul_ppc_fp128: 110; PC64LE9: # %bb.0: # %entry 111; PC64LE9-NEXT: mflr 0 112; PC64LE9-NEXT: std 0, 16(1) 113; PC64LE9-NEXT: stdu 1, -32(1) 114; PC64LE9-NEXT: bl __gcc_qmul 115; PC64LE9-NEXT: nop 116; PC64LE9-NEXT: addi 1, 1, 32 117; PC64LE9-NEXT: ld 0, 16(1) 118; PC64LE9-NEXT: mtlr 0 119; PC64LE9-NEXT: blr 120; 121; PC64-LABEL: test_fmul_ppc_fp128: 122; PC64: # %bb.0: # %entry 123; PC64-NEXT: mflr 0 124; PC64-NEXT: std 0, 16(1) 125; PC64-NEXT: stdu 1, -112(1) 126; PC64-NEXT: bl __gcc_qmul 127; PC64-NEXT: nop 128; PC64-NEXT: addi 1, 1, 112 129; PC64-NEXT: ld 0, 16(1) 130; PC64-NEXT: mtlr 0 131; PC64-NEXT: blr 132entry: 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") #1 138 ret ppc_fp128 %mul 139} 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: # %entry 144; PC64LE-NEXT: mflr 0 145; PC64LE-NEXT: std 0, 16(1) 146; PC64LE-NEXT: stdu 1, -32(1) 147; PC64LE-NEXT: bl __gcc_qdiv 148; PC64LE-NEXT: nop 149; PC64LE-NEXT: addi 1, 1, 32 150; PC64LE-NEXT: ld 0, 16(1) 151; PC64LE-NEXT: mtlr 0 152; PC64LE-NEXT: blr 153; 154; PC64LE9-LABEL: test_fdiv_ppc_fp128: 155; PC64LE9: # %bb.0: # %entry 156; PC64LE9-NEXT: mflr 0 157; PC64LE9-NEXT: std 0, 16(1) 158; PC64LE9-NEXT: stdu 1, -32(1) 159; PC64LE9-NEXT: bl __gcc_qdiv 160; PC64LE9-NEXT: nop 161; PC64LE9-NEXT: addi 1, 1, 32 162; PC64LE9-NEXT: ld 0, 16(1) 163; PC64LE9-NEXT: mtlr 0 164; PC64LE9-NEXT: blr 165; 166; PC64-LABEL: test_fdiv_ppc_fp128: 167; PC64: # %bb.0: # %entry 168; PC64-NEXT: mflr 0 169; PC64-NEXT: std 0, 16(1) 170; PC64-NEXT: stdu 1, -112(1) 171; PC64-NEXT: bl __gcc_qdiv 172; PC64-NEXT: nop 173; PC64-NEXT: addi 1, 1, 112 174; PC64-NEXT: ld 0, 16(1) 175; PC64-NEXT: mtlr 0 176; PC64-NEXT: blr 177entry: 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") #1 183 ret ppc_fp128 %div 184} 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: # %entry 189; PC64LE-NEXT: mflr 0 190; PC64LE-NEXT: std 0, 16(1) 191; PC64LE-NEXT: stdu 1, -32(1) 192; PC64LE-NEXT: bl fmodl 193; PC64LE-NEXT: nop 194; PC64LE-NEXT: addi 1, 1, 32 195; PC64LE-NEXT: ld 0, 16(1) 196; PC64LE-NEXT: mtlr 0 197; PC64LE-NEXT: blr 198; 199; PC64LE9-LABEL: test_frem_ppc_fp128: 200; PC64LE9: # %bb.0: # %entry 201; PC64LE9-NEXT: mflr 0 202; PC64LE9-NEXT: std 0, 16(1) 203; PC64LE9-NEXT: stdu 1, -32(1) 204; PC64LE9-NEXT: bl fmodl 205; PC64LE9-NEXT: nop 206; PC64LE9-NEXT: addi 1, 1, 32 207; PC64LE9-NEXT: ld 0, 16(1) 208; PC64LE9-NEXT: mtlr 0 209; PC64LE9-NEXT: blr 210; 211; PC64-LABEL: test_frem_ppc_fp128: 212; PC64: # %bb.0: # %entry 213; PC64-NEXT: mflr 0 214; PC64-NEXT: std 0, 16(1) 215; PC64-NEXT: stdu 1, -112(1) 216; PC64-NEXT: bl fmodl 217; PC64-NEXT: nop 218; PC64-NEXT: addi 1, 1, 112 219; PC64-NEXT: ld 0, 16(1) 220; PC64-NEXT: mtlr 0 221; PC64-NEXT: blr 222entry: 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") #1 228 ret ppc_fp128 %rem 229} 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: # %entry 234; PC64LE-NEXT: mflr 0 235; PC64LE-NEXT: std 0, 16(1) 236; PC64LE-NEXT: stdu 1, -32(1) 237; PC64LE-NEXT: bl fmal 238; PC64LE-NEXT: nop 239; PC64LE-NEXT: addi 1, 1, 32 240; PC64LE-NEXT: ld 0, 16(1) 241; PC64LE-NEXT: mtlr 0 242; PC64LE-NEXT: blr 243; 244; PC64LE9-LABEL: test_fma_ppc_fp128: 245; PC64LE9: # %bb.0: # %entry 246; PC64LE9-NEXT: mflr 0 247; PC64LE9-NEXT: std 0, 16(1) 248; PC64LE9-NEXT: stdu 1, -32(1) 249; PC64LE9-NEXT: bl fmal 250; PC64LE9-NEXT: nop 251; PC64LE9-NEXT: addi 1, 1, 32 252; PC64LE9-NEXT: ld 0, 16(1) 253; PC64LE9-NEXT: mtlr 0 254; PC64LE9-NEXT: blr 255; 256; PC64-LABEL: test_fma_ppc_fp128: 257; PC64: # %bb.0: # %entry 258; PC64-NEXT: mflr 0 259; PC64-NEXT: std 0, 16(1) 260; PC64-NEXT: stdu 1, -112(1) 261; PC64-NEXT: bl fmal 262; PC64-NEXT: nop 263; PC64-NEXT: addi 1, 1, 112 264; PC64-NEXT: ld 0, 16(1) 265; PC64-NEXT: mtlr 0 266; PC64-NEXT: blr 267entry: 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") #1 274 ret ppc_fp128 %add 275} 276 277define ppc_fp128 @test_sqrt_ppc_fp128(ppc_fp128 %first) #0 { 278; PC64LE-LABEL: test_sqrt_ppc_fp128: 279; PC64LE: # %bb.0: # %entry 280; PC64LE-NEXT: mflr 0 281; PC64LE-NEXT: std 0, 16(1) 282; PC64LE-NEXT: stdu 1, -32(1) 283; PC64LE-NEXT: bl sqrtl 284; PC64LE-NEXT: nop 285; PC64LE-NEXT: addi 1, 1, 32 286; PC64LE-NEXT: ld 0, 16(1) 287; PC64LE-NEXT: mtlr 0 288; PC64LE-NEXT: blr 289; 290; PC64LE9-LABEL: test_sqrt_ppc_fp128: 291; PC64LE9: # %bb.0: # %entry 292; PC64LE9-NEXT: mflr 0 293; PC64LE9-NEXT: std 0, 16(1) 294; PC64LE9-NEXT: stdu 1, -32(1) 295; PC64LE9-NEXT: bl sqrtl 296; PC64LE9-NEXT: nop 297; PC64LE9-NEXT: addi 1, 1, 32 298; PC64LE9-NEXT: ld 0, 16(1) 299; PC64LE9-NEXT: mtlr 0 300; PC64LE9-NEXT: blr 301; 302; PC64-LABEL: test_sqrt_ppc_fp128: 303; PC64: # %bb.0: # %entry 304; PC64-NEXT: mflr 0 305; PC64-NEXT: std 0, 16(1) 306; PC64-NEXT: stdu 1, -112(1) 307; PC64-NEXT: bl sqrtl 308; PC64-NEXT: nop 309; PC64-NEXT: addi 1, 1, 112 310; PC64-NEXT: ld 0, 16(1) 311; PC64-NEXT: mtlr 0 312; PC64-NEXT: blr 313entry: 314 %sqrt = call ppc_fp128 @llvm.experimental.constrained.sqrt.ppcf128( 315 ppc_fp128 %first, 316 metadata !"round.dynamic", 317 metadata !"fpexcept.strict") #1 318 ret ppc_fp128 %sqrt 319} 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: # %entry 324; PC64LE-NEXT: mflr 0 325; PC64LE-NEXT: std 0, 16(1) 326; PC64LE-NEXT: stdu 1, -32(1) 327; PC64LE-NEXT: bl powl 328; PC64LE-NEXT: nop 329; PC64LE-NEXT: addi 1, 1, 32 330; PC64LE-NEXT: ld 0, 16(1) 331; PC64LE-NEXT: mtlr 0 332; PC64LE-NEXT: blr 333; 334; PC64LE9-LABEL: test_pow_ppc_fp128: 335; PC64LE9: # %bb.0: # %entry 336; PC64LE9-NEXT: mflr 0 337; PC64LE9-NEXT: std 0, 16(1) 338; PC64LE9-NEXT: stdu 1, -32(1) 339; PC64LE9-NEXT: bl powl 340; PC64LE9-NEXT: nop 341; PC64LE9-NEXT: addi 1, 1, 32 342; PC64LE9-NEXT: ld 0, 16(1) 343; PC64LE9-NEXT: mtlr 0 344; PC64LE9-NEXT: blr 345; 346; PC64-LABEL: test_pow_ppc_fp128: 347; PC64: # %bb.0: # %entry 348; PC64-NEXT: mflr 0 349; PC64-NEXT: std 0, 16(1) 350; PC64-NEXT: stdu 1, -112(1) 351; PC64-NEXT: bl powl 352; PC64-NEXT: nop 353; PC64-NEXT: addi 1, 1, 112 354; PC64-NEXT: ld 0, 16(1) 355; PC64-NEXT: mtlr 0 356; PC64-NEXT: blr 357entry: 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") #1 363 ret ppc_fp128 %pow 364} 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: # %entry 369; PC64LE-NEXT: mflr 0 370; PC64LE-NEXT: std 0, 16(1) 371; PC64LE-NEXT: stdu 1, -32(1) 372; PC64LE-NEXT: clrldi 5, 5, 32 373; PC64LE-NEXT: bl __powitf2 374; PC64LE-NEXT: nop 375; PC64LE-NEXT: addi 1, 1, 32 376; PC64LE-NEXT: ld 0, 16(1) 377; PC64LE-NEXT: mtlr 0 378; PC64LE-NEXT: blr 379; 380; PC64LE9-LABEL: test_powi_ppc_fp128: 381; PC64LE9: # %bb.0: # %entry 382; PC64LE9-NEXT: mflr 0 383; PC64LE9-NEXT: std 0, 16(1) 384; PC64LE9-NEXT: stdu 1, -32(1) 385; PC64LE9-NEXT: clrldi 5, 5, 32 386; PC64LE9-NEXT: bl __powitf2 387; PC64LE9-NEXT: nop 388; PC64LE9-NEXT: addi 1, 1, 32 389; PC64LE9-NEXT: ld 0, 16(1) 390; PC64LE9-NEXT: mtlr 0 391; PC64LE9-NEXT: blr 392; 393; PC64-LABEL: test_powi_ppc_fp128: 394; PC64: # %bb.0: # %entry 395; PC64-NEXT: mflr 0 396; PC64-NEXT: std 0, 16(1) 397; PC64-NEXT: stdu 1, -112(1) 398; PC64-NEXT: clrldi 5, 5, 32 399; PC64-NEXT: bl __powitf2 400; PC64-NEXT: nop 401; PC64-NEXT: addi 1, 1, 112 402; PC64-NEXT: ld 0, 16(1) 403; PC64-NEXT: mtlr 0 404; PC64-NEXT: blr 405entry: 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") #1 411 ret ppc_fp128 %powi 412} 413 414define ppc_fp128 @test_sin_ppc_fp128(ppc_fp128 %first) #0 { 415; PC64LE-LABEL: test_sin_ppc_fp128: 416; PC64LE: # %bb.0: # %entry 417; PC64LE-NEXT: mflr 0 418; PC64LE-NEXT: std 0, 16(1) 419; PC64LE-NEXT: stdu 1, -32(1) 420; PC64LE-NEXT: bl sinl 421; PC64LE-NEXT: nop 422; PC64LE-NEXT: addi 1, 1, 32 423; PC64LE-NEXT: ld 0, 16(1) 424; PC64LE-NEXT: mtlr 0 425; PC64LE-NEXT: blr 426; 427; PC64LE9-LABEL: test_sin_ppc_fp128: 428; PC64LE9: # %bb.0: # %entry 429; PC64LE9-NEXT: mflr 0 430; PC64LE9-NEXT: std 0, 16(1) 431; PC64LE9-NEXT: stdu 1, -32(1) 432; PC64LE9-NEXT: bl sinl 433; PC64LE9-NEXT: nop 434; PC64LE9-NEXT: addi 1, 1, 32 435; PC64LE9-NEXT: ld 0, 16(1) 436; PC64LE9-NEXT: mtlr 0 437; PC64LE9-NEXT: blr 438; 439; PC64-LABEL: test_sin_ppc_fp128: 440; PC64: # %bb.0: # %entry 441; PC64-NEXT: mflr 0 442; PC64-NEXT: std 0, 16(1) 443; PC64-NEXT: stdu 1, -112(1) 444; PC64-NEXT: bl sinl 445; PC64-NEXT: nop 446; PC64-NEXT: addi 1, 1, 112 447; PC64-NEXT: ld 0, 16(1) 448; PC64-NEXT: mtlr 0 449; PC64-NEXT: blr 450entry: 451 %sin = call ppc_fp128 @llvm.experimental.constrained.sin.ppcf128( 452 ppc_fp128 %first, 453 metadata !"round.dynamic", 454 metadata !"fpexcept.strict") #1 455 ret ppc_fp128 %sin 456} 457 458define ppc_fp128 @test_cos_ppc_fp128(ppc_fp128 %first) #0 { 459; PC64LE-LABEL: test_cos_ppc_fp128: 460; PC64LE: # %bb.0: # %entry 461; PC64LE-NEXT: mflr 0 462; PC64LE-NEXT: std 0, 16(1) 463; PC64LE-NEXT: stdu 1, -32(1) 464; PC64LE-NEXT: bl cosl 465; PC64LE-NEXT: nop 466; PC64LE-NEXT: addi 1, 1, 32 467; PC64LE-NEXT: ld 0, 16(1) 468; PC64LE-NEXT: mtlr 0 469; PC64LE-NEXT: blr 470; 471; PC64LE9-LABEL: test_cos_ppc_fp128: 472; PC64LE9: # %bb.0: # %entry 473; PC64LE9-NEXT: mflr 0 474; PC64LE9-NEXT: std 0, 16(1) 475; PC64LE9-NEXT: stdu 1, -32(1) 476; PC64LE9-NEXT: bl cosl 477; PC64LE9-NEXT: nop 478; PC64LE9-NEXT: addi 1, 1, 32 479; PC64LE9-NEXT: ld 0, 16(1) 480; PC64LE9-NEXT: mtlr 0 481; PC64LE9-NEXT: blr 482; 483; PC64-LABEL: test_cos_ppc_fp128: 484; PC64: # %bb.0: # %entry 485; PC64-NEXT: mflr 0 486; PC64-NEXT: std 0, 16(1) 487; PC64-NEXT: stdu 1, -112(1) 488; PC64-NEXT: bl cosl 489; PC64-NEXT: nop 490; PC64-NEXT: addi 1, 1, 112 491; PC64-NEXT: ld 0, 16(1) 492; PC64-NEXT: mtlr 0 493; PC64-NEXT: blr 494entry: 495 %cos = call ppc_fp128 @llvm.experimental.constrained.cos.ppcf128( 496 ppc_fp128 %first, 497 metadata !"round.dynamic", 498 metadata !"fpexcept.strict") #1 499 ret ppc_fp128 %cos 500} 501 502define ppc_fp128 @test_exp_ppc_fp128(ppc_fp128 %first) #0 { 503; PC64LE-LABEL: test_exp_ppc_fp128: 504; PC64LE: # %bb.0: # %entry 505; PC64LE-NEXT: mflr 0 506; PC64LE-NEXT: std 0, 16(1) 507; PC64LE-NEXT: stdu 1, -32(1) 508; PC64LE-NEXT: bl expl 509; PC64LE-NEXT: nop 510; PC64LE-NEXT: addi 1, 1, 32 511; PC64LE-NEXT: ld 0, 16(1) 512; PC64LE-NEXT: mtlr 0 513; PC64LE-NEXT: blr 514; 515; PC64LE9-LABEL: test_exp_ppc_fp128: 516; PC64LE9: # %bb.0: # %entry 517; PC64LE9-NEXT: mflr 0 518; PC64LE9-NEXT: std 0, 16(1) 519; PC64LE9-NEXT: stdu 1, -32(1) 520; PC64LE9-NEXT: bl expl 521; PC64LE9-NEXT: nop 522; PC64LE9-NEXT: addi 1, 1, 32 523; PC64LE9-NEXT: ld 0, 16(1) 524; PC64LE9-NEXT: mtlr 0 525; PC64LE9-NEXT: blr 526; 527; PC64-LABEL: test_exp_ppc_fp128: 528; PC64: # %bb.0: # %entry 529; PC64-NEXT: mflr 0 530; PC64-NEXT: std 0, 16(1) 531; PC64-NEXT: stdu 1, -112(1) 532; PC64-NEXT: bl expl 533; PC64-NEXT: nop 534; PC64-NEXT: addi 1, 1, 112 535; PC64-NEXT: ld 0, 16(1) 536; PC64-NEXT: mtlr 0 537; PC64-NEXT: blr 538entry: 539 %exp = call ppc_fp128 @llvm.experimental.constrained.exp.ppcf128( 540 ppc_fp128 %first, 541 metadata !"round.dynamic", 542 metadata !"fpexcept.strict") #1 543 ret ppc_fp128 %exp 544} 545 546define ppc_fp128 @test_exp2_ppc_fp128(ppc_fp128 %first) #0 { 547; PC64LE-LABEL: test_exp2_ppc_fp128: 548; PC64LE: # %bb.0: # %entry 549; PC64LE-NEXT: mflr 0 550; PC64LE-NEXT: std 0, 16(1) 551; PC64LE-NEXT: stdu 1, -32(1) 552; PC64LE-NEXT: bl exp2l 553; PC64LE-NEXT: nop 554; PC64LE-NEXT: addi 1, 1, 32 555; PC64LE-NEXT: ld 0, 16(1) 556; PC64LE-NEXT: mtlr 0 557; PC64LE-NEXT: blr 558; 559; PC64LE9-LABEL: test_exp2_ppc_fp128: 560; PC64LE9: # %bb.0: # %entry 561; PC64LE9-NEXT: mflr 0 562; PC64LE9-NEXT: std 0, 16(1) 563; PC64LE9-NEXT: stdu 1, -32(1) 564; PC64LE9-NEXT: bl exp2l 565; PC64LE9-NEXT: nop 566; PC64LE9-NEXT: addi 1, 1, 32 567; PC64LE9-NEXT: ld 0, 16(1) 568; PC64LE9-NEXT: mtlr 0 569; PC64LE9-NEXT: blr 570; 571; PC64-LABEL: test_exp2_ppc_fp128: 572; PC64: # %bb.0: # %entry 573; PC64-NEXT: mflr 0 574; PC64-NEXT: std 0, 16(1) 575; PC64-NEXT: stdu 1, -112(1) 576; PC64-NEXT: bl exp2l 577; PC64-NEXT: nop 578; PC64-NEXT: addi 1, 1, 112 579; PC64-NEXT: ld 0, 16(1) 580; PC64-NEXT: mtlr 0 581; PC64-NEXT: blr 582entry: 583 %exp2 = call ppc_fp128 @llvm.experimental.constrained.exp2.ppcf128( 584 ppc_fp128 %first, 585 metadata !"round.dynamic", 586 metadata !"fpexcept.strict") #1 587 ret ppc_fp128 %exp2 588} 589 590define ppc_fp128 @test_log_ppc_fp128(ppc_fp128 %first) #0 { 591; PC64LE-LABEL: test_log_ppc_fp128: 592; PC64LE: # %bb.0: # %entry 593; PC64LE-NEXT: mflr 0 594; PC64LE-NEXT: std 0, 16(1) 595; PC64LE-NEXT: stdu 1, -32(1) 596; PC64LE-NEXT: bl logl 597; PC64LE-NEXT: nop 598; PC64LE-NEXT: addi 1, 1, 32 599; PC64LE-NEXT: ld 0, 16(1) 600; PC64LE-NEXT: mtlr 0 601; PC64LE-NEXT: blr 602; 603; PC64LE9-LABEL: test_log_ppc_fp128: 604; PC64LE9: # %bb.0: # %entry 605; PC64LE9-NEXT: mflr 0 606; PC64LE9-NEXT: std 0, 16(1) 607; PC64LE9-NEXT: stdu 1, -32(1) 608; PC64LE9-NEXT: bl logl 609; PC64LE9-NEXT: nop 610; PC64LE9-NEXT: addi 1, 1, 32 611; PC64LE9-NEXT: ld 0, 16(1) 612; PC64LE9-NEXT: mtlr 0 613; PC64LE9-NEXT: blr 614; 615; PC64-LABEL: test_log_ppc_fp128: 616; PC64: # %bb.0: # %entry 617; PC64-NEXT: mflr 0 618; PC64-NEXT: std 0, 16(1) 619; PC64-NEXT: stdu 1, -112(1) 620; PC64-NEXT: bl logl 621; PC64-NEXT: nop 622; PC64-NEXT: addi 1, 1, 112 623; PC64-NEXT: ld 0, 16(1) 624; PC64-NEXT: mtlr 0 625; PC64-NEXT: blr 626entry: 627 %log = call ppc_fp128 @llvm.experimental.constrained.log.ppcf128( 628 ppc_fp128 %first, 629 metadata !"round.dynamic", 630 metadata !"fpexcept.strict") #1 631 ret ppc_fp128 %log 632} 633 634define ppc_fp128 @test_log2_ppc_fp128(ppc_fp128 %first) #0 { 635; PC64LE-LABEL: test_log2_ppc_fp128: 636; PC64LE: # %bb.0: # %entry 637; PC64LE-NEXT: mflr 0 638; PC64LE-NEXT: std 0, 16(1) 639; PC64LE-NEXT: stdu 1, -32(1) 640; PC64LE-NEXT: bl log2l 641; PC64LE-NEXT: nop 642; PC64LE-NEXT: addi 1, 1, 32 643; PC64LE-NEXT: ld 0, 16(1) 644; PC64LE-NEXT: mtlr 0 645; PC64LE-NEXT: blr 646; 647; PC64LE9-LABEL: test_log2_ppc_fp128: 648; PC64LE9: # %bb.0: # %entry 649; PC64LE9-NEXT: mflr 0 650; PC64LE9-NEXT: std 0, 16(1) 651; PC64LE9-NEXT: stdu 1, -32(1) 652; PC64LE9-NEXT: bl log2l 653; PC64LE9-NEXT: nop 654; PC64LE9-NEXT: addi 1, 1, 32 655; PC64LE9-NEXT: ld 0, 16(1) 656; PC64LE9-NEXT: mtlr 0 657; PC64LE9-NEXT: blr 658; 659; PC64-LABEL: test_log2_ppc_fp128: 660; PC64: # %bb.0: # %entry 661; PC64-NEXT: mflr 0 662; PC64-NEXT: std 0, 16(1) 663; PC64-NEXT: stdu 1, -112(1) 664; PC64-NEXT: bl log2l 665; PC64-NEXT: nop 666; PC64-NEXT: addi 1, 1, 112 667; PC64-NEXT: ld 0, 16(1) 668; PC64-NEXT: mtlr 0 669; PC64-NEXT: blr 670entry: 671 %log2 = call ppc_fp128 @llvm.experimental.constrained.log2.ppcf128( 672 ppc_fp128 %first, 673 metadata !"round.dynamic", 674 metadata !"fpexcept.strict") #1 675 ret ppc_fp128 %log2 676} 677 678define ppc_fp128 @test_log10_ppc_fp128(ppc_fp128 %first) #0 { 679; PC64LE-LABEL: test_log10_ppc_fp128: 680; PC64LE: # %bb.0: # %entry 681; PC64LE-NEXT: mflr 0 682; PC64LE-NEXT: std 0, 16(1) 683; PC64LE-NEXT: stdu 1, -32(1) 684; PC64LE-NEXT: bl log10l 685; PC64LE-NEXT: nop 686; PC64LE-NEXT: addi 1, 1, 32 687; PC64LE-NEXT: ld 0, 16(1) 688; PC64LE-NEXT: mtlr 0 689; PC64LE-NEXT: blr 690; 691; PC64LE9-LABEL: test_log10_ppc_fp128: 692; PC64LE9: # %bb.0: # %entry 693; PC64LE9-NEXT: mflr 0 694; PC64LE9-NEXT: std 0, 16(1) 695; PC64LE9-NEXT: stdu 1, -32(1) 696; PC64LE9-NEXT: bl log10l 697; PC64LE9-NEXT: nop 698; PC64LE9-NEXT: addi 1, 1, 32 699; PC64LE9-NEXT: ld 0, 16(1) 700; PC64LE9-NEXT: mtlr 0 701; PC64LE9-NEXT: blr 702; 703; PC64-LABEL: test_log10_ppc_fp128: 704; PC64: # %bb.0: # %entry 705; PC64-NEXT: mflr 0 706; PC64-NEXT: std 0, 16(1) 707; PC64-NEXT: stdu 1, -112(1) 708; PC64-NEXT: bl log10l 709; PC64-NEXT: nop 710; PC64-NEXT: addi 1, 1, 112 711; PC64-NEXT: ld 0, 16(1) 712; PC64-NEXT: mtlr 0 713; PC64-NEXT: blr 714entry: 715 %log10 = call ppc_fp128 @llvm.experimental.constrained.log10.ppcf128( 716 ppc_fp128 %first, 717 metadata !"round.dynamic", 718 metadata !"fpexcept.strict") #1 719 ret ppc_fp128 %log10 720} 721 722define ppc_fp128 @test_rint_ppc_fp128(ppc_fp128 %first) #0 { 723; PC64LE-LABEL: test_rint_ppc_fp128: 724; PC64LE: # %bb.0: # %entry 725; PC64LE-NEXT: mflr 0 726; PC64LE-NEXT: std 0, 16(1) 727; PC64LE-NEXT: stdu 1, -32(1) 728; PC64LE-NEXT: bl rintl 729; PC64LE-NEXT: nop 730; PC64LE-NEXT: addi 1, 1, 32 731; PC64LE-NEXT: ld 0, 16(1) 732; PC64LE-NEXT: mtlr 0 733; PC64LE-NEXT: blr 734; 735; PC64LE9-LABEL: test_rint_ppc_fp128: 736; PC64LE9: # %bb.0: # %entry 737; PC64LE9-NEXT: mflr 0 738; PC64LE9-NEXT: std 0, 16(1) 739; PC64LE9-NEXT: stdu 1, -32(1) 740; PC64LE9-NEXT: bl rintl 741; PC64LE9-NEXT: nop 742; PC64LE9-NEXT: addi 1, 1, 32 743; PC64LE9-NEXT: ld 0, 16(1) 744; PC64LE9-NEXT: mtlr 0 745; PC64LE9-NEXT: blr 746; 747; PC64-LABEL: test_rint_ppc_fp128: 748; PC64: # %bb.0: # %entry 749; PC64-NEXT: mflr 0 750; PC64-NEXT: std 0, 16(1) 751; PC64-NEXT: stdu 1, -112(1) 752; PC64-NEXT: bl rintl 753; PC64-NEXT: nop 754; PC64-NEXT: addi 1, 1, 112 755; PC64-NEXT: ld 0, 16(1) 756; PC64-NEXT: mtlr 0 757; PC64-NEXT: blr 758entry: 759 %rint = call ppc_fp128 @llvm.experimental.constrained.rint.ppcf128( 760 ppc_fp128 %first, 761 metadata !"round.dynamic", 762 metadata !"fpexcept.strict") #1 763 ret ppc_fp128 %rint 764} 765 766define ppc_fp128 @test_nearbyint_ppc_fp128(ppc_fp128 %first) #0 { 767; PC64LE-LABEL: test_nearbyint_ppc_fp128: 768; PC64LE: # %bb.0: # %entry 769; PC64LE-NEXT: mflr 0 770; PC64LE-NEXT: std 0, 16(1) 771; PC64LE-NEXT: stdu 1, -32(1) 772; PC64LE-NEXT: bl nearbyintl 773; PC64LE-NEXT: nop 774; PC64LE-NEXT: addi 1, 1, 32 775; PC64LE-NEXT: ld 0, 16(1) 776; PC64LE-NEXT: mtlr 0 777; PC64LE-NEXT: blr 778; 779; PC64LE9-LABEL: test_nearbyint_ppc_fp128: 780; PC64LE9: # %bb.0: # %entry 781; PC64LE9-NEXT: mflr 0 782; PC64LE9-NEXT: std 0, 16(1) 783; PC64LE9-NEXT: stdu 1, -32(1) 784; PC64LE9-NEXT: bl nearbyintl 785; PC64LE9-NEXT: nop 786; PC64LE9-NEXT: addi 1, 1, 32 787; PC64LE9-NEXT: ld 0, 16(1) 788; PC64LE9-NEXT: mtlr 0 789; PC64LE9-NEXT: blr 790; 791; PC64-LABEL: test_nearbyint_ppc_fp128: 792; PC64: # %bb.0: # %entry 793; PC64-NEXT: mflr 0 794; PC64-NEXT: std 0, 16(1) 795; PC64-NEXT: stdu 1, -112(1) 796; PC64-NEXT: bl nearbyintl 797; PC64-NEXT: nop 798; PC64-NEXT: addi 1, 1, 112 799; PC64-NEXT: ld 0, 16(1) 800; PC64-NEXT: mtlr 0 801; PC64-NEXT: blr 802entry: 803 %nearbyint = call ppc_fp128 @llvm.experimental.constrained.nearbyint.ppcf128( 804 ppc_fp128 %first, 805 metadata !"round.dynamic", 806 metadata !"fpexcept.strict") #1 807 ret ppc_fp128 %nearbyint 808} 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: # %entry 813; PC64LE-NEXT: mflr 0 814; PC64LE-NEXT: std 0, 16(1) 815; PC64LE-NEXT: stdu 1, -32(1) 816; PC64LE-NEXT: bl fmaxl 817; PC64LE-NEXT: nop 818; PC64LE-NEXT: addi 1, 1, 32 819; PC64LE-NEXT: ld 0, 16(1) 820; PC64LE-NEXT: mtlr 0 821; PC64LE-NEXT: blr 822; 823; PC64LE9-LABEL: test_maxnum_ppc_fp128: 824; PC64LE9: # %bb.0: # %entry 825; PC64LE9-NEXT: mflr 0 826; PC64LE9-NEXT: std 0, 16(1) 827; PC64LE9-NEXT: stdu 1, -32(1) 828; PC64LE9-NEXT: bl fmaxl 829; PC64LE9-NEXT: nop 830; PC64LE9-NEXT: addi 1, 1, 32 831; PC64LE9-NEXT: ld 0, 16(1) 832; PC64LE9-NEXT: mtlr 0 833; PC64LE9-NEXT: blr 834; 835; PC64-LABEL: test_maxnum_ppc_fp128: 836; PC64: # %bb.0: # %entry 837; PC64-NEXT: mflr 0 838; PC64-NEXT: std 0, 16(1) 839; PC64-NEXT: stdu 1, -112(1) 840; PC64-NEXT: bl fmaxl 841; PC64-NEXT: nop 842; PC64-NEXT: addi 1, 1, 112 843; PC64-NEXT: ld 0, 16(1) 844; PC64-NEXT: mtlr 0 845; PC64-NEXT: blr 846entry: 847 %maxnum = call ppc_fp128 @llvm.experimental.constrained.maxnum.ppcf128( 848 ppc_fp128 %first, 849 ppc_fp128 %second, 850 metadata !"fpexcept.strict") #1 851 ret ppc_fp128 %maxnum 852} 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: # %entry 857; PC64LE-NEXT: mflr 0 858; PC64LE-NEXT: std 0, 16(1) 859; PC64LE-NEXT: stdu 1, -32(1) 860; PC64LE-NEXT: bl fminl 861; PC64LE-NEXT: nop 862; PC64LE-NEXT: addi 1, 1, 32 863; PC64LE-NEXT: ld 0, 16(1) 864; PC64LE-NEXT: mtlr 0 865; PC64LE-NEXT: blr 866; 867; PC64LE9-LABEL: test_minnum_ppc_fp128: 868; PC64LE9: # %bb.0: # %entry 869; PC64LE9-NEXT: mflr 0 870; PC64LE9-NEXT: std 0, 16(1) 871; PC64LE9-NEXT: stdu 1, -32(1) 872; PC64LE9-NEXT: bl fminl 873; PC64LE9-NEXT: nop 874; PC64LE9-NEXT: addi 1, 1, 32 875; PC64LE9-NEXT: ld 0, 16(1) 876; PC64LE9-NEXT: mtlr 0 877; PC64LE9-NEXT: blr 878; 879; PC64-LABEL: test_minnum_ppc_fp128: 880; PC64: # %bb.0: # %entry 881; PC64-NEXT: mflr 0 882; PC64-NEXT: std 0, 16(1) 883; PC64-NEXT: stdu 1, -112(1) 884; PC64-NEXT: bl fminl 885; PC64-NEXT: nop 886; PC64-NEXT: addi 1, 1, 112 887; PC64-NEXT: ld 0, 16(1) 888; PC64-NEXT: mtlr 0 889; PC64-NEXT: blr 890entry: 891 %minnum = call ppc_fp128 @llvm.experimental.constrained.minnum.ppcf128( 892 ppc_fp128 %first, 893 ppc_fp128 %second, 894 metadata !"fpexcept.strict") #1 895 ret ppc_fp128 %minnum 896} 897 898define ppc_fp128 @test_ceil_ppc_fp128(ppc_fp128 %first) #0 { 899; PC64LE-LABEL: test_ceil_ppc_fp128: 900; PC64LE: # %bb.0: # %entry 901; PC64LE-NEXT: mflr 0 902; PC64LE-NEXT: std 0, 16(1) 903; PC64LE-NEXT: stdu 1, -32(1) 904; PC64LE-NEXT: bl ceill 905; PC64LE-NEXT: nop 906; PC64LE-NEXT: addi 1, 1, 32 907; PC64LE-NEXT: ld 0, 16(1) 908; PC64LE-NEXT: mtlr 0 909; PC64LE-NEXT: blr 910; 911; PC64LE9-LABEL: test_ceil_ppc_fp128: 912; PC64LE9: # %bb.0: # %entry 913; PC64LE9-NEXT: mflr 0 914; PC64LE9-NEXT: std 0, 16(1) 915; PC64LE9-NEXT: stdu 1, -32(1) 916; PC64LE9-NEXT: bl ceill 917; PC64LE9-NEXT: nop 918; PC64LE9-NEXT: addi 1, 1, 32 919; PC64LE9-NEXT: ld 0, 16(1) 920; PC64LE9-NEXT: mtlr 0 921; PC64LE9-NEXT: blr 922; 923; PC64-LABEL: test_ceil_ppc_fp128: 924; PC64: # %bb.0: # %entry 925; PC64-NEXT: mflr 0 926; PC64-NEXT: std 0, 16(1) 927; PC64-NEXT: stdu 1, -112(1) 928; PC64-NEXT: bl ceill 929; PC64-NEXT: nop 930; PC64-NEXT: addi 1, 1, 112 931; PC64-NEXT: ld 0, 16(1) 932; PC64-NEXT: mtlr 0 933; PC64-NEXT: blr 934entry: 935 %ceil = call ppc_fp128 @llvm.experimental.constrained.ceil.ppcf128( 936 ppc_fp128 %first, 937 metadata !"fpexcept.strict") #1 938 ret ppc_fp128 %ceil 939} 940 941define ppc_fp128 @test_floor_ppc_fp128(ppc_fp128 %first) #0 { 942; PC64LE-LABEL: test_floor_ppc_fp128: 943; PC64LE: # %bb.0: # %entry 944; PC64LE-NEXT: mflr 0 945; PC64LE-NEXT: std 0, 16(1) 946; PC64LE-NEXT: stdu 1, -32(1) 947; PC64LE-NEXT: bl floorl 948; PC64LE-NEXT: nop 949; PC64LE-NEXT: addi 1, 1, 32 950; PC64LE-NEXT: ld 0, 16(1) 951; PC64LE-NEXT: mtlr 0 952; PC64LE-NEXT: blr 953; 954; PC64LE9-LABEL: test_floor_ppc_fp128: 955; PC64LE9: # %bb.0: # %entry 956; PC64LE9-NEXT: mflr 0 957; PC64LE9-NEXT: std 0, 16(1) 958; PC64LE9-NEXT: stdu 1, -32(1) 959; PC64LE9-NEXT: bl floorl 960; PC64LE9-NEXT: nop 961; PC64LE9-NEXT: addi 1, 1, 32 962; PC64LE9-NEXT: ld 0, 16(1) 963; PC64LE9-NEXT: mtlr 0 964; PC64LE9-NEXT: blr 965; 966; PC64-LABEL: test_floor_ppc_fp128: 967; PC64: # %bb.0: # %entry 968; PC64-NEXT: mflr 0 969; PC64-NEXT: std 0, 16(1) 970; PC64-NEXT: stdu 1, -112(1) 971; PC64-NEXT: bl floorl 972; PC64-NEXT: nop 973; PC64-NEXT: addi 1, 1, 112 974; PC64-NEXT: ld 0, 16(1) 975; PC64-NEXT: mtlr 0 976; PC64-NEXT: blr 977entry: 978 %floor = call ppc_fp128 @llvm.experimental.constrained.floor.ppcf128( 979 ppc_fp128 %first, 980 metadata !"fpexcept.strict") #1 981 ret ppc_fp128 %floor 982} 983 984define ppc_fp128 @test_round_ppc_fp128(ppc_fp128 %first) #0 { 985; PC64LE-LABEL: test_round_ppc_fp128: 986; PC64LE: # %bb.0: # %entry 987; PC64LE-NEXT: mflr 0 988; PC64LE-NEXT: std 0, 16(1) 989; PC64LE-NEXT: stdu 1, -32(1) 990; PC64LE-NEXT: bl roundl 991; PC64LE-NEXT: nop 992; PC64LE-NEXT: addi 1, 1, 32 993; PC64LE-NEXT: ld 0, 16(1) 994; PC64LE-NEXT: mtlr 0 995; PC64LE-NEXT: blr 996; 997; PC64LE9-LABEL: test_round_ppc_fp128: 998; PC64LE9: # %bb.0: # %entry 999; PC64LE9-NEXT: mflr 0 1000; PC64LE9-NEXT: std 0, 16(1) 1001; PC64LE9-NEXT: stdu 1, -32(1) 1002; PC64LE9-NEXT: bl roundl 1003; PC64LE9-NEXT: nop 1004; PC64LE9-NEXT: addi 1, 1, 32 1005; PC64LE9-NEXT: ld 0, 16(1) 1006; PC64LE9-NEXT: mtlr 0 1007; PC64LE9-NEXT: blr 1008; 1009; PC64-LABEL: test_round_ppc_fp128: 1010; PC64: # %bb.0: # %entry 1011; PC64-NEXT: mflr 0 1012; PC64-NEXT: std 0, 16(1) 1013; PC64-NEXT: stdu 1, -112(1) 1014; PC64-NEXT: bl roundl 1015; PC64-NEXT: nop 1016; PC64-NEXT: addi 1, 1, 112 1017; PC64-NEXT: ld 0, 16(1) 1018; PC64-NEXT: mtlr 0 1019; PC64-NEXT: blr 1020entry: 1021 %round = call ppc_fp128 @llvm.experimental.constrained.round.ppcf128( 1022 ppc_fp128 %first, 1023 metadata !"fpexcept.strict") #1 1024 ret ppc_fp128 %round 1025} 1026 1027define ppc_fp128 @test_trunc_ppc_fp128(ppc_fp128 %first) #0 { 1028; PC64LE-LABEL: test_trunc_ppc_fp128: 1029; PC64LE: # %bb.0: # %entry 1030; PC64LE-NEXT: mflr 0 1031; PC64LE-NEXT: std 0, 16(1) 1032; PC64LE-NEXT: stdu 1, -32(1) 1033; PC64LE-NEXT: bl truncl 1034; PC64LE-NEXT: nop 1035; PC64LE-NEXT: addi 1, 1, 32 1036; PC64LE-NEXT: ld 0, 16(1) 1037; PC64LE-NEXT: mtlr 0 1038; PC64LE-NEXT: blr 1039; 1040; PC64LE9-LABEL: test_trunc_ppc_fp128: 1041; PC64LE9: # %bb.0: # %entry 1042; PC64LE9-NEXT: mflr 0 1043; PC64LE9-NEXT: std 0, 16(1) 1044; PC64LE9-NEXT: stdu 1, -32(1) 1045; PC64LE9-NEXT: bl truncl 1046; PC64LE9-NEXT: nop 1047; PC64LE9-NEXT: addi 1, 1, 32 1048; PC64LE9-NEXT: ld 0, 16(1) 1049; PC64LE9-NEXT: mtlr 0 1050; PC64LE9-NEXT: blr 1051; 1052; PC64-LABEL: test_trunc_ppc_fp128: 1053; PC64: # %bb.0: # %entry 1054; PC64-NEXT: mflr 0 1055; PC64-NEXT: std 0, 16(1) 1056; PC64-NEXT: stdu 1, -112(1) 1057; PC64-NEXT: bl truncl 1058; PC64-NEXT: nop 1059; PC64-NEXT: addi 1, 1, 112 1060; PC64-NEXT: ld 0, 16(1) 1061; PC64-NEXT: mtlr 0 1062; PC64-NEXT: blr 1063entry: 1064 %trunc = call ppc_fp128 @llvm.experimental.constrained.trunc.ppcf128( 1065 ppc_fp128 %first, 1066 metadata !"fpexcept.strict") #1 1067 ret ppc_fp128 %trunc 1068} 1069 1070define float @test_fptrunc_ppc_fp128_f32(ppc_fp128 %first) #0 { 1071; PC64LE-LABEL: test_fptrunc_ppc_fp128_f32: 1072; PC64LE: # %bb.0: # %entry 1073; PC64LE-NEXT: xsrsp 1, 1 1074; PC64LE-NEXT: blr 1075; 1076; PC64LE9-LABEL: test_fptrunc_ppc_fp128_f32: 1077; PC64LE9: # %bb.0: # %entry 1078; PC64LE9-NEXT: xsrsp 1, 1 1079; PC64LE9-NEXT: blr 1080; 1081; PC64-LABEL: test_fptrunc_ppc_fp128_f32: 1082; PC64: # %bb.0: # %entry 1083; PC64-NEXT: frsp 1, 1 1084; PC64-NEXT: blr 1085entry: 1086 %fptrunc = call float @llvm.experimental.constrained.fptrunc.ppcf128.f32( 1087 ppc_fp128 %first, 1088 metadata !"round.dynamic", 1089 metadata !"fpexcept.strict") #1 1090 ret float %fptrunc 1091} 1092 1093define double @test_fptrunc_ppc_fp128_f64(ppc_fp128 %first) #0 { 1094; PC64LE-LABEL: test_fptrunc_ppc_fp128_f64: 1095; PC64LE: # %bb.0: # %entry 1096; PC64LE-NEXT: blr 1097; 1098; PC64LE9-LABEL: test_fptrunc_ppc_fp128_f64: 1099; PC64LE9: # %bb.0: # %entry 1100; PC64LE9-NEXT: blr 1101; 1102; PC64-LABEL: test_fptrunc_ppc_fp128_f64: 1103; PC64: # %bb.0: # %entry 1104; PC64-NEXT: blr 1105entry: 1106 %fptrunc = call double @llvm.experimental.constrained.fptrunc.ppcf128.f64( 1107 ppc_fp128 %first, 1108 metadata !"round.dynamic", 1109 metadata !"fpexcept.strict") #1 1110 ret double %fptrunc 1111} 1112 1113define ppc_fp128 @test_fpext_ppc_fp128_f32(float %first) #0 { 1114; PC64LE-LABEL: test_fpext_ppc_fp128_f32: 1115; PC64LE: # %bb.0: # %entry 1116; PC64LE-NEXT: xxlxor 2, 2, 2 1117; PC64LE-NEXT: blr 1118; 1119; PC64LE9-LABEL: test_fpext_ppc_fp128_f32: 1120; PC64LE9: # %bb.0: # %entry 1121; PC64LE9-NEXT: xxlxor 2, 2, 2 1122; PC64LE9-NEXT: blr 1123; 1124; PC64-LABEL: test_fpext_ppc_fp128_f32: 1125; PC64: # %bb.0: # %entry 1126; PC64-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1127; PC64-NEXT: lfs 2, .LCPI26_0@toc@l(3) 1128; PC64-NEXT: blr 1129entry: 1130 %fpext = call ppc_fp128 @llvm.experimental.constrained.fpext.f32.ppcf128( 1131 float %first, 1132 metadata !"fpexcept.strict") #1 1133 ret ppc_fp128 %fpext 1134} 1135 1136define ppc_fp128 @test_fpext_ppc_fp128_f64(double %first) #0 { 1137; PC64LE-LABEL: test_fpext_ppc_fp128_f64: 1138; PC64LE: # %bb.0: # %entry 1139; PC64LE-NEXT: xxlxor 2, 2, 2 1140; PC64LE-NEXT: blr 1141; 1142; PC64LE9-LABEL: test_fpext_ppc_fp128_f64: 1143; PC64LE9: # %bb.0: # %entry 1144; PC64LE9-NEXT: xxlxor 2, 2, 2 1145; PC64LE9-NEXT: blr 1146; 1147; PC64-LABEL: test_fpext_ppc_fp128_f64: 1148; PC64: # %bb.0: # %entry 1149; PC64-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1150; PC64-NEXT: lfs 2, .LCPI27_0@toc@l(3) 1151; PC64-NEXT: blr 1152entry: 1153 %fpext = call ppc_fp128 @llvm.experimental.constrained.fpext.f64.ppcf128( 1154 double %first, 1155 metadata !"fpexcept.strict") #1 1156 ret ppc_fp128 %fpext 1157} 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: # %entry 1162; PC64LE-NEXT: mflr 0 1163; PC64LE-NEXT: std 0, 16(1) 1164; PC64LE-NEXT: stdu 1, -32(1) 1165; PC64LE-NEXT: bl __fixtfdi 1166; PC64LE-NEXT: nop 1167; PC64LE-NEXT: addi 1, 1, 32 1168; PC64LE-NEXT: ld 0, 16(1) 1169; PC64LE-NEXT: mtlr 0 1170; PC64LE-NEXT: blr 1171; 1172; PC64LE9-LABEL: test_fptosi_ppc_i64_ppc_fp128: 1173; PC64LE9: # %bb.0: # %entry 1174; PC64LE9-NEXT: mflr 0 1175; PC64LE9-NEXT: std 0, 16(1) 1176; PC64LE9-NEXT: stdu 1, -32(1) 1177; PC64LE9-NEXT: bl __fixtfdi 1178; PC64LE9-NEXT: nop 1179; PC64LE9-NEXT: addi 1, 1, 32 1180; PC64LE9-NEXT: ld 0, 16(1) 1181; PC64LE9-NEXT: mtlr 0 1182; PC64LE9-NEXT: blr 1183; 1184; PC64-LABEL: test_fptosi_ppc_i64_ppc_fp128: 1185; PC64: # %bb.0: # %entry 1186; PC64-NEXT: mflr 0 1187; PC64-NEXT: std 0, 16(1) 1188; PC64-NEXT: stdu 1, -112(1) 1189; PC64-NEXT: bl __fixtfdi 1190; PC64-NEXT: nop 1191; PC64-NEXT: addi 1, 1, 112 1192; PC64-NEXT: ld 0, 16(1) 1193; PC64-NEXT: mtlr 0 1194; PC64-NEXT: blr 1195entry: 1196 %fpext = call i64 @llvm.experimental.constrained.fptosi.i64.ppcf128( 1197 ppc_fp128 %first, 1198 metadata !"fpexcept.strict") #1 1199 ret i64 %fpext 1200} 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: # %entry 1205; PC64LE-NEXT: mffs 0 1206; PC64LE-NEXT: mtfsb1 31 1207; PC64LE-NEXT: mtfsb0 30 1208; PC64LE-NEXT: fadd 1, 2, 1 1209; PC64LE-NEXT: mtfsf 1, 0 1210; PC64LE-NEXT: xscvdpsxws 0, 1 1211; PC64LE-NEXT: mffprwz 3, 0 1212; PC64LE-NEXT: blr 1213; 1214; PC64LE9-LABEL: test_fptosi_ppc_i32_ppc_fp128: 1215; PC64LE9: # %bb.0: # %entry 1216; PC64LE9-NEXT: mffs 0 1217; PC64LE9-NEXT: mtfsb1 31 1218; PC64LE9-NEXT: mtfsb0 30 1219; PC64LE9-NEXT: fadd 1, 2, 1 1220; PC64LE9-NEXT: mtfsf 1, 0 1221; PC64LE9-NEXT: xscvdpsxws 0, 1 1222; PC64LE9-NEXT: mffprwz 3, 0 1223; PC64LE9-NEXT: blr 1224; 1225; PC64-LABEL: test_fptosi_ppc_i32_ppc_fp128: 1226; PC64: # %bb.0: # %entry 1227; PC64-NEXT: mffs 0 1228; PC64-NEXT: mtfsb1 31 1229; PC64-NEXT: mtfsb0 30 1230; PC64-NEXT: fadd 1, 2, 1 1231; PC64-NEXT: mtfsf 1, 0 1232; PC64-NEXT: fctiwz 0, 1 1233; PC64-NEXT: stfd 0, -8(1) 1234; PC64-NEXT: lwz 3, -4(1) 1235; PC64-NEXT: blr 1236entry: 1237 %fpext = call i32 @llvm.experimental.constrained.fptosi.i32.ppcf128( 1238 ppc_fp128 %first, 1239 metadata !"fpexcept.strict") #1 1240 ret i32 %fpext 1241} 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: # %entry 1246; PC64LE-NEXT: mflr 0 1247; PC64LE-NEXT: std 0, 16(1) 1248; PC64LE-NEXT: stdu 1, -32(1) 1249; PC64LE-NEXT: bl __fixunstfdi 1250; PC64LE-NEXT: nop 1251; PC64LE-NEXT: addi 1, 1, 32 1252; PC64LE-NEXT: ld 0, 16(1) 1253; PC64LE-NEXT: mtlr 0 1254; PC64LE-NEXT: blr 1255; 1256; PC64LE9-LABEL: test_fptoui_ppc_i64_ppc_fp128: 1257; PC64LE9: # %bb.0: # %entry 1258; PC64LE9-NEXT: mflr 0 1259; PC64LE9-NEXT: std 0, 16(1) 1260; PC64LE9-NEXT: stdu 1, -32(1) 1261; PC64LE9-NEXT: bl __fixunstfdi 1262; PC64LE9-NEXT: nop 1263; PC64LE9-NEXT: addi 1, 1, 32 1264; PC64LE9-NEXT: ld 0, 16(1) 1265; PC64LE9-NEXT: mtlr 0 1266; PC64LE9-NEXT: blr 1267; 1268; PC64-LABEL: test_fptoui_ppc_i64_ppc_fp128: 1269; PC64: # %bb.0: # %entry 1270; PC64-NEXT: mflr 0 1271; PC64-NEXT: std 0, 16(1) 1272; PC64-NEXT: stdu 1, -112(1) 1273; PC64-NEXT: bl __fixunstfdi 1274; PC64-NEXT: nop 1275; PC64-NEXT: addi 1, 1, 112 1276; PC64-NEXT: ld 0, 16(1) 1277; PC64-NEXT: mtlr 0 1278; PC64-NEXT: blr 1279entry: 1280 %fpext = call i64 @llvm.experimental.constrained.fptoui.i64.ppcf128( 1281 ppc_fp128 %first, 1282 metadata !"fpexcept.strict") #1 1283 ret i64 %fpext 1284} 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: # %entry 1289; PC64LE-NEXT: mflr 0 1290; PC64LE-NEXT: std 30, -16(1) # 8-byte Folded Spill 1291; PC64LE-NEXT: std 0, 16(1) 1292; PC64LE-NEXT: stdu 1, -48(1) 1293; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1294; PC64LE-NEXT: xxlxor 3, 3, 3 1295; PC64LE-NEXT: lfs 0, .LCPI31_0@toc@l(3) 1296; PC64LE-NEXT: fcmpo 0, 2, 3 1297; PC64LE-NEXT: lis 3, -32768 1298; PC64LE-NEXT: xxlxor 3, 3, 3 1299; PC64LE-NEXT: fcmpo 1, 1, 0 1300; PC64LE-NEXT: crand 20, 6, 0 1301; PC64LE-NEXT: crandc 21, 4, 6 1302; PC64LE-NEXT: cror 20, 21, 20 1303; PC64LE-NEXT: isel 30, 0, 3, 20 1304; PC64LE-NEXT: bc 12, 20, .LBB31_2 1305; PC64LE-NEXT: # %bb.1: # %entry 1306; PC64LE-NEXT: fmr 3, 0 1307; PC64LE-NEXT: .LBB31_2: # %entry 1308; PC64LE-NEXT: xxlxor 4, 4, 4 1309; PC64LE-NEXT: bl __gcc_qsub 1310; PC64LE-NEXT: nop 1311; PC64LE-NEXT: mffs 0 1312; PC64LE-NEXT: mtfsb1 31 1313; PC64LE-NEXT: mtfsb0 30 1314; PC64LE-NEXT: fadd 1, 2, 1 1315; PC64LE-NEXT: mtfsf 1, 0 1316; PC64LE-NEXT: xscvdpsxws 0, 1 1317; PC64LE-NEXT: mffprwz 3, 0 1318; PC64LE-NEXT: xor 3, 3, 30 1319; PC64LE-NEXT: addi 1, 1, 48 1320; PC64LE-NEXT: ld 0, 16(1) 1321; PC64LE-NEXT: ld 30, -16(1) # 8-byte Folded Reload 1322; PC64LE-NEXT: mtlr 0 1323; PC64LE-NEXT: blr 1324; 1325; PC64LE9-LABEL: test_fptoui_ppc_i32_ppc_fp128: 1326; PC64LE9: # %bb.0: # %entry 1327; PC64LE9-NEXT: mflr 0 1328; PC64LE9-NEXT: std 30, -16(1) # 8-byte Folded Spill 1329; PC64LE9-NEXT: std 0, 16(1) 1330; PC64LE9-NEXT: stdu 1, -48(1) 1331; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1332; PC64LE9-NEXT: xxlxor 3, 3, 3 1333; PC64LE9-NEXT: lfs 0, .LCPI31_0@toc@l(3) 1334; PC64LE9-NEXT: fcmpo 1, 2, 3 1335; PC64LE9-NEXT: lis 3, -32768 1336; PC64LE9-NEXT: fcmpo 0, 1, 0 1337; PC64LE9-NEXT: xxlxor 3, 3, 3 1338; PC64LE9-NEXT: crand 20, 2, 4 1339; PC64LE9-NEXT: crandc 21, 0, 2 1340; PC64LE9-NEXT: cror 20, 21, 20 1341; PC64LE9-NEXT: isel 30, 0, 3, 20 1342; PC64LE9-NEXT: bc 12, 20, .LBB31_2 1343; PC64LE9-NEXT: # %bb.1: # %entry 1344; PC64LE9-NEXT: fmr 3, 0 1345; PC64LE9-NEXT: .LBB31_2: # %entry 1346; PC64LE9-NEXT: xxlxor 4, 4, 4 1347; PC64LE9-NEXT: bl __gcc_qsub 1348; PC64LE9-NEXT: nop 1349; PC64LE9-NEXT: mffs 0 1350; PC64LE9-NEXT: mtfsb1 31 1351; PC64LE9-NEXT: mtfsb0 30 1352; PC64LE9-NEXT: fadd 1, 2, 1 1353; PC64LE9-NEXT: mtfsf 1, 0 1354; PC64LE9-NEXT: xscvdpsxws 0, 1 1355; PC64LE9-NEXT: mffprwz 3, 0 1356; PC64LE9-NEXT: xor 3, 3, 30 1357; PC64LE9-NEXT: addi 1, 1, 48 1358; PC64LE9-NEXT: ld 0, 16(1) 1359; PC64LE9-NEXT: ld 30, -16(1) # 8-byte Folded Reload 1360; PC64LE9-NEXT: mtlr 0 1361; PC64LE9-NEXT: blr 1362; 1363; PC64-LABEL: test_fptoui_ppc_i32_ppc_fp128: 1364; PC64: # %bb.0: # %entry 1365; PC64-NEXT: mflr 0 1366; PC64-NEXT: std 0, 16(1) 1367; PC64-NEXT: mfcr 12 1368; PC64-NEXT: stw 12, 8(1) 1369; PC64-NEXT: stdu 1, -128(1) 1370; PC64-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1371; PC64-NEXT: lfs 0, .LCPI31_0@toc@l(3) 1372; PC64-NEXT: addis 3, 2, .LCPI31_1@toc@ha 1373; PC64-NEXT: lfs 4, .LCPI31_1@toc@l(3) 1374; PC64-NEXT: fcmpo 0, 1, 0 1375; PC64-NEXT: crandc 21, 0, 2 1376; PC64-NEXT: fcmpo 1, 2, 4 1377; PC64-NEXT: crand 20, 2, 4 1378; PC64-NEXT: cror 8, 21, 20 1379; PC64-NEXT: fmr 3, 4 1380; PC64-NEXT: bc 12, 8, .LBB31_2 1381; PC64-NEXT: # %bb.1: # %entry 1382; PC64-NEXT: fmr 3, 0 1383; PC64-NEXT: .LBB31_2: # %entry 1384; PC64-NEXT: bl __gcc_qsub 1385; PC64-NEXT: nop 1386; PC64-NEXT: mffs 0 1387; PC64-NEXT: mtfsb1 31 1388; PC64-NEXT: lis 4, -32768 1389; PC64-NEXT: bc 12, 8, .LBB31_3 1390; PC64-NEXT: b .LBB31_4 1391; PC64-NEXT: .LBB31_3: # %entry 1392; PC64-NEXT: li 4, 0 1393; PC64-NEXT: .LBB31_4: # %entry 1394; PC64-NEXT: mtfsb0 30 1395; PC64-NEXT: fadd 1, 2, 1 1396; PC64-NEXT: mtfsf 1, 0 1397; PC64-NEXT: fctiwz 0, 1 1398; PC64-NEXT: stfd 0, 120(1) 1399; PC64-NEXT: lwz 3, 124(1) 1400; PC64-NEXT: xor 3, 3, 4 1401; PC64-NEXT: addi 1, 1, 128 1402; PC64-NEXT: ld 0, 16(1) 1403; PC64-NEXT: lwz 12, 8(1) 1404; PC64-NEXT: mtlr 0 1405; PC64-NEXT: mtcrf 32, 12 # cr2 1406; PC64-NEXT: blr 1407entry: 1408 %fpext = call i32 @llvm.experimental.constrained.fptoui.i32.ppcf128( 1409 ppc_fp128 %first, 1410 metadata !"fpexcept.strict") #1 1411 ret i32 %fpext 1412} 1413 1414; Test that resultant libcalls retain order even when their non-strict FLOP form could be 1415; trivially optimized into differing sequences. 1416define void @test_constrained_libcall_multichain(float* %firstptr, ppc_fp128* %result) #0 { 1417; PC64LE-LABEL: test_constrained_libcall_multichain: 1418; PC64LE: # %bb.0: 1419; PC64LE-NEXT: mflr 0 1420; PC64LE-NEXT: std 29, -48(1) # 8-byte Folded Spill 1421; PC64LE-NEXT: std 30, -40(1) # 8-byte Folded Spill 1422; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1423; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1424; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1425; PC64LE-NEXT: std 0, 16(1) 1426; PC64LE-NEXT: stdu 1, -80(1) 1427; PC64LE-NEXT: mr 29, 3 1428; PC64LE-NEXT: xxlxor 2, 2, 2 1429; PC64LE-NEXT: li 3, 0 1430; PC64LE-NEXT: mr 30, 4 1431; PC64LE-NEXT: lfsx 31, 0, 29 1432; PC64LE-NEXT: xxlxor 4, 4, 4 1433; PC64LE-NEXT: std 3, 8(4) 1434; PC64LE-NEXT: fmr 1, 31 1435; PC64LE-NEXT: fmr 3, 31 1436; PC64LE-NEXT: stfdx 31, 0, 4 1437; PC64LE-NEXT: bl __gcc_qadd 1438; PC64LE-NEXT: nop 1439; PC64LE-NEXT: fmr 3, 1 1440; PC64LE-NEXT: fmr 4, 2 1441; PC64LE-NEXT: fmr 30, 1 1442; PC64LE-NEXT: fmr 29, 2 1443; PC64LE-NEXT: stfd 2, 24(30) 1444; PC64LE-NEXT: stfd 1, 16(30) 1445; PC64LE-NEXT: bl __gcc_qmul 1446; PC64LE-NEXT: nop 1447; PC64LE-NEXT: fmr 1, 31 1448; PC64LE-NEXT: xxlxor 2, 2, 2 1449; PC64LE-NEXT: li 5, 2 1450; PC64LE-NEXT: stfd 29, 40(30) 1451; PC64LE-NEXT: stfd 30, 32(30) 1452; PC64LE-NEXT: bl __powitf2 1453; PC64LE-NEXT: nop 1454; PC64LE-NEXT: xsrsp 0, 1 1455; PC64LE-NEXT: stfsx 0, 0, 29 1456; PC64LE-NEXT: stfd 1, -16(30) 1457; PC64LE-NEXT: stfd 2, -8(30) 1458; PC64LE-NEXT: addi 1, 1, 80 1459; PC64LE-NEXT: ld 0, 16(1) 1460; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1461; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1462; PC64LE-NEXT: ld 30, -40(1) # 8-byte Folded Reload 1463; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1464; PC64LE-NEXT: ld 29, -48(1) # 8-byte Folded Reload 1465; PC64LE-NEXT: mtlr 0 1466; PC64LE-NEXT: blr 1467; 1468; PC64LE9-LABEL: test_constrained_libcall_multichain: 1469; PC64LE9: # %bb.0: 1470; PC64LE9-NEXT: mflr 0 1471; PC64LE9-NEXT: std 29, -48(1) # 8-byte Folded Spill 1472; PC64LE9-NEXT: std 30, -40(1) # 8-byte Folded Spill 1473; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1474; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1475; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1476; PC64LE9-NEXT: std 0, 16(1) 1477; PC64LE9-NEXT: stdu 1, -80(1) 1478; PC64LE9-NEXT: lfs 31, 0(3) 1479; PC64LE9-NEXT: mr 29, 3 1480; PC64LE9-NEXT: li 3, 0 1481; PC64LE9-NEXT: xxlxor 2, 2, 2 1482; PC64LE9-NEXT: xxlxor 4, 4, 4 1483; PC64LE9-NEXT: mr 30, 4 1484; PC64LE9-NEXT: std 3, 8(4) 1485; PC64LE9-NEXT: fmr 1, 31 1486; PC64LE9-NEXT: fmr 3, 31 1487; PC64LE9-NEXT: stfd 31, 0(4) 1488; PC64LE9-NEXT: bl __gcc_qadd 1489; PC64LE9-NEXT: nop 1490; PC64LE9-NEXT: fmr 3, 1 1491; PC64LE9-NEXT: fmr 4, 2 1492; PC64LE9-NEXT: fmr 30, 1 1493; PC64LE9-NEXT: fmr 29, 2 1494; PC64LE9-NEXT: stfd 2, 24(30) 1495; PC64LE9-NEXT: stfd 1, 16(30) 1496; PC64LE9-NEXT: bl __gcc_qmul 1497; PC64LE9-NEXT: nop 1498; PC64LE9-NEXT: fmr 1, 31 1499; PC64LE9-NEXT: xxlxor 2, 2, 2 1500; PC64LE9-NEXT: li 5, 2 1501; PC64LE9-NEXT: stfd 29, 40(30) 1502; PC64LE9-NEXT: stfd 30, 32(30) 1503; PC64LE9-NEXT: bl __powitf2 1504; PC64LE9-NEXT: nop 1505; PC64LE9-NEXT: xsrsp 0, 1 1506; PC64LE9-NEXT: stfs 0, 0(29) 1507; PC64LE9-NEXT: stfd 1, -16(30) 1508; PC64LE9-NEXT: stfd 2, -8(30) 1509; PC64LE9-NEXT: addi 1, 1, 80 1510; PC64LE9-NEXT: ld 0, 16(1) 1511; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1512; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1513; PC64LE9-NEXT: ld 30, -40(1) # 8-byte Folded Reload 1514; PC64LE9-NEXT: ld 29, -48(1) # 8-byte Folded Reload 1515; PC64LE9-NEXT: mtlr 0 1516; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1517; PC64LE9-NEXT: blr 1518; 1519; PC64-LABEL: test_constrained_libcall_multichain: 1520; PC64: # %bb.0: 1521; PC64-NEXT: mflr 0 1522; PC64-NEXT: std 0, 16(1) 1523; PC64-NEXT: stdu 1, -176(1) 1524; PC64-NEXT: std 29, 120(1) # 8-byte Folded Spill 1525; PC64-NEXT: mr 29, 3 1526; PC64-NEXT: li 3, 0 1527; PC64-NEXT: stfd 31, 168(1) # 8-byte Folded Spill 1528; PC64-NEXT: std 30, 128(1) # 8-byte Folded Spill 1529; PC64-NEXT: mr 30, 4 1530; PC64-NEXT: lfs 31, 0(29) 1531; PC64-NEXT: std 3, 8(4) 1532; PC64-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1533; PC64-NEXT: stfd 30, 160(1) # 8-byte Folded Spill 1534; PC64-NEXT: lfs 30, .LCPI32_0@toc@l(3) 1535; PC64-NEXT: fmr 1, 31 1536; PC64-NEXT: fmr 3, 31 1537; PC64-NEXT: stfd 28, 144(1) # 8-byte Folded Spill 1538; PC64-NEXT: fmr 2, 30 1539; PC64-NEXT: fmr 4, 30 1540; PC64-NEXT: stfd 29, 152(1) # 8-byte Folded Spill 1541; PC64-NEXT: stfd 31, 0(4) 1542; PC64-NEXT: bl __gcc_qadd 1543; PC64-NEXT: nop 1544; PC64-NEXT: fmr 3, 1 1545; PC64-NEXT: fmr 4, 2 1546; PC64-NEXT: fmr 29, 1 1547; PC64-NEXT: fmr 28, 2 1548; PC64-NEXT: stfd 2, 24(30) 1549; PC64-NEXT: stfd 1, 16(30) 1550; PC64-NEXT: bl __gcc_qmul 1551; PC64-NEXT: nop 1552; PC64-NEXT: fmr 1, 31 1553; PC64-NEXT: fmr 2, 30 1554; PC64-NEXT: li 5, 2 1555; PC64-NEXT: stfd 28, 40(30) 1556; PC64-NEXT: stfd 29, 32(30) 1557; PC64-NEXT: bl __powitf2 1558; PC64-NEXT: nop 1559; PC64-NEXT: frsp 0, 1 1560; PC64-NEXT: stfs 0, 0(29) 1561; PC64-NEXT: ld 29, 120(1) # 8-byte Folded Reload 1562; PC64-NEXT: stfd 1, -16(30) 1563; PC64-NEXT: stfd 2, -8(30) 1564; PC64-NEXT: ld 30, 128(1) # 8-byte Folded Reload 1565; PC64-NEXT: lfd 31, 168(1) # 8-byte Folded Reload 1566; PC64-NEXT: lfd 30, 160(1) # 8-byte Folded Reload 1567; PC64-NEXT: lfd 29, 152(1) # 8-byte Folded Reload 1568; PC64-NEXT: lfd 28, 144(1) # 8-byte Folded Reload 1569; PC64-NEXT: addi 1, 1, 176 1570; PC64-NEXT: ld 0, 16(1) 1571; PC64-NEXT: mtlr 0 1572; PC64-NEXT: blr 1573 %load = load float, float* %firstptr 1574 %first = call ppc_fp128 @llvm.experimental.constrained.fpext.f32.ppcf128( 1575 float %load, 1576 metadata !"fpexcept.strict") #1 1577 store ppc_fp128 %first, ppc_fp128* %result 1578 1579 ; For unconstrained FLOPs, these next two FP instructions would necessarily 1580 ; be executed in series with one another. 1581 %fadd = call ppc_fp128 @llvm.experimental.constrained.fadd.ppcf128( 1582 ppc_fp128 %first, 1583 ppc_fp128 %first, 1584 metadata !"round.dynamic", 1585 metadata !"fpexcept.strict") #1 1586 %stridx1 = getelementptr ppc_fp128, ppc_fp128* %result, i32 1 1587 store ppc_fp128 %fadd, ppc_fp128* %stridx1 1588 %fmul = call ppc_fp128 @llvm.experimental.constrained.fmul.ppcf128( 1589 ppc_fp128 %fadd, 1590 ppc_fp128 %fadd, 1591 metadata !"round.dynamic", 1592 metadata !"fpexcept.strict") #1 1593 %stridx2 = getelementptr ppc_fp128, ppc_fp128* %stridx1, i32 1 1594 store ppc_fp128 %fadd, ppc_fp128* %stridx2 1595 1596 ; For unconstrained FLOPs, these next two FP instructions could be reordered 1597 ; or even executed in parallel with respect to the previous two instructions. 1598 ; However, strict floating point rules would not allow this. 1599 %powi = call ppc_fp128 @llvm.experimental.constrained.powi.ppcf128( 1600 ppc_fp128 %first, 1601 i32 2, 1602 metadata !"round.dynamic", 1603 metadata !"fpexcept.strict") #1 1604 %tinypow = call float @llvm.experimental.constrained.fptrunc.ppcf128.f32( 1605 ppc_fp128 %powi, 1606 metadata !"round.dynamic", 1607 metadata !"fpexcept.strict") #1 1608 store float %tinypow, float* %firstptr 1609 %stridxn1 = getelementptr ppc_fp128, ppc_fp128* %result, i32 -1 1610 store ppc_fp128 %powi, ppc_fp128* %stridxn1 1611 ret void 1612} 1613 1614define ppc_fp128 @i32_to_ppcq(i32 signext %m) #0 { 1615; PC64LE-LABEL: i32_to_ppcq: 1616; PC64LE: # %bb.0: # %entry 1617; PC64LE-NEXT: mtfprwa 0, 3 1618; PC64LE-NEXT: xxlxor 2, 2, 2 1619; PC64LE-NEXT: xscvsxddp 1, 0 1620; PC64LE-NEXT: blr 1621; 1622; PC64LE9-LABEL: i32_to_ppcq: 1623; PC64LE9: # %bb.0: # %entry 1624; PC64LE9-NEXT: mtfprwa 0, 3 1625; PC64LE9-NEXT: xxlxor 2, 2, 2 1626; PC64LE9-NEXT: xscvsxddp 1, 0 1627; PC64LE9-NEXT: blr 1628; 1629; PC64-LABEL: i32_to_ppcq: 1630; PC64: # %bb.0: # %entry 1631; PC64-NEXT: std 3, -8(1) 1632; PC64-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1633; PC64-NEXT: lfd 0, -8(1) 1634; PC64-NEXT: lfs 2, .LCPI33_0@toc@l(3) 1635; PC64-NEXT: fcfid 1, 0 1636; PC64-NEXT: blr 1637entry: 1638 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1639 ret ppc_fp128 %conv 1640} 1641 1642define ppc_fp128 @i64_to_ppcq(i64 %m) #0 { 1643; PC64LE-LABEL: i64_to_ppcq: 1644; PC64LE: # %bb.0: # %entry 1645; PC64LE-NEXT: mflr 0 1646; PC64LE-NEXT: std 0, 16(1) 1647; PC64LE-NEXT: stdu 1, -32(1) 1648; PC64LE-NEXT: bl __floatditf 1649; PC64LE-NEXT: nop 1650; PC64LE-NEXT: addi 1, 1, 32 1651; PC64LE-NEXT: ld 0, 16(1) 1652; PC64LE-NEXT: mtlr 0 1653; PC64LE-NEXT: blr 1654; 1655; PC64LE9-LABEL: i64_to_ppcq: 1656; PC64LE9: # %bb.0: # %entry 1657; PC64LE9-NEXT: mflr 0 1658; PC64LE9-NEXT: std 0, 16(1) 1659; PC64LE9-NEXT: stdu 1, -32(1) 1660; PC64LE9-NEXT: bl __floatditf 1661; PC64LE9-NEXT: nop 1662; PC64LE9-NEXT: addi 1, 1, 32 1663; PC64LE9-NEXT: ld 0, 16(1) 1664; PC64LE9-NEXT: mtlr 0 1665; PC64LE9-NEXT: blr 1666; 1667; PC64-LABEL: i64_to_ppcq: 1668; PC64: # %bb.0: # %entry 1669; PC64-NEXT: mflr 0 1670; PC64-NEXT: std 0, 16(1) 1671; PC64-NEXT: stdu 1, -112(1) 1672; PC64-NEXT: bl __floatditf 1673; PC64-NEXT: nop 1674; PC64-NEXT: addi 1, 1, 112 1675; PC64-NEXT: ld 0, 16(1) 1676; PC64-NEXT: mtlr 0 1677; PC64-NEXT: blr 1678entry: 1679 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1680 ret ppc_fp128 %conv 1681} 1682 1683define ppc_fp128 @u32_to_ppcq(i32 zeroext %m) #0 { 1684; PC64LE-LABEL: u32_to_ppcq: 1685; PC64LE: # %bb.0: # %entry 1686; PC64LE-NEXT: mtfprwz 0, 3 1687; PC64LE-NEXT: xxlxor 2, 2, 2 1688; PC64LE-NEXT: xscvuxddp 1, 0 1689; PC64LE-NEXT: blr 1690; 1691; PC64LE9-LABEL: u32_to_ppcq: 1692; PC64LE9: # %bb.0: # %entry 1693; PC64LE9-NEXT: mtfprwz 0, 3 1694; PC64LE9-NEXT: xxlxor 2, 2, 2 1695; PC64LE9-NEXT: xscvuxddp 1, 0 1696; PC64LE9-NEXT: blr 1697; 1698; PC64-LABEL: u32_to_ppcq: 1699; PC64: # %bb.0: # %entry 1700; PC64-NEXT: lis 4, 17200 1701; PC64-NEXT: stw 3, -4(1) 1702; PC64-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1703; PC64-NEXT: stw 4, -8(1) 1704; PC64-NEXT: lfs 0, .LCPI35_0@toc@l(3) 1705; PC64-NEXT: addis 3, 2, .LCPI35_1@toc@ha 1706; PC64-NEXT: lfd 1, -8(1) 1707; PC64-NEXT: lfs 2, .LCPI35_1@toc@l(3) 1708; PC64-NEXT: fsub 1, 1, 0 1709; PC64-NEXT: blr 1710entry: 1711 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1712 ret ppc_fp128 %conv 1713} 1714 1715define ppc_fp128 @u64_to_ppcq(i64 %m) #0 { 1716; PC64LE-LABEL: u64_to_ppcq: 1717; PC64LE: # %bb.0: # %entry 1718; PC64LE-NEXT: mflr 0 1719; PC64LE-NEXT: std 30, -32(1) # 8-byte Folded Spill 1720; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1721; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1722; PC64LE-NEXT: std 0, 16(1) 1723; PC64LE-NEXT: stdu 1, -64(1) 1724; PC64LE-NEXT: mr 30, 3 1725; PC64LE-NEXT: bl __floatditf 1726; PC64LE-NEXT: nop 1727; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1728; PC64LE-NEXT: xxlxor 4, 4, 4 1729; PC64LE-NEXT: fmr 30, 1 1730; PC64LE-NEXT: fmr 31, 2 1731; PC64LE-NEXT: lfs 3, .LCPI36_0@toc@l(3) 1732; PC64LE-NEXT: bl __gcc_qadd 1733; PC64LE-NEXT: nop 1734; PC64LE-NEXT: cmpdi 30, 0 1735; PC64LE-NEXT: blt 0, .LBB36_2 1736; PC64LE-NEXT: # %bb.1: # %entry 1737; PC64LE-NEXT: fmr 1, 30 1738; PC64LE-NEXT: .LBB36_2: # %entry 1739; PC64LE-NEXT: blt 0, .LBB36_4 1740; PC64LE-NEXT: # %bb.3: # %entry 1741; PC64LE-NEXT: fmr 2, 31 1742; PC64LE-NEXT: .LBB36_4: # %entry 1743; PC64LE-NEXT: addi 1, 1, 64 1744; PC64LE-NEXT: ld 0, 16(1) 1745; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1746; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1747; PC64LE-NEXT: ld 30, -32(1) # 8-byte Folded Reload 1748; PC64LE-NEXT: mtlr 0 1749; PC64LE-NEXT: blr 1750; 1751; PC64LE9-LABEL: u64_to_ppcq: 1752; PC64LE9: # %bb.0: # %entry 1753; PC64LE9-NEXT: mflr 0 1754; PC64LE9-NEXT: std 30, -32(1) # 8-byte Folded Spill 1755; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1756; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1757; PC64LE9-NEXT: std 0, 16(1) 1758; PC64LE9-NEXT: stdu 1, -64(1) 1759; PC64LE9-NEXT: mr 30, 3 1760; PC64LE9-NEXT: bl __floatditf 1761; PC64LE9-NEXT: nop 1762; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1763; PC64LE9-NEXT: xxlxor 4, 4, 4 1764; PC64LE9-NEXT: fmr 30, 1 1765; PC64LE9-NEXT: fmr 31, 2 1766; PC64LE9-NEXT: lfs 3, .LCPI36_0@toc@l(3) 1767; PC64LE9-NEXT: bl __gcc_qadd 1768; PC64LE9-NEXT: nop 1769; PC64LE9-NEXT: cmpdi 30, 0 1770; PC64LE9-NEXT: blt 0, .LBB36_2 1771; PC64LE9-NEXT: # %bb.1: # %entry 1772; PC64LE9-NEXT: fmr 1, 30 1773; PC64LE9-NEXT: .LBB36_2: # %entry 1774; PC64LE9-NEXT: blt 0, .LBB36_4 1775; PC64LE9-NEXT: # %bb.3: # %entry 1776; PC64LE9-NEXT: fmr 2, 31 1777; PC64LE9-NEXT: .LBB36_4: # %entry 1778; PC64LE9-NEXT: addi 1, 1, 64 1779; PC64LE9-NEXT: ld 0, 16(1) 1780; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1781; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1782; PC64LE9-NEXT: ld 30, -32(1) # 8-byte Folded Reload 1783; PC64LE9-NEXT: mtlr 0 1784; PC64LE9-NEXT: blr 1785; 1786; PC64-LABEL: u64_to_ppcq: 1787; PC64: # %bb.0: # %entry 1788; PC64-NEXT: mflr 0 1789; PC64-NEXT: std 0, 16(1) 1790; PC64-NEXT: stdu 1, -144(1) 1791; PC64-NEXT: std 30, 112(1) # 8-byte Folded Spill 1792; PC64-NEXT: stfd 30, 128(1) # 8-byte Folded Spill 1793; PC64-NEXT: mr 30, 3 1794; PC64-NEXT: stfd 31, 136(1) # 8-byte Folded Spill 1795; PC64-NEXT: bl __floatditf 1796; PC64-NEXT: nop 1797; PC64-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1798; PC64-NEXT: fmr 31, 2 1799; PC64-NEXT: lfs 3, .LCPI36_0@toc@l(3) 1800; PC64-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1801; PC64-NEXT: fmr 30, 1 1802; PC64-NEXT: lfs 4, .LCPI36_1@toc@l(3) 1803; PC64-NEXT: bl __gcc_qadd 1804; PC64-NEXT: nop 1805; PC64-NEXT: cmpdi 30, 0 1806; PC64-NEXT: blt 0, .LBB36_2 1807; PC64-NEXT: # %bb.1: # %entry 1808; PC64-NEXT: fmr 1, 30 1809; PC64-NEXT: .LBB36_2: # %entry 1810; PC64-NEXT: blt 0, .LBB36_4 1811; PC64-NEXT: # %bb.3: # %entry 1812; PC64-NEXT: fmr 2, 31 1813; PC64-NEXT: .LBB36_4: # %entry 1814; PC64-NEXT: lfd 31, 136(1) # 8-byte Folded Reload 1815; PC64-NEXT: ld 30, 112(1) # 8-byte Folded Reload 1816; PC64-NEXT: lfd 30, 128(1) # 8-byte Folded Reload 1817; PC64-NEXT: addi 1, 1, 144 1818; PC64-NEXT: ld 0, 16(1) 1819; PC64-NEXT: mtlr 0 1820; PC64-NEXT: blr 1821entry: 1822 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1823 ret ppc_fp128 %conv 1824} 1825 1826define ppc_fp128 @i128_to_ppcq(i128 %m) #0 { 1827; PC64LE-LABEL: i128_to_ppcq: 1828; PC64LE: # %bb.0: # %entry 1829; PC64LE-NEXT: mflr 0 1830; PC64LE-NEXT: std 0, 16(1) 1831; PC64LE-NEXT: stdu 1, -32(1) 1832; PC64LE-NEXT: bl __floattitf 1833; PC64LE-NEXT: nop 1834; PC64LE-NEXT: addi 1, 1, 32 1835; PC64LE-NEXT: ld 0, 16(1) 1836; PC64LE-NEXT: mtlr 0 1837; PC64LE-NEXT: blr 1838; 1839; PC64LE9-LABEL: i128_to_ppcq: 1840; PC64LE9: # %bb.0: # %entry 1841; PC64LE9-NEXT: mflr 0 1842; PC64LE9-NEXT: std 0, 16(1) 1843; PC64LE9-NEXT: stdu 1, -32(1) 1844; PC64LE9-NEXT: bl __floattitf 1845; PC64LE9-NEXT: nop 1846; PC64LE9-NEXT: addi 1, 1, 32 1847; PC64LE9-NEXT: ld 0, 16(1) 1848; PC64LE9-NEXT: mtlr 0 1849; PC64LE9-NEXT: blr 1850; 1851; PC64-LABEL: i128_to_ppcq: 1852; PC64: # %bb.0: # %entry 1853; PC64-NEXT: mflr 0 1854; PC64-NEXT: std 0, 16(1) 1855; PC64-NEXT: stdu 1, -112(1) 1856; PC64-NEXT: bl __floattitf 1857; PC64-NEXT: nop 1858; PC64-NEXT: addi 1, 1, 112 1859; PC64-NEXT: ld 0, 16(1) 1860; PC64-NEXT: mtlr 0 1861; PC64-NEXT: blr 1862entry: 1863 %conv = tail call ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i128(i128 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1864 ret ppc_fp128 %conv 1865} 1866 1867define ppc_fp128 @u128_to_ppcq(i128 %m) #0 { 1868; PC64LE-LABEL: u128_to_ppcq: 1869; PC64LE: # %bb.0: # %entry 1870; PC64LE-NEXT: mflr 0 1871; PC64LE-NEXT: std 30, -32(1) # 8-byte Folded Spill 1872; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1873; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1874; PC64LE-NEXT: std 0, 16(1) 1875; PC64LE-NEXT: stdu 1, -64(1) 1876; PC64LE-NEXT: mr 30, 4 1877; PC64LE-NEXT: bl __floattitf 1878; PC64LE-NEXT: nop 1879; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha 1880; PC64LE-NEXT: xxlxor 4, 4, 4 1881; PC64LE-NEXT: fmr 30, 1 1882; PC64LE-NEXT: fmr 31, 2 1883; PC64LE-NEXT: lfd 3, .LCPI38_0@toc@l(3) 1884; PC64LE-NEXT: bl __gcc_qadd 1885; PC64LE-NEXT: nop 1886; PC64LE-NEXT: cmpdi 30, 0 1887; PC64LE-NEXT: blt 0, .LBB38_2 1888; PC64LE-NEXT: # %bb.1: # %entry 1889; PC64LE-NEXT: fmr 1, 30 1890; PC64LE-NEXT: .LBB38_2: # %entry 1891; PC64LE-NEXT: blt 0, .LBB38_4 1892; PC64LE-NEXT: # %bb.3: # %entry 1893; PC64LE-NEXT: fmr 2, 31 1894; PC64LE-NEXT: .LBB38_4: # %entry 1895; PC64LE-NEXT: addi 1, 1, 64 1896; PC64LE-NEXT: ld 0, 16(1) 1897; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1898; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1899; PC64LE-NEXT: ld 30, -32(1) # 8-byte Folded Reload 1900; PC64LE-NEXT: mtlr 0 1901; PC64LE-NEXT: blr 1902; 1903; PC64LE9-LABEL: u128_to_ppcq: 1904; PC64LE9: # %bb.0: # %entry 1905; PC64LE9-NEXT: mflr 0 1906; PC64LE9-NEXT: std 30, -32(1) # 8-byte Folded Spill 1907; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1908; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1909; PC64LE9-NEXT: std 0, 16(1) 1910; PC64LE9-NEXT: stdu 1, -64(1) 1911; PC64LE9-NEXT: mr 30, 4 1912; PC64LE9-NEXT: bl __floattitf 1913; PC64LE9-NEXT: nop 1914; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha 1915; PC64LE9-NEXT: xxlxor 4, 4, 4 1916; PC64LE9-NEXT: fmr 30, 1 1917; PC64LE9-NEXT: lfd 3, .LCPI38_0@toc@l(3) 1918; PC64LE9-NEXT: fmr 31, 2 1919; PC64LE9-NEXT: bl __gcc_qadd 1920; PC64LE9-NEXT: nop 1921; PC64LE9-NEXT: cmpdi 30, 0 1922; PC64LE9-NEXT: blt 0, .LBB38_2 1923; PC64LE9-NEXT: # %bb.1: # %entry 1924; PC64LE9-NEXT: fmr 1, 30 1925; PC64LE9-NEXT: .LBB38_2: # %entry 1926; PC64LE9-NEXT: blt 0, .LBB38_4 1927; PC64LE9-NEXT: # %bb.3: # %entry 1928; PC64LE9-NEXT: fmr 2, 31 1929; PC64LE9-NEXT: .LBB38_4: # %entry 1930; PC64LE9-NEXT: addi 1, 1, 64 1931; PC64LE9-NEXT: ld 0, 16(1) 1932; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1933; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1934; PC64LE9-NEXT: ld 30, -32(1) # 8-byte Folded Reload 1935; PC64LE9-NEXT: mtlr 0 1936; PC64LE9-NEXT: blr 1937; 1938; PC64-LABEL: u128_to_ppcq: 1939; PC64: # %bb.0: # %entry 1940; PC64-NEXT: mflr 0 1941; PC64-NEXT: std 0, 16(1) 1942; PC64-NEXT: stdu 1, -144(1) 1943; PC64-NEXT: std 30, 112(1) # 8-byte Folded Spill 1944; PC64-NEXT: stfd 30, 128(1) # 8-byte Folded Spill 1945; PC64-NEXT: mr 30, 3 1946; PC64-NEXT: stfd 31, 136(1) # 8-byte Folded Spill 1947; PC64-NEXT: bl __floattitf 1948; PC64-NEXT: nop 1949; PC64-NEXT: addis 3, 2, .LCPI38_0@toc@ha 1950; PC64-NEXT: fmr 31, 2 1951; PC64-NEXT: lfd 3, .LCPI38_0@toc@l(3) 1952; PC64-NEXT: addis 3, 2, .LCPI38_1@toc@ha 1953; PC64-NEXT: fmr 30, 1 1954; PC64-NEXT: lfs 4, .LCPI38_1@toc@l(3) 1955; PC64-NEXT: bl __gcc_qadd 1956; PC64-NEXT: nop 1957; PC64-NEXT: cmpdi 30, 0 1958; PC64-NEXT: blt 0, .LBB38_2 1959; PC64-NEXT: # %bb.1: # %entry 1960; PC64-NEXT: fmr 1, 30 1961; PC64-NEXT: .LBB38_2: # %entry 1962; PC64-NEXT: blt 0, .LBB38_4 1963; PC64-NEXT: # %bb.3: # %entry 1964; PC64-NEXT: fmr 2, 31 1965; PC64-NEXT: .LBB38_4: # %entry 1966; PC64-NEXT: lfd 31, 136(1) # 8-byte Folded Reload 1967; PC64-NEXT: ld 30, 112(1) # 8-byte Folded Reload 1968; PC64-NEXT: lfd 30, 128(1) # 8-byte Folded Reload 1969; PC64-NEXT: addi 1, 1, 144 1970; PC64-NEXT: ld 0, 16(1) 1971; PC64-NEXT: mtlr 0 1972; PC64-NEXT: blr 1973entry: 1974 %conv = tail call ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i128(i128 %m, metadata !"round.dynamic", metadata !"fpexcept.strict") #1 1975 ret ppc_fp128 %conv 1976} 1977 1978attributes #0 = { nounwind strictfp } 1979attributes #1 = { strictfp } 1980 1981declare ppc_fp128 @llvm.experimental.constrained.fadd.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 1982declare ppc_fp128 @llvm.experimental.constrained.ceil.ppcf128(ppc_fp128, metadata) 1983declare ppc_fp128 @llvm.experimental.constrained.cos.ppcf128(ppc_fp128, metadata, metadata) 1984declare ppc_fp128 @llvm.experimental.constrained.fdiv.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 1985declare ppc_fp128 @llvm.experimental.constrained.exp.ppcf128(ppc_fp128, metadata, metadata) 1986declare ppc_fp128 @llvm.experimental.constrained.exp2.ppcf128(ppc_fp128, metadata, metadata) 1987declare ppc_fp128 @llvm.experimental.constrained.floor.ppcf128(ppc_fp128, metadata) 1988declare ppc_fp128 @llvm.experimental.constrained.fma.ppcf128(ppc_fp128, ppc_fp128, ppc_fp128, metadata, metadata) 1989declare ppc_fp128 @llvm.experimental.constrained.fpext.f32.ppcf128(float, metadata) 1990declare ppc_fp128 @llvm.experimental.constrained.fpext.f64.ppcf128(double, metadata) 1991declare float @llvm.experimental.constrained.fptrunc.ppcf128.f32(ppc_fp128, metadata, metadata) 1992declare double @llvm.experimental.constrained.fptrunc.ppcf128.f64(ppc_fp128, metadata, metadata) 1993declare ppc_fp128 @llvm.experimental.constrained.log.ppcf128(ppc_fp128, metadata, metadata) 1994declare ppc_fp128 @llvm.experimental.constrained.log10.ppcf128(ppc_fp128, metadata, metadata) 1995declare ppc_fp128 @llvm.experimental.constrained.log2.ppcf128(ppc_fp128, metadata, metadata) 1996declare ppc_fp128 @llvm.experimental.constrained.maxnum.ppcf128(ppc_fp128, ppc_fp128, metadata) 1997declare ppc_fp128 @llvm.experimental.constrained.minnum.ppcf128(ppc_fp128, ppc_fp128, metadata) 1998declare ppc_fp128 @llvm.experimental.constrained.fmul.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 1999declare ppc_fp128 @llvm.experimental.constrained.nearbyint.ppcf128(ppc_fp128, metadata, metadata) 2000declare ppc_fp128 @llvm.experimental.constrained.pow.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 2001declare ppc_fp128 @llvm.experimental.constrained.powi.ppcf128(ppc_fp128, i32, metadata, metadata) 2002declare ppc_fp128 @llvm.experimental.constrained.frem.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 2003declare ppc_fp128 @llvm.experimental.constrained.rint.ppcf128(ppc_fp128, metadata, metadata) 2004declare ppc_fp128 @llvm.experimental.constrained.round.ppcf128(ppc_fp128, metadata) 2005declare ppc_fp128 @llvm.experimental.constrained.sin.ppcf128(ppc_fp128, metadata, metadata) 2006declare ppc_fp128 @llvm.experimental.constrained.sqrt.ppcf128(ppc_fp128, metadata, metadata) 2007declare ppc_fp128 @llvm.experimental.constrained.fsub.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata) 2008declare ppc_fp128 @llvm.experimental.constrained.trunc.ppcf128(ppc_fp128, metadata) 2009declare i64 @llvm.experimental.constrained.fptosi.i64.ppcf128(ppc_fp128, metadata) 2010declare i32 @llvm.experimental.constrained.fptosi.i32.ppcf128(ppc_fp128, metadata) 2011declare i64 @llvm.experimental.constrained.fptoui.i64.ppcf128(ppc_fp128, metadata) 2012declare i32 @llvm.experimental.constrained.fptoui.i32.ppcf128(ppc_fp128, metadata) 2013declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i32(i32, metadata, metadata) 2014declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i32(i32, metadata, metadata) 2015declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i64(i64, metadata, metadata) 2016declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i64(i64, metadata, metadata) 2017declare ppc_fp128 @llvm.experimental.constrained.sitofp.ppcf128.i128(i128, metadata, metadata) 2018declare ppc_fp128 @llvm.experimental.constrained.uitofp.ppcf128.i128(i128, metadata, metadata) 2019