1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -relocation-model=pic -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \ 3; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \ 4; RUN: | FileCheck %s 5; RUN: llc -relocation-model=pic -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \ 6; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \ 7; RUN: -enable-soft-fp128 | FileCheck %s -check-prefix=CHECK-P8 8 9@mem = global [5 x i64] [i64 56, i64 63, i64 3, i64 5, i64 6], align 8 10@umem = global [5 x i64] [i64 560, i64 100, i64 34, i64 2, i64 5], align 8 11@swMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 4 12@uwMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 4 13@uhwMem = local_unnamed_addr global [5 x i16] [i16 5, i16 2, i16 3, i16 4, i16 0], align 2 14@ubMem = local_unnamed_addr global [5 x i8] c"\05\02\03\04\00", align 1 15 16; Function Attrs: norecurse nounwind 17define void @sdwConv2qp(fp128* nocapture %a, i64 %b) { 18; CHECK-LABEL: sdwConv2qp: 19; CHECK: # %bb.0: # %entry 20; CHECK-NEXT: mtvsrd v2, r4 21; CHECK-NEXT: xscvsdqp v2, v2 22; CHECK-NEXT: stxv v2, 0(r3) 23; CHECK-NEXT: blr 24; 25; CHECK-P8-LABEL: sdwConv2qp: 26; CHECK-P8: # %bb.0: # %entry 27; CHECK-P8-NEXT: mflr r0 28; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 29; CHECK-P8-NEXT: .cfi_offset lr, 16 30; CHECK-P8-NEXT: .cfi_offset r30, -16 31; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 32; CHECK-P8-NEXT: std r0, 16(r1) 33; CHECK-P8-NEXT: stdu r1, -48(r1) 34; CHECK-P8-NEXT: mr r30, r3 35; CHECK-P8-NEXT: mr r3, r4 36; CHECK-P8-NEXT: bl __floatdikf 37; CHECK-P8-NEXT: nop 38; CHECK-P8-NEXT: stvx v2, 0, r30 39; CHECK-P8-NEXT: addi r1, r1, 48 40; CHECK-P8-NEXT: ld r0, 16(r1) 41; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 42; CHECK-P8-NEXT: mtlr r0 43; CHECK-P8-NEXT: blr 44entry: 45 %conv = sitofp i64 %b to fp128 46 store fp128 %conv, fp128* %a, align 16 47 ret void 48 49} 50 51; Function Attrs: norecurse nounwind 52define void @sdwConv2qp_01(fp128* nocapture %a, i128 %b) { 53; CHECK-LABEL: sdwConv2qp_01: 54; CHECK: # %bb.0: # %entry 55; CHECK-NEXT: mflr r0 56; CHECK-NEXT: .cfi_def_cfa_offset 48 57; CHECK-NEXT: .cfi_offset lr, 16 58; CHECK-NEXT: .cfi_offset r30, -16 59; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill 60; CHECK-NEXT: std r0, 16(r1) 61; CHECK-NEXT: stdu r1, -48(r1) 62; CHECK-NEXT: mr r30, r3 63; CHECK-NEXT: mr r3, r4 64; CHECK-NEXT: mr r4, r5 65; CHECK-NEXT: bl __floattikf 66; CHECK-NEXT: nop 67; CHECK-NEXT: stxv v2, 0(r30) 68; CHECK-NEXT: addi r1, r1, 48 69; CHECK-NEXT: ld r0, 16(r1) 70; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 71; CHECK-NEXT: mtlr r0 72; CHECK-NEXT: blr 73; 74; CHECK-P8-LABEL: sdwConv2qp_01: 75; CHECK-P8: # %bb.0: # %entry 76; CHECK-P8-NEXT: mflr r0 77; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 78; CHECK-P8-NEXT: .cfi_offset lr, 16 79; CHECK-P8-NEXT: .cfi_offset r30, -16 80; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 81; CHECK-P8-NEXT: std r0, 16(r1) 82; CHECK-P8-NEXT: stdu r1, -48(r1) 83; CHECK-P8-NEXT: mr r30, r3 84; CHECK-P8-NEXT: mr r3, r4 85; CHECK-P8-NEXT: mr r4, r5 86; CHECK-P8-NEXT: bl __floattikf 87; CHECK-P8-NEXT: nop 88; CHECK-P8-NEXT: stvx v2, 0, r30 89; CHECK-P8-NEXT: addi r1, r1, 48 90; CHECK-P8-NEXT: ld r0, 16(r1) 91; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 92; CHECK-P8-NEXT: mtlr r0 93; CHECK-P8-NEXT: blr 94entry: 95 %conv = sitofp i128 %b to fp128 96 store fp128 %conv, fp128* %a, align 16 97 ret void 98 99} 100 101; Function Attrs: norecurse nounwind 102define void @sdwConv2qp_02(fp128* nocapture %a) { 103; CHECK-LABEL: sdwConv2qp_02: 104; CHECK: # %bb.0: # %entry 105; CHECK-NEXT: addis r4, r2, .LC0@toc@ha 106; CHECK-NEXT: ld r4, .LC0@toc@l(r4) 107; CHECK-NEXT: lxsd v2, 16(r4) 108; CHECK-NEXT: xscvsdqp v2, v2 109; CHECK-NEXT: stxv v2, 0(r3) 110; CHECK-NEXT: blr 111; 112; CHECK-P8-LABEL: sdwConv2qp_02: 113; CHECK-P8: # %bb.0: # %entry 114; CHECK-P8-NEXT: mflr r0 115; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 116; CHECK-P8-NEXT: .cfi_offset lr, 16 117; CHECK-P8-NEXT: .cfi_offset r30, -16 118; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 119; CHECK-P8-NEXT: std r0, 16(r1) 120; CHECK-P8-NEXT: stdu r1, -48(r1) 121; CHECK-P8-NEXT: addis r4, r2, .LC0@toc@ha 122; CHECK-P8-NEXT: mr r30, r3 123; CHECK-P8-NEXT: ld r4, .LC0@toc@l(r4) 124; CHECK-P8-NEXT: ld r4, 16(r4) 125; CHECK-P8-NEXT: mr r3, r4 126; CHECK-P8-NEXT: bl __floatdikf 127; CHECK-P8-NEXT: nop 128; CHECK-P8-NEXT: stvx v2, 0, r30 129; CHECK-P8-NEXT: addi r1, r1, 48 130; CHECK-P8-NEXT: ld r0, 16(r1) 131; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 132; CHECK-P8-NEXT: mtlr r0 133; CHECK-P8-NEXT: blr 134entry: 135 %0 = load i64, i64* getelementptr inbounds 136 ([5 x i64], [5 x i64]* @mem, i64 0, i64 2), align 8 137 %conv = sitofp i64 %0 to fp128 138 store fp128 %conv, fp128* %a, align 16 139 ret void 140 141} 142 143; Function Attrs: norecurse nounwind 144define void @sdwConv2qp_03(fp128* nocapture %a, i64* nocapture readonly %b) { 145; CHECK-LABEL: sdwConv2qp_03: 146; CHECK: # %bb.0: # %entry 147; CHECK-NEXT: lxsd v2, 0(r4) 148; CHECK-NEXT: xscvsdqp v2, v2 149; CHECK-NEXT: stxv v2, 0(r3) 150; CHECK-NEXT: blr 151; 152; CHECK-P8-LABEL: sdwConv2qp_03: 153; CHECK-P8: # %bb.0: # %entry 154; CHECK-P8-NEXT: mflr r0 155; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 156; CHECK-P8-NEXT: .cfi_offset lr, 16 157; CHECK-P8-NEXT: .cfi_offset r30, -16 158; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 159; CHECK-P8-NEXT: std r0, 16(r1) 160; CHECK-P8-NEXT: stdu r1, -48(r1) 161; CHECK-P8-NEXT: ld r4, 0(r4) 162; CHECK-P8-NEXT: mr r30, r3 163; CHECK-P8-NEXT: mr r3, r4 164; CHECK-P8-NEXT: bl __floatdikf 165; CHECK-P8-NEXT: nop 166; CHECK-P8-NEXT: stvx v2, 0, r30 167; CHECK-P8-NEXT: addi r1, r1, 48 168; CHECK-P8-NEXT: ld r0, 16(r1) 169; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 170; CHECK-P8-NEXT: mtlr r0 171; CHECK-P8-NEXT: blr 172entry: 173 %0 = load i64, i64* %b, align 8 174 %conv = sitofp i64 %0 to fp128 175 store fp128 %conv, fp128* %a, align 16 176 ret void 177 178} 179 180; Function Attrs: norecurse nounwind 181define void @sdwConv2qp_04(fp128* nocapture %a, i1 %b) { 182; CHECK-LABEL: sdwConv2qp_04: 183; CHECK: # %bb.0: # %entry 184; CHECK-NEXT: andi. r4, r4, 1 185; CHECK-NEXT: li r4, 0 186; CHECK-NEXT: li r5, -1 187; CHECK-NEXT: iselgt r4, r5, r4 188; CHECK-NEXT: mtvsrwa v2, r4 189; CHECK-NEXT: xscvsdqp v2, v2 190; CHECK-NEXT: stxv v2, 0(r3) 191; CHECK-NEXT: blr 192; 193; CHECK-P8-LABEL: sdwConv2qp_04: 194; CHECK-P8: # %bb.0: # %entry 195; CHECK-P8-NEXT: mflr r0 196; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 197; CHECK-P8-NEXT: .cfi_offset lr, 16 198; CHECK-P8-NEXT: .cfi_offset r30, -16 199; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 200; CHECK-P8-NEXT: std r0, 16(r1) 201; CHECK-P8-NEXT: stdu r1, -48(r1) 202; CHECK-P8-NEXT: mr r30, r3 203; CHECK-P8-NEXT: andi. r3, r4, 1 204; CHECK-P8-NEXT: li r4, -1 205; CHECK-P8-NEXT: li r3, 0 206; CHECK-P8-NEXT: iselgt r3, r4, r3 207; CHECK-P8-NEXT: bl __floatsikf 208; CHECK-P8-NEXT: nop 209; CHECK-P8-NEXT: stvx v2, 0, r30 210; CHECK-P8-NEXT: addi r1, r1, 48 211; CHECK-P8-NEXT: ld r0, 16(r1) 212; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 213; CHECK-P8-NEXT: mtlr r0 214; CHECK-P8-NEXT: blr 215entry: 216 %conv = sitofp i1 %b to fp128 217 store fp128 %conv, fp128* %a, align 16 218 ret void 219 220} 221 222; Function Attrs: norecurse nounwind 223define void @udwConv2qp(fp128* nocapture %a, i64 %b) { 224; CHECK-LABEL: udwConv2qp: 225; CHECK: # %bb.0: # %entry 226; CHECK-NEXT: mtvsrd v2, r4 227; CHECK-NEXT: xscvudqp v2, v2 228; CHECK-NEXT: stxv v2, 0(r3) 229; CHECK-NEXT: blr 230; 231; CHECK-P8-LABEL: udwConv2qp: 232; CHECK-P8: # %bb.0: # %entry 233; CHECK-P8-NEXT: mflr r0 234; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 235; CHECK-P8-NEXT: .cfi_offset lr, 16 236; CHECK-P8-NEXT: .cfi_offset r30, -16 237; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 238; CHECK-P8-NEXT: std r0, 16(r1) 239; CHECK-P8-NEXT: stdu r1, -48(r1) 240; CHECK-P8-NEXT: mr r30, r3 241; CHECK-P8-NEXT: mr r3, r4 242; CHECK-P8-NEXT: bl __floatundikf 243; CHECK-P8-NEXT: nop 244; CHECK-P8-NEXT: stvx v2, 0, r30 245; CHECK-P8-NEXT: addi r1, r1, 48 246; CHECK-P8-NEXT: ld r0, 16(r1) 247; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 248; CHECK-P8-NEXT: mtlr r0 249; CHECK-P8-NEXT: blr 250entry: 251 %conv = uitofp i64 %b to fp128 252 store fp128 %conv, fp128* %a, align 16 253 ret void 254 255} 256 257; Function Attrs: norecurse nounwind 258define void @udwConv2qp_01(fp128* nocapture %a, i128 %b) { 259; CHECK-LABEL: udwConv2qp_01: 260; CHECK: # %bb.0: # %entry 261; CHECK-NEXT: mflr r0 262; CHECK-NEXT: .cfi_def_cfa_offset 48 263; CHECK-NEXT: .cfi_offset lr, 16 264; CHECK-NEXT: .cfi_offset r30, -16 265; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill 266; CHECK-NEXT: std r0, 16(r1) 267; CHECK-NEXT: stdu r1, -48(r1) 268; CHECK-NEXT: mr r30, r3 269; CHECK-NEXT: mr r3, r4 270; CHECK-NEXT: mr r4, r5 271; CHECK-NEXT: bl __floatuntikf 272; CHECK-NEXT: nop 273; CHECK-NEXT: stxv v2, 0(r30) 274; CHECK-NEXT: addi r1, r1, 48 275; CHECK-NEXT: ld r0, 16(r1) 276; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 277; CHECK-NEXT: mtlr r0 278; CHECK-NEXT: blr 279; 280; CHECK-P8-LABEL: udwConv2qp_01: 281; CHECK-P8: # %bb.0: # %entry 282; CHECK-P8-NEXT: mflr r0 283; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 284; CHECK-P8-NEXT: .cfi_offset lr, 16 285; CHECK-P8-NEXT: .cfi_offset r30, -16 286; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 287; CHECK-P8-NEXT: std r0, 16(r1) 288; CHECK-P8-NEXT: stdu r1, -48(r1) 289; CHECK-P8-NEXT: mr r30, r3 290; CHECK-P8-NEXT: mr r3, r4 291; CHECK-P8-NEXT: mr r4, r5 292; CHECK-P8-NEXT: bl __floatuntikf 293; CHECK-P8-NEXT: nop 294; CHECK-P8-NEXT: stvx v2, 0, r30 295; CHECK-P8-NEXT: addi r1, r1, 48 296; CHECK-P8-NEXT: ld r0, 16(r1) 297; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 298; CHECK-P8-NEXT: mtlr r0 299; CHECK-P8-NEXT: blr 300entry: 301 %conv = uitofp i128 %b to fp128 302 store fp128 %conv, fp128* %a, align 16 303 ret void 304 305} 306 307; Function Attrs: norecurse nounwind 308define void @udwConv2qp_02(fp128* nocapture %a) { 309; CHECK-LABEL: udwConv2qp_02: 310; CHECK: # %bb.0: # %entry 311; CHECK-NEXT: addis r4, r2, .LC1@toc@ha 312; CHECK-NEXT: ld r4, .LC1@toc@l(r4) 313; CHECK-NEXT: lxsd v2, 32(r4) 314; CHECK-NEXT: xscvudqp v2, v2 315; CHECK-NEXT: stxv v2, 0(r3) 316; CHECK-NEXT: blr 317; 318; CHECK-P8-LABEL: udwConv2qp_02: 319; CHECK-P8: # %bb.0: # %entry 320; CHECK-P8-NEXT: mflr r0 321; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 322; CHECK-P8-NEXT: .cfi_offset lr, 16 323; CHECK-P8-NEXT: .cfi_offset r30, -16 324; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 325; CHECK-P8-NEXT: std r0, 16(r1) 326; CHECK-P8-NEXT: stdu r1, -48(r1) 327; CHECK-P8-NEXT: addis r4, r2, .LC1@toc@ha 328; CHECK-P8-NEXT: mr r30, r3 329; CHECK-P8-NEXT: ld r4, .LC1@toc@l(r4) 330; CHECK-P8-NEXT: ld r4, 32(r4) 331; CHECK-P8-NEXT: mr r3, r4 332; CHECK-P8-NEXT: bl __floatundikf 333; CHECK-P8-NEXT: nop 334; CHECK-P8-NEXT: stvx v2, 0, r30 335; CHECK-P8-NEXT: addi r1, r1, 48 336; CHECK-P8-NEXT: ld r0, 16(r1) 337; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 338; CHECK-P8-NEXT: mtlr r0 339; CHECK-P8-NEXT: blr 340entry: 341 %0 = load i64, i64* getelementptr inbounds 342 ([5 x i64], [5 x i64]* @umem, i64 0, i64 4), align 8 343 %conv = uitofp i64 %0 to fp128 344 store fp128 %conv, fp128* %a, align 16 345 ret void 346 347} 348 349; Function Attrs: norecurse nounwind 350define void @udwConv2qp_03(fp128* nocapture %a, i64* nocapture readonly %b) { 351; CHECK-LABEL: udwConv2qp_03: 352; CHECK: # %bb.0: # %entry 353; CHECK-NEXT: lxsd v2, 0(r4) 354; CHECK-NEXT: xscvudqp v2, v2 355; CHECK-NEXT: stxv v2, 0(r3) 356; CHECK-NEXT: blr 357; 358; CHECK-P8-LABEL: udwConv2qp_03: 359; CHECK-P8: # %bb.0: # %entry 360; CHECK-P8-NEXT: mflr r0 361; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 362; CHECK-P8-NEXT: .cfi_offset lr, 16 363; CHECK-P8-NEXT: .cfi_offset r30, -16 364; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 365; CHECK-P8-NEXT: std r0, 16(r1) 366; CHECK-P8-NEXT: stdu r1, -48(r1) 367; CHECK-P8-NEXT: ld r4, 0(r4) 368; CHECK-P8-NEXT: mr r30, r3 369; CHECK-P8-NEXT: mr r3, r4 370; CHECK-P8-NEXT: bl __floatundikf 371; CHECK-P8-NEXT: nop 372; CHECK-P8-NEXT: stvx v2, 0, r30 373; CHECK-P8-NEXT: addi r1, r1, 48 374; CHECK-P8-NEXT: ld r0, 16(r1) 375; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 376; CHECK-P8-NEXT: mtlr r0 377; CHECK-P8-NEXT: blr 378entry: 379 %0 = load i64, i64* %b, align 8 380 %conv = uitofp i64 %0 to fp128 381 store fp128 %conv, fp128* %a, align 16 382 ret void 383 384} 385 386; Function Attrs: norecurse nounwind 387define void @udwConv2qp_04(fp128* nocapture %a, i1 %b) { 388; CHECK-LABEL: udwConv2qp_04: 389; CHECK: # %bb.0: # %entry 390; CHECK-NEXT: clrlwi r4, r4, 31 391; CHECK-NEXT: mtvsrwa v2, r4 392; CHECK-NEXT: xscvsdqp v2, v2 393; CHECK-NEXT: stxv v2, 0(r3) 394; CHECK-NEXT: blr 395; 396; CHECK-P8-LABEL: udwConv2qp_04: 397; CHECK-P8: # %bb.0: # %entry 398; CHECK-P8-NEXT: mflr r0 399; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 400; CHECK-P8-NEXT: .cfi_offset lr, 16 401; CHECK-P8-NEXT: .cfi_offset r30, -16 402; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 403; CHECK-P8-NEXT: std r0, 16(r1) 404; CHECK-P8-NEXT: stdu r1, -48(r1) 405; CHECK-P8-NEXT: mr r30, r3 406; CHECK-P8-NEXT: clrldi r3, r4, 63 407; CHECK-P8-NEXT: bl __floatsikf 408; CHECK-P8-NEXT: nop 409; CHECK-P8-NEXT: stvx v2, 0, r30 410; CHECK-P8-NEXT: addi r1, r1, 48 411; CHECK-P8-NEXT: ld r0, 16(r1) 412; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 413; CHECK-P8-NEXT: mtlr r0 414; CHECK-P8-NEXT: blr 415entry: 416 %conv = uitofp i1 %b to fp128 417 store fp128 %conv, fp128* %a, align 16 418 ret void 419 420} 421 422; Function Attrs: norecurse nounwind 423define fp128* @sdwConv2qp_testXForm(fp128* returned %sink, 424; CHECK-LABEL: sdwConv2qp_testXForm: 425; CHECK: # %bb.0: # %entry 426; CHECK-NEXT: lis r5, 1 427; CHECK-NEXT: ori r5, r5, 7797 428; CHECK-NEXT: lxsdx v2, r4, r5 429; CHECK-NEXT: xscvsdqp v2, v2 430; CHECK-NEXT: stxv v2, 0(r3) 431; CHECK-NEXT: blr 432; 433; CHECK-P8-LABEL: sdwConv2qp_testXForm: 434; CHECK-P8: # %bb.0: # %entry 435; CHECK-P8-NEXT: mflr r0 436; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 437; CHECK-P8-NEXT: .cfi_offset lr, 16 438; CHECK-P8-NEXT: .cfi_offset r30, -16 439; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 440; CHECK-P8-NEXT: std r0, 16(r1) 441; CHECK-P8-NEXT: stdu r1, -48(r1) 442; CHECK-P8-NEXT: lis r5, 1 443; CHECK-P8-NEXT: mr r30, r3 444; CHECK-P8-NEXT: ori r5, r5, 7797 445; CHECK-P8-NEXT: ldx r4, r4, r5 446; CHECK-P8-NEXT: mr r3, r4 447; CHECK-P8-NEXT: bl __floatdikf 448; CHECK-P8-NEXT: nop 449; CHECK-P8-NEXT: mr r3, r30 450; CHECK-P8-NEXT: stvx v2, 0, r30 451; CHECK-P8-NEXT: addi r1, r1, 48 452; CHECK-P8-NEXT: ld r0, 16(r1) 453; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 454; CHECK-P8-NEXT: mtlr r0 455; CHECK-P8-NEXT: blr 456 i8* nocapture readonly %a) { 457entry: 458 %add.ptr = getelementptr inbounds i8, i8* %a, i64 73333 459 %0 = bitcast i8* %add.ptr to i64* 460 %1 = load i64, i64* %0, align 8 461 %conv = sitofp i64 %1 to fp128 462 store fp128 %conv, fp128* %sink, align 16 463 ret fp128* %sink 464 465} 466 467; Function Attrs: norecurse nounwind 468define fp128* @udwConv2qp_testXForm(fp128* returned %sink, 469; CHECK-LABEL: udwConv2qp_testXForm: 470; CHECK: # %bb.0: # %entry 471; CHECK-NEXT: lis r5, 1 472; CHECK-NEXT: ori r5, r5, 7797 473; CHECK-NEXT: lxsdx v2, r4, r5 474; CHECK-NEXT: xscvudqp v2, v2 475; CHECK-NEXT: stxv v2, 0(r3) 476; CHECK-NEXT: blr 477; 478; CHECK-P8-LABEL: udwConv2qp_testXForm: 479; CHECK-P8: # %bb.0: # %entry 480; CHECK-P8-NEXT: mflr r0 481; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 482; CHECK-P8-NEXT: .cfi_offset lr, 16 483; CHECK-P8-NEXT: .cfi_offset r30, -16 484; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 485; CHECK-P8-NEXT: std r0, 16(r1) 486; CHECK-P8-NEXT: stdu r1, -48(r1) 487; CHECK-P8-NEXT: lis r5, 1 488; CHECK-P8-NEXT: mr r30, r3 489; CHECK-P8-NEXT: ori r5, r5, 7797 490; CHECK-P8-NEXT: ldx r4, r4, r5 491; CHECK-P8-NEXT: mr r3, r4 492; CHECK-P8-NEXT: bl __floatundikf 493; CHECK-P8-NEXT: nop 494; CHECK-P8-NEXT: mr r3, r30 495; CHECK-P8-NEXT: stvx v2, 0, r30 496; CHECK-P8-NEXT: addi r1, r1, 48 497; CHECK-P8-NEXT: ld r0, 16(r1) 498; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 499; CHECK-P8-NEXT: mtlr r0 500; CHECK-P8-NEXT: blr 501 i8* nocapture readonly %a) { 502entry: 503 %add.ptr = getelementptr inbounds i8, i8* %a, i64 73333 504 %0 = bitcast i8* %add.ptr to i64* 505 %1 = load i64, i64* %0, align 8 506 %conv = uitofp i64 %1 to fp128 507 store fp128 %conv, fp128* %sink, align 16 508 ret fp128* %sink 509 510} 511 512; Function Attrs: norecurse nounwind 513define void @swConv2qp(fp128* nocapture %a, i32 signext %b) { 514; CHECK-LABEL: swConv2qp: 515; CHECK: # %bb.0: # %entry 516; CHECK-NEXT: mtvsrwa v2, r4 517; CHECK-NEXT: xscvsdqp v2, v2 518; CHECK-NEXT: stxv v2, 0(r3) 519; CHECK-NEXT: blr 520; 521; CHECK-P8-LABEL: swConv2qp: 522; CHECK-P8: # %bb.0: # %entry 523; CHECK-P8-NEXT: mflr r0 524; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 525; CHECK-P8-NEXT: .cfi_offset lr, 16 526; CHECK-P8-NEXT: .cfi_offset r30, -16 527; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 528; CHECK-P8-NEXT: std r0, 16(r1) 529; CHECK-P8-NEXT: stdu r1, -48(r1) 530; CHECK-P8-NEXT: mr r30, r3 531; CHECK-P8-NEXT: mr r3, r4 532; CHECK-P8-NEXT: bl __floatsikf 533; CHECK-P8-NEXT: nop 534; CHECK-P8-NEXT: stvx v2, 0, r30 535; CHECK-P8-NEXT: addi r1, r1, 48 536; CHECK-P8-NEXT: ld r0, 16(r1) 537; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 538; CHECK-P8-NEXT: mtlr r0 539; CHECK-P8-NEXT: blr 540entry: 541 %conv = sitofp i32 %b to fp128 542 store fp128 %conv, fp128* %a, align 16 543 ret void 544 545} 546 547; Function Attrs: norecurse nounwind 548define void @swConv2qp_02(fp128* nocapture %a, i32* nocapture readonly %b) { 549; CHECK-LABEL: swConv2qp_02: 550; CHECK: # %bb.0: # %entry 551; CHECK-NEXT: lxsiwax v2, 0, r4 552; CHECK-NEXT: xscvsdqp v2, v2 553; CHECK-NEXT: stxv v2, 0(r3) 554; CHECK-NEXT: blr 555; 556; CHECK-P8-LABEL: swConv2qp_02: 557; CHECK-P8: # %bb.0: # %entry 558; CHECK-P8-NEXT: mflr r0 559; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 560; CHECK-P8-NEXT: .cfi_offset lr, 16 561; CHECK-P8-NEXT: .cfi_offset r30, -16 562; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 563; CHECK-P8-NEXT: std r0, 16(r1) 564; CHECK-P8-NEXT: stdu r1, -48(r1) 565; CHECK-P8-NEXT: lwa r4, 0(r4) 566; CHECK-P8-NEXT: mr r30, r3 567; CHECK-P8-NEXT: mr r3, r4 568; CHECK-P8-NEXT: bl __floatsikf 569; CHECK-P8-NEXT: nop 570; CHECK-P8-NEXT: stvx v2, 0, r30 571; CHECK-P8-NEXT: addi r1, r1, 48 572; CHECK-P8-NEXT: ld r0, 16(r1) 573; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 574; CHECK-P8-NEXT: mtlr r0 575; CHECK-P8-NEXT: blr 576entry: 577 %0 = load i32, i32* %b, align 4 578 %conv = sitofp i32 %0 to fp128 579 store fp128 %conv, fp128* %a, align 16 580 ret void 581 582} 583 584; Function Attrs: norecurse nounwind 585define void @swConv2qp_03(fp128* nocapture %a) { 586; CHECK-LABEL: swConv2qp_03: 587; CHECK: # %bb.0: # %entry 588; CHECK-NEXT: addis r4, r2, .LC2@toc@ha 589; CHECK-NEXT: ld r4, .LC2@toc@l(r4) 590; CHECK-NEXT: addi r4, r4, 12 591; CHECK-NEXT: lxsiwax v2, 0, r4 592; CHECK-NEXT: xscvsdqp v2, v2 593; CHECK-NEXT: stxv v2, 0(r3) 594; CHECK-NEXT: blr 595; 596; CHECK-P8-LABEL: swConv2qp_03: 597; CHECK-P8: # %bb.0: # %entry 598; CHECK-P8-NEXT: mflr r0 599; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 600; CHECK-P8-NEXT: .cfi_offset lr, 16 601; CHECK-P8-NEXT: .cfi_offset r30, -16 602; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 603; CHECK-P8-NEXT: std r0, 16(r1) 604; CHECK-P8-NEXT: stdu r1, -48(r1) 605; CHECK-P8-NEXT: addis r4, r2, .LC2@toc@ha 606; CHECK-P8-NEXT: mr r30, r3 607; CHECK-P8-NEXT: ld r4, .LC2@toc@l(r4) 608; CHECK-P8-NEXT: lwa r4, 12(r4) 609; CHECK-P8-NEXT: mr r3, r4 610; CHECK-P8-NEXT: bl __floatsikf 611; CHECK-P8-NEXT: nop 612; CHECK-P8-NEXT: stvx v2, 0, r30 613; CHECK-P8-NEXT: addi r1, r1, 48 614; CHECK-P8-NEXT: ld r0, 16(r1) 615; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 616; CHECK-P8-NEXT: mtlr r0 617; CHECK-P8-NEXT: blr 618entry: 619 %0 = load i32, i32* getelementptr inbounds 620 ([5 x i32], [5 x i32]* @swMem, i64 0, i64 3), align 4 621 %conv = sitofp i32 %0 to fp128 622 store fp128 %conv, fp128* %a, align 16 623 ret void 624 625} 626 627; Function Attrs: norecurse nounwind 628define void @uwConv2qp(fp128* nocapture %a, i32 zeroext %b) { 629; CHECK-LABEL: uwConv2qp: 630; CHECK: # %bb.0: # %entry 631; CHECK-NEXT: mtvsrwz v2, r4 632; CHECK-NEXT: xscvudqp v2, v2 633; CHECK-NEXT: stxv v2, 0(r3) 634; CHECK-NEXT: blr 635; 636; CHECK-P8-LABEL: uwConv2qp: 637; CHECK-P8: # %bb.0: # %entry 638; CHECK-P8-NEXT: mflr r0 639; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 640; CHECK-P8-NEXT: .cfi_offset lr, 16 641; CHECK-P8-NEXT: .cfi_offset r30, -16 642; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 643; CHECK-P8-NEXT: std r0, 16(r1) 644; CHECK-P8-NEXT: stdu r1, -48(r1) 645; CHECK-P8-NEXT: mr r30, r3 646; CHECK-P8-NEXT: mr r3, r4 647; CHECK-P8-NEXT: bl __floatunsikf 648; CHECK-P8-NEXT: nop 649; CHECK-P8-NEXT: stvx v2, 0, r30 650; CHECK-P8-NEXT: addi r1, r1, 48 651; CHECK-P8-NEXT: ld r0, 16(r1) 652; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 653; CHECK-P8-NEXT: mtlr r0 654; CHECK-P8-NEXT: blr 655entry: 656 %conv = uitofp i32 %b to fp128 657 store fp128 %conv, fp128* %a, align 16 658 ret void 659 660} 661 662; Function Attrs: norecurse nounwind 663define void @uwConv2qp_02(fp128* nocapture %a, i32* nocapture readonly %b) { 664; CHECK-LABEL: uwConv2qp_02: 665; CHECK: # %bb.0: # %entry 666; CHECK-NEXT: lxsiwzx v2, 0, r4 667; CHECK-NEXT: xscvudqp v2, v2 668; CHECK-NEXT: stxv v2, 0(r3) 669; CHECK-NEXT: blr 670; 671; CHECK-P8-LABEL: uwConv2qp_02: 672; CHECK-P8: # %bb.0: # %entry 673; CHECK-P8-NEXT: mflr r0 674; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 675; CHECK-P8-NEXT: .cfi_offset lr, 16 676; CHECK-P8-NEXT: .cfi_offset r30, -16 677; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 678; CHECK-P8-NEXT: std r0, 16(r1) 679; CHECK-P8-NEXT: stdu r1, -48(r1) 680; CHECK-P8-NEXT: lwz r4, 0(r4) 681; CHECK-P8-NEXT: mr r30, r3 682; CHECK-P8-NEXT: mr r3, r4 683; CHECK-P8-NEXT: bl __floatunsikf 684; CHECK-P8-NEXT: nop 685; CHECK-P8-NEXT: stvx v2, 0, r30 686; CHECK-P8-NEXT: addi r1, r1, 48 687; CHECK-P8-NEXT: ld r0, 16(r1) 688; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 689; CHECK-P8-NEXT: mtlr r0 690; CHECK-P8-NEXT: blr 691entry: 692 %0 = load i32, i32* %b, align 4 693 %conv = uitofp i32 %0 to fp128 694 store fp128 %conv, fp128* %a, align 16 695 ret void 696 697} 698 699; Function Attrs: norecurse nounwind 700define void @uwConv2qp_03(fp128* nocapture %a) { 701; CHECK-LABEL: uwConv2qp_03: 702; CHECK: # %bb.0: # %entry 703; CHECK-NEXT: addis r4, r2, .LC3@toc@ha 704; CHECK-NEXT: ld r4, .LC3@toc@l(r4) 705; CHECK-NEXT: addi r4, r4, 12 706; CHECK-NEXT: lxsiwzx v2, 0, r4 707; CHECK-NEXT: xscvudqp v2, v2 708; CHECK-NEXT: stxv v2, 0(r3) 709; CHECK-NEXT: blr 710; 711; CHECK-P8-LABEL: uwConv2qp_03: 712; CHECK-P8: # %bb.0: # %entry 713; CHECK-P8-NEXT: mflr r0 714; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 715; CHECK-P8-NEXT: .cfi_offset lr, 16 716; CHECK-P8-NEXT: .cfi_offset r30, -16 717; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 718; CHECK-P8-NEXT: std r0, 16(r1) 719; CHECK-P8-NEXT: stdu r1, -48(r1) 720; CHECK-P8-NEXT: addis r4, r2, .LC3@toc@ha 721; CHECK-P8-NEXT: mr r30, r3 722; CHECK-P8-NEXT: ld r4, .LC3@toc@l(r4) 723; CHECK-P8-NEXT: lwz r4, 12(r4) 724; CHECK-P8-NEXT: mr r3, r4 725; CHECK-P8-NEXT: bl __floatunsikf 726; CHECK-P8-NEXT: nop 727; CHECK-P8-NEXT: stvx v2, 0, r30 728; CHECK-P8-NEXT: addi r1, r1, 48 729; CHECK-P8-NEXT: ld r0, 16(r1) 730; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 731; CHECK-P8-NEXT: mtlr r0 732; CHECK-P8-NEXT: blr 733entry: 734 %0 = load i32, i32* getelementptr inbounds 735 ([5 x i32], [5 x i32]* @uwMem, i64 0, i64 3), align 4 736 %conv = uitofp i32 %0 to fp128 737 store fp128 %conv, fp128* %a, align 16 738 ret void 739 740} 741 742; Function Attrs: norecurse nounwind 743define void @uwConv2qp_04(fp128* nocapture %a, 744; CHECK-LABEL: uwConv2qp_04: 745; CHECK: # %bb.0: # %entry 746; CHECK-NEXT: lwz r5, 0(r5) 747; CHECK-NEXT: add r4, r5, r4 748; CHECK-NEXT: mtvsrwz v2, r4 749; CHECK-NEXT: xscvudqp v2, v2 750; CHECK-NEXT: stxv v2, 0(r3) 751; CHECK-NEXT: blr 752; 753; CHECK-P8-LABEL: uwConv2qp_04: 754; CHECK-P8: # %bb.0: # %entry 755; CHECK-P8-NEXT: mflr r0 756; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 757; CHECK-P8-NEXT: .cfi_offset lr, 16 758; CHECK-P8-NEXT: .cfi_offset r30, -16 759; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 760; CHECK-P8-NEXT: std r0, 16(r1) 761; CHECK-P8-NEXT: stdu r1, -48(r1) 762; CHECK-P8-NEXT: mr r30, r3 763; CHECK-P8-NEXT: lwz r3, 0(r5) 764; CHECK-P8-NEXT: add r3, r3, r4 765; CHECK-P8-NEXT: clrldi r3, r3, 32 766; CHECK-P8-NEXT: bl __floatunsikf 767; CHECK-P8-NEXT: nop 768; CHECK-P8-NEXT: stvx v2, 0, r30 769; CHECK-P8-NEXT: addi r1, r1, 48 770; CHECK-P8-NEXT: ld r0, 16(r1) 771; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 772; CHECK-P8-NEXT: mtlr r0 773; CHECK-P8-NEXT: blr 774 i32 zeroext %b, i32* nocapture readonly %c) { 775entry: 776 %0 = load i32, i32* %c, align 4 777 %add = add i32 %0, %b 778 %conv = uitofp i32 %add to fp128 779 store fp128 %conv, fp128* %a, align 16 780 ret void 781 782} 783 784; Function Attrs: norecurse nounwind 785define void @uhwConv2qp(fp128* nocapture %a, i16 zeroext %b) { 786; CHECK-LABEL: uhwConv2qp: 787; CHECK: # %bb.0: # %entry 788; CHECK-NEXT: mtvsrwz v2, r4 789; CHECK-NEXT: xscvudqp v2, v2 790; CHECK-NEXT: stxv v2, 0(r3) 791; CHECK-NEXT: blr 792; 793; CHECK-P8-LABEL: uhwConv2qp: 794; CHECK-P8: # %bb.0: # %entry 795; CHECK-P8-NEXT: mflr r0 796; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 797; CHECK-P8-NEXT: .cfi_offset lr, 16 798; CHECK-P8-NEXT: .cfi_offset r30, -16 799; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 800; CHECK-P8-NEXT: std r0, 16(r1) 801; CHECK-P8-NEXT: stdu r1, -48(r1) 802; CHECK-P8-NEXT: mr r30, r3 803; CHECK-P8-NEXT: mr r3, r4 804; CHECK-P8-NEXT: bl __floatunsikf 805; CHECK-P8-NEXT: nop 806; CHECK-P8-NEXT: stvx v2, 0, r30 807; CHECK-P8-NEXT: addi r1, r1, 48 808; CHECK-P8-NEXT: ld r0, 16(r1) 809; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 810; CHECK-P8-NEXT: mtlr r0 811; CHECK-P8-NEXT: blr 812entry: 813 %conv = uitofp i16 %b to fp128 814 store fp128 %conv, fp128* %a, align 16 815 ret void 816 817 818} 819 820; Function Attrs: norecurse nounwind 821define void @uhwConv2qp_02(fp128* nocapture %a, i16* nocapture readonly %b) { 822; CHECK-LABEL: uhwConv2qp_02: 823; CHECK: # %bb.0: # %entry 824; CHECK-NEXT: lxsihzx v2, 0, r4 825; CHECK-NEXT: xscvudqp v2, v2 826; CHECK-NEXT: stxv v2, 0(r3) 827; CHECK-NEXT: blr 828; 829; CHECK-P8-LABEL: uhwConv2qp_02: 830; CHECK-P8: # %bb.0: # %entry 831; CHECK-P8-NEXT: mflr r0 832; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 833; CHECK-P8-NEXT: .cfi_offset lr, 16 834; CHECK-P8-NEXT: .cfi_offset r30, -16 835; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 836; CHECK-P8-NEXT: std r0, 16(r1) 837; CHECK-P8-NEXT: stdu r1, -48(r1) 838; CHECK-P8-NEXT: lhz r4, 0(r4) 839; CHECK-P8-NEXT: mr r30, r3 840; CHECK-P8-NEXT: mr r3, r4 841; CHECK-P8-NEXT: bl __floatunsikf 842; CHECK-P8-NEXT: nop 843; CHECK-P8-NEXT: stvx v2, 0, r30 844; CHECK-P8-NEXT: addi r1, r1, 48 845; CHECK-P8-NEXT: ld r0, 16(r1) 846; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 847; CHECK-P8-NEXT: mtlr r0 848; CHECK-P8-NEXT: blr 849entry: 850 %0 = load i16, i16* %b, align 2 851 %conv = uitofp i16 %0 to fp128 852 store fp128 %conv, fp128* %a, align 16 853 ret void 854 855} 856 857; Function Attrs: norecurse nounwind 858define void @uhwConv2qp_03(fp128* nocapture %a) { 859; CHECK-LABEL: uhwConv2qp_03: 860; CHECK: # %bb.0: # %entry 861; CHECK-NEXT: addis r4, r2, .LC4@toc@ha 862; CHECK-NEXT: ld r4, .LC4@toc@l(r4) 863; CHECK-NEXT: addi r4, r4, 6 864; CHECK-NEXT: lxsihzx v2, 0, r4 865; CHECK-NEXT: xscvudqp v2, v2 866; CHECK-NEXT: stxv v2, 0(r3) 867; CHECK-NEXT: blr 868; 869; CHECK-P8-LABEL: uhwConv2qp_03: 870; CHECK-P8: # %bb.0: # %entry 871; CHECK-P8-NEXT: mflr r0 872; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 873; CHECK-P8-NEXT: .cfi_offset lr, 16 874; CHECK-P8-NEXT: .cfi_offset r30, -16 875; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 876; CHECK-P8-NEXT: std r0, 16(r1) 877; CHECK-P8-NEXT: stdu r1, -48(r1) 878; CHECK-P8-NEXT: addis r4, r2, .LC4@toc@ha 879; CHECK-P8-NEXT: mr r30, r3 880; CHECK-P8-NEXT: ld r4, .LC4@toc@l(r4) 881; CHECK-P8-NEXT: lhz r4, 6(r4) 882; CHECK-P8-NEXT: mr r3, r4 883; CHECK-P8-NEXT: bl __floatunsikf 884; CHECK-P8-NEXT: nop 885; CHECK-P8-NEXT: stvx v2, 0, r30 886; CHECK-P8-NEXT: addi r1, r1, 48 887; CHECK-P8-NEXT: ld r0, 16(r1) 888; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 889; CHECK-P8-NEXT: mtlr r0 890; CHECK-P8-NEXT: blr 891entry: 892 %0 = load i16, i16* getelementptr inbounds 893 ([5 x i16], [5 x i16]* @uhwMem, i64 0, i64 3), align 2 894 %conv = uitofp i16 %0 to fp128 895 store fp128 %conv, fp128* %a, align 16 896 ret void 897 898} 899 900; Function Attrs: norecurse nounwind 901define void @uhwConv2qp_04(fp128* nocapture %a, i16 zeroext %b, 902; CHECK-LABEL: uhwConv2qp_04: 903; CHECK: # %bb.0: # %entry 904; CHECK-NEXT: lhz r5, 0(r5) 905; CHECK-NEXT: add r4, r5, r4 906; CHECK-NEXT: mtvsrwa v2, r4 907; CHECK-NEXT: xscvsdqp v2, v2 908; CHECK-NEXT: stxv v2, 0(r3) 909; CHECK-NEXT: blr 910; 911; CHECK-P8-LABEL: uhwConv2qp_04: 912; CHECK-P8: # %bb.0: # %entry 913; CHECK-P8-NEXT: mflr r0 914; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 915; CHECK-P8-NEXT: .cfi_offset lr, 16 916; CHECK-P8-NEXT: .cfi_offset r30, -16 917; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 918; CHECK-P8-NEXT: std r0, 16(r1) 919; CHECK-P8-NEXT: stdu r1, -48(r1) 920; CHECK-P8-NEXT: mr r30, r3 921; CHECK-P8-NEXT: lhz r3, 0(r5) 922; CHECK-P8-NEXT: add r3, r3, r4 923; CHECK-P8-NEXT: clrldi r3, r3, 32 924; CHECK-P8-NEXT: bl __floatsikf 925; CHECK-P8-NEXT: nop 926; CHECK-P8-NEXT: stvx v2, 0, r30 927; CHECK-P8-NEXT: addi r1, r1, 48 928; CHECK-P8-NEXT: ld r0, 16(r1) 929; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 930; CHECK-P8-NEXT: mtlr r0 931; CHECK-P8-NEXT: blr 932 i16* nocapture readonly %c) { 933entry: 934 %conv = zext i16 %b to i32 935 %0 = load i16, i16* %c, align 2 936 %conv1 = zext i16 %0 to i32 937 %add = add nuw nsw i32 %conv1, %conv 938 %conv2 = sitofp i32 %add to fp128 939 store fp128 %conv2, fp128* %a, align 16 940 ret void 941 942} 943 944; Function Attrs: norecurse nounwind 945define void @ubConv2qp(fp128* nocapture %a, i8 zeroext %b) { 946; CHECK-LABEL: ubConv2qp: 947; CHECK: # %bb.0: # %entry 948; CHECK-NEXT: mtvsrwz v2, r4 949; CHECK-NEXT: xscvudqp v2, v2 950; CHECK-NEXT: stxv v2, 0(r3) 951; CHECK-NEXT: blr 952; 953; CHECK-P8-LABEL: ubConv2qp: 954; CHECK-P8: # %bb.0: # %entry 955; CHECK-P8-NEXT: mflr r0 956; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 957; CHECK-P8-NEXT: .cfi_offset lr, 16 958; CHECK-P8-NEXT: .cfi_offset r30, -16 959; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 960; CHECK-P8-NEXT: std r0, 16(r1) 961; CHECK-P8-NEXT: stdu r1, -48(r1) 962; CHECK-P8-NEXT: mr r30, r3 963; CHECK-P8-NEXT: mr r3, r4 964; CHECK-P8-NEXT: bl __floatunsikf 965; CHECK-P8-NEXT: nop 966; CHECK-P8-NEXT: stvx v2, 0, r30 967; CHECK-P8-NEXT: addi r1, r1, 48 968; CHECK-P8-NEXT: ld r0, 16(r1) 969; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 970; CHECK-P8-NEXT: mtlr r0 971; CHECK-P8-NEXT: blr 972entry: 973 %conv = uitofp i8 %b to fp128 974 store fp128 %conv, fp128* %a, align 16 975 ret void 976 977} 978 979; Function Attrs: norecurse nounwind 980define void @ubConv2qp_02(fp128* nocapture %a, i8* nocapture readonly %b) { 981; CHECK-LABEL: ubConv2qp_02: 982; CHECK: # %bb.0: # %entry 983; CHECK-NEXT: lxsibzx v2, 0, r4 984; CHECK-NEXT: xscvudqp v2, v2 985; CHECK-NEXT: stxv v2, 0(r3) 986; CHECK-NEXT: blr 987; 988; CHECK-P8-LABEL: ubConv2qp_02: 989; CHECK-P8: # %bb.0: # %entry 990; CHECK-P8-NEXT: mflr r0 991; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 992; CHECK-P8-NEXT: .cfi_offset lr, 16 993; CHECK-P8-NEXT: .cfi_offset r30, -16 994; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 995; CHECK-P8-NEXT: std r0, 16(r1) 996; CHECK-P8-NEXT: stdu r1, -48(r1) 997; CHECK-P8-NEXT: lbz r4, 0(r4) 998; CHECK-P8-NEXT: mr r30, r3 999; CHECK-P8-NEXT: mr r3, r4 1000; CHECK-P8-NEXT: bl __floatunsikf 1001; CHECK-P8-NEXT: nop 1002; CHECK-P8-NEXT: stvx v2, 0, r30 1003; CHECK-P8-NEXT: addi r1, r1, 48 1004; CHECK-P8-NEXT: ld r0, 16(r1) 1005; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1006; CHECK-P8-NEXT: mtlr r0 1007; CHECK-P8-NEXT: blr 1008entry: 1009 %0 = load i8, i8* %b, align 1 1010 %conv = uitofp i8 %0 to fp128 1011 store fp128 %conv, fp128* %a, align 16 1012 ret void 1013 1014} 1015 1016; Function Attrs: norecurse nounwind 1017define void @ubConv2qp_03(fp128* nocapture %a) { 1018; CHECK-LABEL: ubConv2qp_03: 1019; CHECK: # %bb.0: # %entry 1020; CHECK-NEXT: addis r4, r2, .LC5@toc@ha 1021; CHECK-NEXT: ld r4, .LC5@toc@l(r4) 1022; CHECK-NEXT: addi r4, r4, 2 1023; CHECK-NEXT: lxsibzx v2, 0, r4 1024; CHECK-NEXT: xscvudqp v2, v2 1025; CHECK-NEXT: stxv v2, 0(r3) 1026; CHECK-NEXT: blr 1027; 1028; CHECK-P8-LABEL: ubConv2qp_03: 1029; CHECK-P8: # %bb.0: # %entry 1030; CHECK-P8-NEXT: mflr r0 1031; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1032; CHECK-P8-NEXT: .cfi_offset lr, 16 1033; CHECK-P8-NEXT: .cfi_offset r30, -16 1034; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1035; CHECK-P8-NEXT: std r0, 16(r1) 1036; CHECK-P8-NEXT: stdu r1, -48(r1) 1037; CHECK-P8-NEXT: addis r4, r2, .LC5@toc@ha 1038; CHECK-P8-NEXT: mr r30, r3 1039; CHECK-P8-NEXT: ld r4, .LC5@toc@l(r4) 1040; CHECK-P8-NEXT: lbz r4, 2(r4) 1041; CHECK-P8-NEXT: mr r3, r4 1042; CHECK-P8-NEXT: bl __floatunsikf 1043; CHECK-P8-NEXT: nop 1044; CHECK-P8-NEXT: stvx v2, 0, r30 1045; CHECK-P8-NEXT: addi r1, r1, 48 1046; CHECK-P8-NEXT: ld r0, 16(r1) 1047; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1048; CHECK-P8-NEXT: mtlr r0 1049; CHECK-P8-NEXT: blr 1050entry: 1051 %0 = load i8, i8* getelementptr inbounds 1052 ([5 x i8], [5 x i8]* @ubMem, i64 0, i64 2), align 1 1053 %conv = uitofp i8 %0 to fp128 1054 store fp128 %conv, fp128* %a, align 16 1055 ret void 1056 1057} 1058 1059; Function Attrs: norecurse nounwind 1060define void @ubConv2qp_04(fp128* nocapture %a, i8 zeroext %b, 1061; CHECK-LABEL: ubConv2qp_04: 1062; CHECK: # %bb.0: # %entry 1063; CHECK-NEXT: lbz r5, 0(r5) 1064; CHECK-NEXT: add r4, r5, r4 1065; CHECK-NEXT: mtvsrwa v2, r4 1066; CHECK-NEXT: xscvsdqp v2, v2 1067; CHECK-NEXT: stxv v2, 0(r3) 1068; CHECK-NEXT: blr 1069; 1070; CHECK-P8-LABEL: ubConv2qp_04: 1071; CHECK-P8: # %bb.0: # %entry 1072; CHECK-P8-NEXT: mflr r0 1073; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1074; CHECK-P8-NEXT: .cfi_offset lr, 16 1075; CHECK-P8-NEXT: .cfi_offset r30, -16 1076; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1077; CHECK-P8-NEXT: std r0, 16(r1) 1078; CHECK-P8-NEXT: stdu r1, -48(r1) 1079; CHECK-P8-NEXT: mr r30, r3 1080; CHECK-P8-NEXT: lbz r3, 0(r5) 1081; CHECK-P8-NEXT: add r3, r3, r4 1082; CHECK-P8-NEXT: clrldi r3, r3, 32 1083; CHECK-P8-NEXT: bl __floatsikf 1084; CHECK-P8-NEXT: nop 1085; CHECK-P8-NEXT: stvx v2, 0, r30 1086; CHECK-P8-NEXT: addi r1, r1, 48 1087; CHECK-P8-NEXT: ld r0, 16(r1) 1088; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1089; CHECK-P8-NEXT: mtlr r0 1090; CHECK-P8-NEXT: blr 1091 i8* nocapture readonly %c) { 1092entry: 1093 %conv = zext i8 %b to i32 1094 %0 = load i8, i8* %c, align 1 1095 %conv1 = zext i8 %0 to i32 1096 %add = add nuw nsw i32 %conv1, %conv 1097 %conv2 = sitofp i32 %add to fp128 1098 store fp128 %conv2, fp128* %a, align 16 1099 ret void 1100 1101} 1102 1103; Convert QP to DP 1104 1105@f128Array = global [4 x fp128] 1106 [fp128 0xL00000000000000004004C00000000000, 1107 fp128 0xLF000000000000000400808AB851EB851, 1108 fp128 0xL5000000000000000400E0C26324C8366, 1109 fp128 0xL8000000000000000400A24E2E147AE14], align 16 1110@f128global = global fp128 0xL300000000000000040089CA8F5C28F5C, align 16 1111 1112; Function Attrs: norecurse nounwind readonly 1113define double @qpConv2dp(fp128* nocapture readonly %a) { 1114; CHECK-LABEL: qpConv2dp: 1115; CHECK: # %bb.0: # %entry 1116; CHECK-NEXT: lxv v2, 0(r3) 1117; CHECK-NEXT: xscvqpdp v2, v2 1118; CHECK-NEXT: xscpsgndp f1, v2, v2 1119; CHECK-NEXT: blr 1120; 1121; CHECK-P8-LABEL: qpConv2dp: 1122; CHECK-P8: # %bb.0: # %entry 1123; CHECK-P8-NEXT: mflr r0 1124; CHECK-P8-NEXT: std r0, 16(r1) 1125; CHECK-P8-NEXT: stdu r1, -32(r1) 1126; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1127; CHECK-P8-NEXT: .cfi_offset lr, 16 1128; CHECK-P8-NEXT: lvx v2, 0, r3 1129; CHECK-P8-NEXT: bl __trunckfdf2 1130; CHECK-P8-NEXT: nop 1131; CHECK-P8-NEXT: addi r1, r1, 32 1132; CHECK-P8-NEXT: ld r0, 16(r1) 1133; CHECK-P8-NEXT: mtlr r0 1134; CHECK-P8-NEXT: blr 1135entry: 1136 %0 = load fp128, fp128* %a, align 16 1137 %conv = fptrunc fp128 %0 to double 1138 ret double %conv 1139} 1140 1141; Function Attrs: norecurse nounwind 1142define void @qpConv2dp_02(double* nocapture %res) { 1143; CHECK-LABEL: qpConv2dp_02: 1144; CHECK: # %bb.0: # %entry 1145; CHECK-NEXT: addis r4, r2, .LC6@toc@ha 1146; CHECK-NEXT: ld r4, .LC6@toc@l(r4) 1147; CHECK-NEXT: lxvx v2, 0, r4 1148; CHECK-NEXT: xscvqpdp v2, v2 1149; CHECK-NEXT: stxsd v2, 0(r3) 1150; CHECK-NEXT: blr 1151; 1152; CHECK-P8-LABEL: qpConv2dp_02: 1153; CHECK-P8: # %bb.0: # %entry 1154; CHECK-P8-NEXT: mflr r0 1155; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1156; CHECK-P8-NEXT: .cfi_offset lr, 16 1157; CHECK-P8-NEXT: .cfi_offset r30, -16 1158; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1159; CHECK-P8-NEXT: std r0, 16(r1) 1160; CHECK-P8-NEXT: stdu r1, -48(r1) 1161; CHECK-P8-NEXT: addis r4, r2, .LC6@toc@ha 1162; CHECK-P8-NEXT: mr r30, r3 1163; CHECK-P8-NEXT: ld r4, .LC6@toc@l(r4) 1164; CHECK-P8-NEXT: lvx v2, 0, r4 1165; CHECK-P8-NEXT: bl __trunckfdf2 1166; CHECK-P8-NEXT: nop 1167; CHECK-P8-NEXT: stfdx f1, 0, r30 1168; CHECK-P8-NEXT: addi r1, r1, 48 1169; CHECK-P8-NEXT: ld r0, 16(r1) 1170; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1171; CHECK-P8-NEXT: mtlr r0 1172; CHECK-P8-NEXT: blr 1173entry: 1174 %0 = load fp128, fp128* @f128global, align 16 1175 %conv = fptrunc fp128 %0 to double 1176 store double %conv, double* %res, align 8 1177 ret void 1178} 1179 1180; Function Attrs: norecurse nounwind 1181define void @qpConv2dp_03(double* nocapture %res, i32 signext %idx) { 1182; CHECK-LABEL: qpConv2dp_03: 1183; CHECK: # %bb.0: # %entry 1184; CHECK-NEXT: addis r5, r2, .LC7@toc@ha 1185; CHECK-NEXT: sldi r4, r4, 3 1186; CHECK-NEXT: ld r5, .LC7@toc@l(r5) 1187; CHECK-NEXT: lxvx v2, 0, r5 1188; CHECK-NEXT: xscvqpdp v2, v2 1189; CHECK-NEXT: stxsdx v2, r3, r4 1190; CHECK-NEXT: blr 1191; 1192; CHECK-P8-LABEL: qpConv2dp_03: 1193; CHECK-P8: # %bb.0: # %entry 1194; CHECK-P8-NEXT: mflr r0 1195; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1196; CHECK-P8-NEXT: .cfi_offset lr, 16 1197; CHECK-P8-NEXT: .cfi_offset r29, -24 1198; CHECK-P8-NEXT: .cfi_offset r30, -16 1199; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1200; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1201; CHECK-P8-NEXT: std r0, 16(r1) 1202; CHECK-P8-NEXT: stdu r1, -64(r1) 1203; CHECK-P8-NEXT: mr r30, r4 1204; CHECK-P8-NEXT: addis r4, r2, .LC7@toc@ha 1205; CHECK-P8-NEXT: mr r29, r3 1206; CHECK-P8-NEXT: ld r4, .LC7@toc@l(r4) 1207; CHECK-P8-NEXT: lvx v2, 0, r4 1208; CHECK-P8-NEXT: bl __trunckfdf2 1209; CHECK-P8-NEXT: nop 1210; CHECK-P8-NEXT: sldi r3, r30, 3 1211; CHECK-P8-NEXT: stfdx f1, r29, r3 1212; CHECK-P8-NEXT: addi r1, r1, 64 1213; CHECK-P8-NEXT: ld r0, 16(r1) 1214; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1215; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1216; CHECK-P8-NEXT: mtlr r0 1217; CHECK-P8-NEXT: blr 1218entry: 1219 %0 = load fp128, fp128* getelementptr inbounds ([4 x fp128], [4 x fp128]* @f128Array, i64 0, i64 0), align 16 1220 %conv = fptrunc fp128 %0 to double 1221 %idxprom = sext i32 %idx to i64 1222 %arrayidx = getelementptr inbounds double, double* %res, i64 %idxprom 1223 store double %conv, double* %arrayidx, align 8 1224 ret void 1225} 1226 1227; Function Attrs: norecurse nounwind 1228define void @qpConv2dp_04(fp128* nocapture readonly %a, fp128* nocapture readonly %b, double* nocapture %res) { 1229; CHECK-LABEL: qpConv2dp_04: 1230; CHECK: # %bb.0: # %entry 1231; CHECK-NEXT: lxv v2, 0(r3) 1232; CHECK-NEXT: lxv v3, 0(r4) 1233; CHECK-NEXT: xsaddqp v2, v2, v3 1234; CHECK-NEXT: xscvqpdp v2, v2 1235; CHECK-NEXT: stxsd v2, 0(r5) 1236; CHECK-NEXT: blr 1237; 1238; CHECK-P8-LABEL: qpConv2dp_04: 1239; CHECK-P8: # %bb.0: # %entry 1240; CHECK-P8-NEXT: mflr r0 1241; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1242; CHECK-P8-NEXT: .cfi_offset lr, 16 1243; CHECK-P8-NEXT: .cfi_offset r30, -16 1244; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1245; CHECK-P8-NEXT: std r0, 16(r1) 1246; CHECK-P8-NEXT: stdu r1, -48(r1) 1247; CHECK-P8-NEXT: lvx v2, 0, r3 1248; CHECK-P8-NEXT: lvx v3, 0, r4 1249; CHECK-P8-NEXT: mr r30, r5 1250; CHECK-P8-NEXT: bl __addkf3 1251; CHECK-P8-NEXT: nop 1252; CHECK-P8-NEXT: bl __trunckfdf2 1253; CHECK-P8-NEXT: nop 1254; CHECK-P8-NEXT: stfdx f1, 0, r30 1255; CHECK-P8-NEXT: addi r1, r1, 48 1256; CHECK-P8-NEXT: ld r0, 16(r1) 1257; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1258; CHECK-P8-NEXT: mtlr r0 1259; CHECK-P8-NEXT: blr 1260entry: 1261 %0 = load fp128, fp128* %a, align 16 1262 %1 = load fp128, fp128* %b, align 16 1263 %add = fadd fp128 %0, %1 1264 %conv = fptrunc fp128 %add to double 1265 store double %conv, double* %res, align 8 1266 ret void 1267} 1268 1269; Convert QP to SP 1270 1271; Function Attrs: norecurse nounwind readonly 1272define float @qpConv2sp(fp128* nocapture readonly %a) { 1273; CHECK-LABEL: qpConv2sp: 1274; CHECK: # %bb.0: # %entry 1275; CHECK-NEXT: lxv v2, 0(r3) 1276; CHECK-NEXT: xscvqpdpo v2, v2 1277; CHECK-NEXT: xsrsp f1, v2 1278; CHECK-NEXT: blr 1279; 1280; CHECK-P8-LABEL: qpConv2sp: 1281; CHECK-P8: # %bb.0: # %entry 1282; CHECK-P8-NEXT: mflr r0 1283; CHECK-P8-NEXT: std r0, 16(r1) 1284; CHECK-P8-NEXT: stdu r1, -32(r1) 1285; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1286; CHECK-P8-NEXT: .cfi_offset lr, 16 1287; CHECK-P8-NEXT: lvx v2, 0, r3 1288; CHECK-P8-NEXT: bl __trunckfsf2 1289; CHECK-P8-NEXT: nop 1290; CHECK-P8-NEXT: addi r1, r1, 32 1291; CHECK-P8-NEXT: ld r0, 16(r1) 1292; CHECK-P8-NEXT: mtlr r0 1293; CHECK-P8-NEXT: blr 1294entry: 1295 %0 = load fp128, fp128* %a, align 16 1296 %conv = fptrunc fp128 %0 to float 1297 ret float %conv 1298} 1299 1300; Function Attrs: norecurse nounwind 1301define void @qpConv2sp_02(float* nocapture %res) { 1302; CHECK-LABEL: qpConv2sp_02: 1303; CHECK: # %bb.0: # %entry 1304; CHECK-NEXT: addis r4, r2, .LC6@toc@ha 1305; CHECK-NEXT: ld r4, .LC6@toc@l(r4) 1306; CHECK-NEXT: lxvx v2, 0, r4 1307; CHECK-NEXT: xscvqpdpo v2, v2 1308; CHECK-NEXT: xsrsp f0, v2 1309; CHECK-NEXT: stfs f0, 0(r3) 1310; CHECK-NEXT: blr 1311; 1312; CHECK-P8-LABEL: qpConv2sp_02: 1313; CHECK-P8: # %bb.0: # %entry 1314; CHECK-P8-NEXT: mflr r0 1315; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1316; CHECK-P8-NEXT: .cfi_offset lr, 16 1317; CHECK-P8-NEXT: .cfi_offset r30, -16 1318; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1319; CHECK-P8-NEXT: std r0, 16(r1) 1320; CHECK-P8-NEXT: stdu r1, -48(r1) 1321; CHECK-P8-NEXT: addis r4, r2, .LC6@toc@ha 1322; CHECK-P8-NEXT: mr r30, r3 1323; CHECK-P8-NEXT: ld r4, .LC6@toc@l(r4) 1324; CHECK-P8-NEXT: lvx v2, 0, r4 1325; CHECK-P8-NEXT: bl __trunckfsf2 1326; CHECK-P8-NEXT: nop 1327; CHECK-P8-NEXT: stfsx f1, 0, r30 1328; CHECK-P8-NEXT: addi r1, r1, 48 1329; CHECK-P8-NEXT: ld r0, 16(r1) 1330; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1331; CHECK-P8-NEXT: mtlr r0 1332; CHECK-P8-NEXT: blr 1333entry: 1334 %0 = load fp128, fp128* @f128global, align 16 1335 %conv = fptrunc fp128 %0 to float 1336 store float %conv, float* %res, align 4 1337 ret void 1338} 1339 1340; Function Attrs: norecurse nounwind 1341define void @qpConv2sp_03(float* nocapture %res, i32 signext %idx) { 1342; CHECK-LABEL: qpConv2sp_03: 1343; CHECK: # %bb.0: # %entry 1344; CHECK-NEXT: addis r5, r2, .LC7@toc@ha 1345; CHECK-NEXT: sldi r4, r4, 2 1346; CHECK-NEXT: ld r5, .LC7@toc@l(r5) 1347; CHECK-NEXT: lxv v2, 48(r5) 1348; CHECK-NEXT: xscvqpdpo v2, v2 1349; CHECK-NEXT: xsrsp f0, v2 1350; CHECK-NEXT: stfsx f0, r3, r4 1351; CHECK-NEXT: blr 1352; 1353; CHECK-P8-LABEL: qpConv2sp_03: 1354; CHECK-P8: # %bb.0: # %entry 1355; CHECK-P8-NEXT: mflr r0 1356; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1357; CHECK-P8-NEXT: .cfi_offset lr, 16 1358; CHECK-P8-NEXT: .cfi_offset r29, -24 1359; CHECK-P8-NEXT: .cfi_offset r30, -16 1360; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1361; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1362; CHECK-P8-NEXT: std r0, 16(r1) 1363; CHECK-P8-NEXT: stdu r1, -64(r1) 1364; CHECK-P8-NEXT: mr r30, r4 1365; CHECK-P8-NEXT: addis r4, r2, .LC7@toc@ha 1366; CHECK-P8-NEXT: mr r29, r3 1367; CHECK-P8-NEXT: ld r4, .LC7@toc@l(r4) 1368; CHECK-P8-NEXT: addi r4, r4, 48 1369; CHECK-P8-NEXT: lvx v2, 0, r4 1370; CHECK-P8-NEXT: bl __trunckfsf2 1371; CHECK-P8-NEXT: nop 1372; CHECK-P8-NEXT: sldi r3, r30, 2 1373; CHECK-P8-NEXT: stfsx f1, r29, r3 1374; CHECK-P8-NEXT: addi r1, r1, 64 1375; CHECK-P8-NEXT: ld r0, 16(r1) 1376; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1377; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1378; CHECK-P8-NEXT: mtlr r0 1379; CHECK-P8-NEXT: blr 1380entry: 1381 %0 = load fp128, fp128* getelementptr inbounds ([4 x fp128], [4 x fp128]* @f128Array, i64 0, i64 3), align 16 1382 %conv = fptrunc fp128 %0 to float 1383 %idxprom = sext i32 %idx to i64 1384 %arrayidx = getelementptr inbounds float, float* %res, i64 %idxprom 1385 store float %conv, float* %arrayidx, align 4 1386 ret void 1387} 1388 1389; Function Attrs: norecurse nounwind 1390define void @qpConv2sp_04(fp128* nocapture readonly %a, fp128* nocapture readonly %b, float* nocapture %res) { 1391; CHECK-LABEL: qpConv2sp_04: 1392; CHECK: # %bb.0: # %entry 1393; CHECK-NEXT: lxv v2, 0(r3) 1394; CHECK-NEXT: lxv v3, 0(r4) 1395; CHECK-NEXT: xsaddqp v2, v2, v3 1396; CHECK-NEXT: xscvqpdpo v2, v2 1397; CHECK-NEXT: xsrsp f0, v2 1398; CHECK-NEXT: stfs f0, 0(r5) 1399; CHECK-NEXT: blr 1400; 1401; CHECK-P8-LABEL: qpConv2sp_04: 1402; CHECK-P8: # %bb.0: # %entry 1403; CHECK-P8-NEXT: mflr r0 1404; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1405; CHECK-P8-NEXT: .cfi_offset lr, 16 1406; CHECK-P8-NEXT: .cfi_offset r30, -16 1407; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1408; CHECK-P8-NEXT: std r0, 16(r1) 1409; CHECK-P8-NEXT: stdu r1, -48(r1) 1410; CHECK-P8-NEXT: lvx v2, 0, r3 1411; CHECK-P8-NEXT: lvx v3, 0, r4 1412; CHECK-P8-NEXT: mr r30, r5 1413; CHECK-P8-NEXT: bl __addkf3 1414; CHECK-P8-NEXT: nop 1415; CHECK-P8-NEXT: bl __trunckfsf2 1416; CHECK-P8-NEXT: nop 1417; CHECK-P8-NEXT: stfsx f1, 0, r30 1418; CHECK-P8-NEXT: addi r1, r1, 48 1419; CHECK-P8-NEXT: ld r0, 16(r1) 1420; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1421; CHECK-P8-NEXT: mtlr r0 1422; CHECK-P8-NEXT: blr 1423entry: 1424 %0 = load fp128, fp128* %a, align 16 1425 %1 = load fp128, fp128* %b, align 16 1426 %add = fadd fp128 %0, %1 1427 %conv = fptrunc fp128 %add to float 1428 store float %conv, float* %res, align 4 1429 ret void 1430} 1431 1432@f128Glob = common global fp128 0xL00000000000000000000000000000000, align 16 1433 1434; Function Attrs: norecurse nounwind readnone 1435define fp128 @dpConv2qp(double %a) { 1436; CHECK-LABEL: dpConv2qp: 1437; CHECK: # %bb.0: # %entry 1438; CHECK-NEXT: xscpsgndp v2, f1, f1 1439; CHECK-NEXT: xscvdpqp v2, v2 1440; CHECK-NEXT: blr 1441; 1442; CHECK-P8-LABEL: dpConv2qp: 1443; CHECK-P8: # %bb.0: # %entry 1444; CHECK-P8-NEXT: mflr r0 1445; CHECK-P8-NEXT: std r0, 16(r1) 1446; CHECK-P8-NEXT: stdu r1, -32(r1) 1447; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1448; CHECK-P8-NEXT: .cfi_offset lr, 16 1449; CHECK-P8-NEXT: bl __extenddfkf2 1450; CHECK-P8-NEXT: nop 1451; CHECK-P8-NEXT: addi r1, r1, 32 1452; CHECK-P8-NEXT: ld r0, 16(r1) 1453; CHECK-P8-NEXT: mtlr r0 1454; CHECK-P8-NEXT: blr 1455entry: 1456 %conv = fpext double %a to fp128 1457 ret fp128 %conv 1458} 1459 1460; Function Attrs: norecurse nounwind 1461define void @dpConv2qp_02(double* nocapture readonly %a) { 1462; CHECK-LABEL: dpConv2qp_02: 1463; CHECK: # %bb.0: # %entry 1464; CHECK-NEXT: lxsd v2, 0(r3) 1465; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1466; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1467; CHECK-NEXT: xscvdpqp v2, v2 1468; CHECK-NEXT: stxvx v2, 0, r3 1469; CHECK-NEXT: blr 1470; 1471; CHECK-P8-LABEL: dpConv2qp_02: 1472; CHECK-P8: # %bb.0: # %entry 1473; CHECK-P8-NEXT: mflr r0 1474; CHECK-P8-NEXT: std r0, 16(r1) 1475; CHECK-P8-NEXT: stdu r1, -32(r1) 1476; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1477; CHECK-P8-NEXT: .cfi_offset lr, 16 1478; CHECK-P8-NEXT: lfdx f1, 0, r3 1479; CHECK-P8-NEXT: bl __extenddfkf2 1480; CHECK-P8-NEXT: nop 1481; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1482; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1483; CHECK-P8-NEXT: stvx v2, 0, r3 1484; CHECK-P8-NEXT: addi r1, r1, 32 1485; CHECK-P8-NEXT: ld r0, 16(r1) 1486; CHECK-P8-NEXT: mtlr r0 1487; CHECK-P8-NEXT: blr 1488entry: 1489 %0 = load double, double* %a, align 8 1490 %conv = fpext double %0 to fp128 1491 store fp128 %conv, fp128* @f128Glob, align 16 1492 ret void 1493} 1494 1495; Function Attrs: norecurse nounwind 1496define void @dpConv2qp_02b(double* nocapture readonly %a, i32 signext %idx) { 1497; CHECK-LABEL: dpConv2qp_02b: 1498; CHECK: # %bb.0: # %entry 1499; CHECK-NEXT: sldi r4, r4, 3 1500; CHECK-NEXT: lxsdx v2, r3, r4 1501; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1502; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1503; CHECK-NEXT: xscvdpqp v2, v2 1504; CHECK-NEXT: stxvx v2, 0, r3 1505; CHECK-NEXT: blr 1506; 1507; CHECK-P8-LABEL: dpConv2qp_02b: 1508; CHECK-P8: # %bb.0: # %entry 1509; CHECK-P8-NEXT: mflr r0 1510; CHECK-P8-NEXT: std r0, 16(r1) 1511; CHECK-P8-NEXT: stdu r1, -32(r1) 1512; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1513; CHECK-P8-NEXT: .cfi_offset lr, 16 1514; CHECK-P8-NEXT: sldi r4, r4, 3 1515; CHECK-P8-NEXT: lfdx f1, r3, r4 1516; CHECK-P8-NEXT: bl __extenddfkf2 1517; CHECK-P8-NEXT: nop 1518; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1519; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1520; CHECK-P8-NEXT: stvx v2, 0, r3 1521; CHECK-P8-NEXT: addi r1, r1, 32 1522; CHECK-P8-NEXT: ld r0, 16(r1) 1523; CHECK-P8-NEXT: mtlr r0 1524; CHECK-P8-NEXT: blr 1525entry: 1526 %idxprom = sext i32 %idx to i64 1527 %arrayidx = getelementptr inbounds double, double* %a, i64 %idxprom 1528 %0 = load double, double* %arrayidx, align 8 1529 %conv = fpext double %0 to fp128 1530 store fp128 %conv, fp128* @f128Glob, align 16 1531 ret void 1532} 1533 1534; Function Attrs: norecurse nounwind 1535define void @dpConv2qp_03(fp128* nocapture %res, i32 signext %idx, double %a) { 1536; CHECK-LABEL: dpConv2qp_03: 1537; CHECK: # %bb.0: # %entry 1538; CHECK-NEXT: xscpsgndp v2, f1, f1 1539; CHECK-NEXT: sldi r4, r4, 4 1540; CHECK-NEXT: xscvdpqp v2, v2 1541; CHECK-NEXT: stxvx v2, r3, r4 1542; CHECK-NEXT: blr 1543; 1544; CHECK-P8-LABEL: dpConv2qp_03: 1545; CHECK-P8: # %bb.0: # %entry 1546; CHECK-P8-NEXT: mflr r0 1547; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1548; CHECK-P8-NEXT: .cfi_offset lr, 16 1549; CHECK-P8-NEXT: .cfi_offset r29, -24 1550; CHECK-P8-NEXT: .cfi_offset r30, -16 1551; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1552; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1553; CHECK-P8-NEXT: std r0, 16(r1) 1554; CHECK-P8-NEXT: stdu r1, -64(r1) 1555; CHECK-P8-NEXT: mr r30, r4 1556; CHECK-P8-NEXT: mr r29, r3 1557; CHECK-P8-NEXT: bl __extenddfkf2 1558; CHECK-P8-NEXT: nop 1559; CHECK-P8-NEXT: sldi r3, r30, 4 1560; CHECK-P8-NEXT: stvx v2, r29, r3 1561; CHECK-P8-NEXT: addi r1, r1, 64 1562; CHECK-P8-NEXT: ld r0, 16(r1) 1563; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1564; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1565; CHECK-P8-NEXT: mtlr r0 1566; CHECK-P8-NEXT: blr 1567entry: 1568 %conv = fpext double %a to fp128 1569 %idxprom = sext i32 %idx to i64 1570 %arrayidx = getelementptr inbounds fp128, fp128* %res, i64 %idxprom 1571 store fp128 %conv, fp128* %arrayidx, align 16 1572 ret void 1573} 1574 1575; Function Attrs: norecurse nounwind 1576define void @dpConv2qp_04(double %a, fp128* nocapture %res) { 1577; CHECK-LABEL: dpConv2qp_04: 1578; CHECK: # %bb.0: # %entry 1579; CHECK-NEXT: xscpsgndp v2, f1, f1 1580; CHECK-NEXT: xscvdpqp v2, v2 1581; CHECK-NEXT: stxv v2, 0(r4) 1582; CHECK-NEXT: blr 1583; 1584; CHECK-P8-LABEL: dpConv2qp_04: 1585; CHECK-P8: # %bb.0: # %entry 1586; CHECK-P8-NEXT: mflr r0 1587; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1588; CHECK-P8-NEXT: .cfi_offset lr, 16 1589; CHECK-P8-NEXT: .cfi_offset r30, -16 1590; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1591; CHECK-P8-NEXT: std r0, 16(r1) 1592; CHECK-P8-NEXT: stdu r1, -48(r1) 1593; CHECK-P8-NEXT: mr r30, r4 1594; CHECK-P8-NEXT: bl __extenddfkf2 1595; CHECK-P8-NEXT: nop 1596; CHECK-P8-NEXT: stvx v2, 0, r30 1597; CHECK-P8-NEXT: addi r1, r1, 48 1598; CHECK-P8-NEXT: ld r0, 16(r1) 1599; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1600; CHECK-P8-NEXT: mtlr r0 1601; CHECK-P8-NEXT: blr 1602entry: 1603 %conv = fpext double %a to fp128 1604 store fp128 %conv, fp128* %res, align 16 1605 ret void 1606} 1607 1608; Function Attrs: norecurse nounwind readnone 1609define fp128 @spConv2qp(float %a) { 1610; CHECK-LABEL: spConv2qp: 1611; CHECK: # %bb.0: # %entry 1612; CHECK-NEXT: xscpsgndp v2, f1, f1 1613; CHECK-NEXT: xscvdpqp v2, v2 1614; CHECK-NEXT: blr 1615; 1616; CHECK-P8-LABEL: spConv2qp: 1617; CHECK-P8: # %bb.0: # %entry 1618; CHECK-P8-NEXT: mflr r0 1619; CHECK-P8-NEXT: std r0, 16(r1) 1620; CHECK-P8-NEXT: stdu r1, -32(r1) 1621; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1622; CHECK-P8-NEXT: .cfi_offset lr, 16 1623; CHECK-P8-NEXT: bl __extendsfkf2 1624; CHECK-P8-NEXT: nop 1625; CHECK-P8-NEXT: addi r1, r1, 32 1626; CHECK-P8-NEXT: ld r0, 16(r1) 1627; CHECK-P8-NEXT: mtlr r0 1628; CHECK-P8-NEXT: blr 1629entry: 1630 %conv = fpext float %a to fp128 1631 ret fp128 %conv 1632} 1633 1634; Function Attrs: norecurse nounwind 1635define void @spConv2qp_02(float* nocapture readonly %a) { 1636; CHECK-LABEL: spConv2qp_02: 1637; CHECK: # %bb.0: # %entry 1638; CHECK-NEXT: lxssp v2, 0(r3) 1639; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1640; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1641; CHECK-NEXT: xscvdpqp v2, v2 1642; CHECK-NEXT: stxvx v2, 0, r3 1643; CHECK-NEXT: blr 1644; 1645; CHECK-P8-LABEL: spConv2qp_02: 1646; CHECK-P8: # %bb.0: # %entry 1647; CHECK-P8-NEXT: mflr r0 1648; CHECK-P8-NEXT: std r0, 16(r1) 1649; CHECK-P8-NEXT: stdu r1, -32(r1) 1650; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1651; CHECK-P8-NEXT: .cfi_offset lr, 16 1652; CHECK-P8-NEXT: lfsx f1, 0, r3 1653; CHECK-P8-NEXT: bl __extendsfkf2 1654; CHECK-P8-NEXT: nop 1655; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1656; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1657; CHECK-P8-NEXT: stvx v2, 0, r3 1658; CHECK-P8-NEXT: addi r1, r1, 32 1659; CHECK-P8-NEXT: ld r0, 16(r1) 1660; CHECK-P8-NEXT: mtlr r0 1661; CHECK-P8-NEXT: blr 1662entry: 1663 %0 = load float, float* %a, align 4 1664 %conv = fpext float %0 to fp128 1665 store fp128 %conv, fp128* @f128Glob, align 16 1666 ret void 1667} 1668 1669; Function Attrs: norecurse nounwind 1670define void @spConv2qp_02b(float* nocapture readonly %a, i32 signext %idx) { 1671; CHECK-LABEL: spConv2qp_02b: 1672; CHECK: # %bb.0: # %entry 1673; CHECK-NEXT: sldi r4, r4, 2 1674; CHECK-NEXT: lxsspx v2, r3, r4 1675; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1676; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1677; CHECK-NEXT: xscvdpqp v2, v2 1678; CHECK-NEXT: stxvx v2, 0, r3 1679; CHECK-NEXT: blr 1680; 1681; CHECK-P8-LABEL: spConv2qp_02b: 1682; CHECK-P8: # %bb.0: # %entry 1683; CHECK-P8-NEXT: mflr r0 1684; CHECK-P8-NEXT: std r0, 16(r1) 1685; CHECK-P8-NEXT: stdu r1, -32(r1) 1686; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1687; CHECK-P8-NEXT: .cfi_offset lr, 16 1688; CHECK-P8-NEXT: sldi r4, r4, 2 1689; CHECK-P8-NEXT: lfsx f1, r3, r4 1690; CHECK-P8-NEXT: bl __extendsfkf2 1691; CHECK-P8-NEXT: nop 1692; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1693; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1694; CHECK-P8-NEXT: stvx v2, 0, r3 1695; CHECK-P8-NEXT: addi r1, r1, 32 1696; CHECK-P8-NEXT: ld r0, 16(r1) 1697; CHECK-P8-NEXT: mtlr r0 1698; CHECK-P8-NEXT: blr 1699entry: 1700 %idxprom = sext i32 %idx to i64 1701 %arrayidx = getelementptr inbounds float, float* %a, i64 %idxprom 1702 %0 = load float, float* %arrayidx, align 4 1703 %conv = fpext float %0 to fp128 1704 store fp128 %conv, fp128* @f128Glob, align 16 1705 ret void 1706} 1707 1708; Function Attrs: norecurse nounwind 1709define void @spConv2qp_03(fp128* nocapture %res, i32 signext %idx, float %a) { 1710; CHECK-LABEL: spConv2qp_03: 1711; CHECK: # %bb.0: # %entry 1712; CHECK-NEXT: xscpsgndp v2, f1, f1 1713; CHECK-NEXT: sldi r4, r4, 4 1714; CHECK-NEXT: xscvdpqp v2, v2 1715; CHECK-NEXT: stxvx v2, r3, r4 1716; CHECK-NEXT: blr 1717; 1718; CHECK-P8-LABEL: spConv2qp_03: 1719; CHECK-P8: # %bb.0: # %entry 1720; CHECK-P8-NEXT: mflr r0 1721; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1722; CHECK-P8-NEXT: .cfi_offset lr, 16 1723; CHECK-P8-NEXT: .cfi_offset r29, -24 1724; CHECK-P8-NEXT: .cfi_offset r30, -16 1725; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1726; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1727; CHECK-P8-NEXT: std r0, 16(r1) 1728; CHECK-P8-NEXT: stdu r1, -64(r1) 1729; CHECK-P8-NEXT: mr r30, r4 1730; CHECK-P8-NEXT: mr r29, r3 1731; CHECK-P8-NEXT: bl __extendsfkf2 1732; CHECK-P8-NEXT: nop 1733; CHECK-P8-NEXT: sldi r3, r30, 4 1734; CHECK-P8-NEXT: stvx v2, r29, r3 1735; CHECK-P8-NEXT: addi r1, r1, 64 1736; CHECK-P8-NEXT: ld r0, 16(r1) 1737; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1738; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1739; CHECK-P8-NEXT: mtlr r0 1740; CHECK-P8-NEXT: blr 1741entry: 1742 %conv = fpext float %a to fp128 1743 %idxprom = sext i32 %idx to i64 1744 %arrayidx = getelementptr inbounds fp128, fp128* %res, i64 %idxprom 1745 store fp128 %conv, fp128* %arrayidx, align 16 1746 ret void 1747} 1748 1749; Function Attrs: norecurse nounwind 1750define void @spConv2qp_04(float %a, fp128* nocapture %res) { 1751; CHECK-LABEL: spConv2qp_04: 1752; CHECK: # %bb.0: # %entry 1753; CHECK-NEXT: xscpsgndp v2, f1, f1 1754; CHECK-NEXT: xscvdpqp v2, v2 1755; CHECK-NEXT: stxv v2, 0(r4) 1756; CHECK-NEXT: blr 1757; 1758; CHECK-P8-LABEL: spConv2qp_04: 1759; CHECK-P8: # %bb.0: # %entry 1760; CHECK-P8-NEXT: mflr r0 1761; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1762; CHECK-P8-NEXT: .cfi_offset lr, 16 1763; CHECK-P8-NEXT: .cfi_offset r30, -16 1764; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1765; CHECK-P8-NEXT: std r0, 16(r1) 1766; CHECK-P8-NEXT: stdu r1, -48(r1) 1767; CHECK-P8-NEXT: mr r30, r4 1768; CHECK-P8-NEXT: bl __extendsfkf2 1769; CHECK-P8-NEXT: nop 1770; CHECK-P8-NEXT: stvx v2, 0, r30 1771; CHECK-P8-NEXT: addi r1, r1, 48 1772; CHECK-P8-NEXT: ld r0, 16(r1) 1773; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1774; CHECK-P8-NEXT: mtlr r0 1775; CHECK-P8-NEXT: blr 1776entry: 1777 %conv = fpext float %a to fp128 1778 store fp128 %conv, fp128* %res, align 16 1779 ret void 1780} 1781 1782 1783; Function Attrs: norecurse nounwind 1784define void @cvdp2sw2qp(double %val, fp128* nocapture %res) { 1785; CHECK-LABEL: cvdp2sw2qp: 1786; CHECK: # %bb.0: # %entry 1787; CHECK-NEXT: xscvdpsxws v2, f1 1788; CHECK-NEXT: vextsw2d v2, v2 1789; CHECK-NEXT: xscvsdqp v2, v2 1790; CHECK-NEXT: stxv v2, 0(r4) 1791; CHECK-NEXT: blr 1792; 1793; CHECK-P8-LABEL: cvdp2sw2qp: 1794; CHECK-P8: # %bb.0: # %entry 1795; CHECK-P8-NEXT: mflr r0 1796; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1797; CHECK-P8-NEXT: .cfi_offset lr, 16 1798; CHECK-P8-NEXT: .cfi_offset r30, -16 1799; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1800; CHECK-P8-NEXT: std r0, 16(r1) 1801; CHECK-P8-NEXT: stdu r1, -48(r1) 1802; CHECK-P8-NEXT: xscvdpsxws f0, f1 1803; CHECK-P8-NEXT: mr r30, r4 1804; CHECK-P8-NEXT: mffprwz r3, f0 1805; CHECK-P8-NEXT: extsw r3, r3 1806; CHECK-P8-NEXT: bl __floatsikf 1807; CHECK-P8-NEXT: nop 1808; CHECK-P8-NEXT: stvx v2, 0, r30 1809; CHECK-P8-NEXT: addi r1, r1, 48 1810; CHECK-P8-NEXT: ld r0, 16(r1) 1811; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1812; CHECK-P8-NEXT: mtlr r0 1813; CHECK-P8-NEXT: blr 1814entry: 1815 %conv = fptosi double %val to i32 1816 %conv1 = sitofp i32 %conv to fp128 1817 store fp128 %conv1, fp128* %res, align 16 1818 ret void 1819} 1820 1821; Function Attrs: norecurse nounwind 1822define void @cvdp2sdw2qp(double %val, fp128* nocapture %res) { 1823; CHECK-LABEL: cvdp2sdw2qp: 1824; CHECK: # %bb.0: # %entry 1825; CHECK-NEXT: xscvdpsxds v2, f1 1826; CHECK-NEXT: xscvsdqp v2, v2 1827; CHECK-NEXT: stxv v2, 0(r4) 1828; CHECK-NEXT: blr 1829; 1830; CHECK-P8-LABEL: cvdp2sdw2qp: 1831; CHECK-P8: # %bb.0: # %entry 1832; CHECK-P8-NEXT: mflr r0 1833; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1834; CHECK-P8-NEXT: .cfi_offset lr, 16 1835; CHECK-P8-NEXT: .cfi_offset r30, -16 1836; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1837; CHECK-P8-NEXT: std r0, 16(r1) 1838; CHECK-P8-NEXT: stdu r1, -48(r1) 1839; CHECK-P8-NEXT: xscvdpsxds f0, f1 1840; CHECK-P8-NEXT: mr r30, r4 1841; CHECK-P8-NEXT: mffprd r3, f0 1842; CHECK-P8-NEXT: bl __floatdikf 1843; CHECK-P8-NEXT: nop 1844; CHECK-P8-NEXT: stvx v2, 0, r30 1845; CHECK-P8-NEXT: addi r1, r1, 48 1846; CHECK-P8-NEXT: ld r0, 16(r1) 1847; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1848; CHECK-P8-NEXT: mtlr r0 1849; CHECK-P8-NEXT: blr 1850entry: 1851 %conv = fptosi double %val to i64 1852 %conv1 = sitofp i64 %conv to fp128 1853 store fp128 %conv1, fp128* %res, align 16 1854 ret void 1855} 1856 1857; Function Attrs: norecurse nounwind 1858define void @cvsp2sw2qp(float %val, fp128* nocapture %res) { 1859; CHECK-LABEL: cvsp2sw2qp: 1860; CHECK: # %bb.0: # %entry 1861; CHECK-NEXT: xscvdpsxws v2, f1 1862; CHECK-NEXT: vextsw2d v2, v2 1863; CHECK-NEXT: xscvsdqp v2, v2 1864; CHECK-NEXT: stxv v2, 0(r4) 1865; CHECK-NEXT: blr 1866; 1867; CHECK-P8-LABEL: cvsp2sw2qp: 1868; CHECK-P8: # %bb.0: # %entry 1869; CHECK-P8-NEXT: mflr r0 1870; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1871; CHECK-P8-NEXT: .cfi_offset lr, 16 1872; CHECK-P8-NEXT: .cfi_offset r30, -16 1873; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1874; CHECK-P8-NEXT: std r0, 16(r1) 1875; CHECK-P8-NEXT: stdu r1, -48(r1) 1876; CHECK-P8-NEXT: xscvdpsxws f0, f1 1877; CHECK-P8-NEXT: mr r30, r4 1878; CHECK-P8-NEXT: mffprwz r3, f0 1879; CHECK-P8-NEXT: extsw r3, r3 1880; CHECK-P8-NEXT: bl __floatsikf 1881; CHECK-P8-NEXT: nop 1882; CHECK-P8-NEXT: stvx v2, 0, r30 1883; CHECK-P8-NEXT: addi r1, r1, 48 1884; CHECK-P8-NEXT: ld r0, 16(r1) 1885; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1886; CHECK-P8-NEXT: mtlr r0 1887; CHECK-P8-NEXT: blr 1888entry: 1889 %conv = fptosi float %val to i32 1890 %conv1 = sitofp i32 %conv to fp128 1891 store fp128 %conv1, fp128* %res, align 16 1892 ret void 1893} 1894 1895; Function Attrs: norecurse nounwind 1896define void @cvsp2sdw2qp(float %val, fp128* nocapture %res) { 1897; CHECK-LABEL: cvsp2sdw2qp: 1898; CHECK: # %bb.0: # %entry 1899; CHECK-NEXT: xscvdpsxds v2, f1 1900; CHECK-NEXT: xscvsdqp v2, v2 1901; CHECK-NEXT: stxv v2, 0(r4) 1902; CHECK-NEXT: blr 1903; 1904; CHECK-P8-LABEL: cvsp2sdw2qp: 1905; CHECK-P8: # %bb.0: # %entry 1906; CHECK-P8-NEXT: mflr r0 1907; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1908; CHECK-P8-NEXT: .cfi_offset lr, 16 1909; CHECK-P8-NEXT: .cfi_offset r30, -16 1910; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1911; CHECK-P8-NEXT: std r0, 16(r1) 1912; CHECK-P8-NEXT: stdu r1, -48(r1) 1913; CHECK-P8-NEXT: xscvdpsxds f0, f1 1914; CHECK-P8-NEXT: mr r30, r4 1915; CHECK-P8-NEXT: mffprd r3, f0 1916; CHECK-P8-NEXT: bl __floatdikf 1917; CHECK-P8-NEXT: nop 1918; CHECK-P8-NEXT: stvx v2, 0, r30 1919; CHECK-P8-NEXT: addi r1, r1, 48 1920; CHECK-P8-NEXT: ld r0, 16(r1) 1921; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1922; CHECK-P8-NEXT: mtlr r0 1923; CHECK-P8-NEXT: blr 1924entry: 1925 %conv = fptosi float %val to i64 1926 %conv1 = sitofp i64 %conv to fp128 1927 store fp128 %conv1, fp128* %res, align 16 1928 ret void 1929} 1930 1931; Function Attrs: norecurse nounwind 1932define void @cvdp2uw2qp(double %val, fp128* nocapture %res) { 1933; CHECK-LABEL: cvdp2uw2qp: 1934; CHECK: # %bb.0: # %entry 1935; CHECK-NEXT: xscvdpuxws f0, f1 1936; CHECK-NEXT: xxextractuw v2, vs0, 8 1937; CHECK-NEXT: xscvudqp v2, v2 1938; CHECK-NEXT: stxv v2, 0(r4) 1939; CHECK-NEXT: blr 1940; 1941; CHECK-P8-LABEL: cvdp2uw2qp: 1942; CHECK-P8: # %bb.0: # %entry 1943; CHECK-P8-NEXT: mflr r0 1944; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1945; CHECK-P8-NEXT: .cfi_offset lr, 16 1946; CHECK-P8-NEXT: .cfi_offset r30, -16 1947; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1948; CHECK-P8-NEXT: std r0, 16(r1) 1949; CHECK-P8-NEXT: stdu r1, -48(r1) 1950; CHECK-P8-NEXT: xscvdpuxws f0, f1 1951; CHECK-P8-NEXT: mr r30, r4 1952; CHECK-P8-NEXT: mffprwz r3, f0 1953; CHECK-P8-NEXT: clrldi r3, r3, 32 1954; CHECK-P8-NEXT: bl __floatunsikf 1955; CHECK-P8-NEXT: nop 1956; CHECK-P8-NEXT: stvx v2, 0, r30 1957; CHECK-P8-NEXT: addi r1, r1, 48 1958; CHECK-P8-NEXT: ld r0, 16(r1) 1959; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1960; CHECK-P8-NEXT: mtlr r0 1961; CHECK-P8-NEXT: blr 1962entry: 1963 %conv = fptoui double %val to i32 1964 %conv1 = uitofp i32 %conv to fp128 1965 store fp128 %conv1, fp128* %res, align 16 1966 ret void 1967} 1968 1969; Function Attrs: norecurse nounwind 1970define void @cvdp2udw2qp(double %val, fp128* nocapture %res) { 1971; CHECK-LABEL: cvdp2udw2qp: 1972; CHECK: # %bb.0: # %entry 1973; CHECK-NEXT: xscvdpuxds v2, f1 1974; CHECK-NEXT: xscvudqp v2, v2 1975; CHECK-NEXT: stxv v2, 0(r4) 1976; CHECK-NEXT: blr 1977; 1978; CHECK-P8-LABEL: cvdp2udw2qp: 1979; CHECK-P8: # %bb.0: # %entry 1980; CHECK-P8-NEXT: mflr r0 1981; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1982; CHECK-P8-NEXT: .cfi_offset lr, 16 1983; CHECK-P8-NEXT: .cfi_offset r30, -16 1984; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1985; CHECK-P8-NEXT: std r0, 16(r1) 1986; CHECK-P8-NEXT: stdu r1, -48(r1) 1987; CHECK-P8-NEXT: xscvdpuxds f0, f1 1988; CHECK-P8-NEXT: mr r30, r4 1989; CHECK-P8-NEXT: mffprd r3, f0 1990; CHECK-P8-NEXT: bl __floatundikf 1991; CHECK-P8-NEXT: nop 1992; CHECK-P8-NEXT: stvx v2, 0, r30 1993; CHECK-P8-NEXT: addi r1, r1, 48 1994; CHECK-P8-NEXT: ld r0, 16(r1) 1995; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1996; CHECK-P8-NEXT: mtlr r0 1997; CHECK-P8-NEXT: blr 1998entry: 1999 %conv = fptoui double %val to i64 2000 %conv1 = uitofp i64 %conv to fp128 2001 store fp128 %conv1, fp128* %res, align 16 2002 ret void 2003} 2004 2005; Function Attrs: norecurse nounwind 2006define void @cvsp2uw2qp(float %val, fp128* nocapture %res) { 2007; CHECK-LABEL: cvsp2uw2qp: 2008; CHECK: # %bb.0: # %entry 2009; CHECK-NEXT: xscvdpuxws f0, f1 2010; CHECK-NEXT: xxextractuw v2, vs0, 8 2011; CHECK-NEXT: xscvudqp v2, v2 2012; CHECK-NEXT: stxv v2, 0(r4) 2013; CHECK-NEXT: blr 2014; 2015; CHECK-P8-LABEL: cvsp2uw2qp: 2016; CHECK-P8: # %bb.0: # %entry 2017; CHECK-P8-NEXT: mflr r0 2018; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 2019; CHECK-P8-NEXT: .cfi_offset lr, 16 2020; CHECK-P8-NEXT: .cfi_offset r30, -16 2021; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 2022; CHECK-P8-NEXT: std r0, 16(r1) 2023; CHECK-P8-NEXT: stdu r1, -48(r1) 2024; CHECK-P8-NEXT: xscvdpuxws f0, f1 2025; CHECK-P8-NEXT: mr r30, r4 2026; CHECK-P8-NEXT: mffprwz r3, f0 2027; CHECK-P8-NEXT: clrldi r3, r3, 32 2028; CHECK-P8-NEXT: bl __floatunsikf 2029; CHECK-P8-NEXT: nop 2030; CHECK-P8-NEXT: stvx v2, 0, r30 2031; CHECK-P8-NEXT: addi r1, r1, 48 2032; CHECK-P8-NEXT: ld r0, 16(r1) 2033; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2034; CHECK-P8-NEXT: mtlr r0 2035; CHECK-P8-NEXT: blr 2036entry: 2037 %conv = fptoui float %val to i32 2038 %conv1 = uitofp i32 %conv to fp128 2039 store fp128 %conv1, fp128* %res, align 16 2040 ret void 2041} 2042 2043; Function Attrs: norecurse nounwind 2044define void @cvsp2udw2qp(float %val, fp128* nocapture %res) { 2045; CHECK-LABEL: cvsp2udw2qp: 2046; CHECK: # %bb.0: # %entry 2047; CHECK-NEXT: xscvdpuxds v2, f1 2048; CHECK-NEXT: xscvudqp v2, v2 2049; CHECK-NEXT: stxv v2, 0(r4) 2050; CHECK-NEXT: blr 2051; 2052; CHECK-P8-LABEL: cvsp2udw2qp: 2053; CHECK-P8: # %bb.0: # %entry 2054; CHECK-P8-NEXT: mflr r0 2055; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 2056; CHECK-P8-NEXT: .cfi_offset lr, 16 2057; CHECK-P8-NEXT: .cfi_offset r30, -16 2058; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 2059; CHECK-P8-NEXT: std r0, 16(r1) 2060; CHECK-P8-NEXT: stdu r1, -48(r1) 2061; CHECK-P8-NEXT: xscvdpuxds f0, f1 2062; CHECK-P8-NEXT: mr r30, r4 2063; CHECK-P8-NEXT: mffprd r3, f0 2064; CHECK-P8-NEXT: bl __floatundikf 2065; CHECK-P8-NEXT: nop 2066; CHECK-P8-NEXT: stvx v2, 0, r30 2067; CHECK-P8-NEXT: addi r1, r1, 48 2068; CHECK-P8-NEXT: ld r0, 16(r1) 2069; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2070; CHECK-P8-NEXT: mtlr r0 2071; CHECK-P8-NEXT: blr 2072entry: 2073 %conv = fptoui float %val to i64 2074 %conv1 = uitofp i64 %conv to fp128 2075 store fp128 %conv1, fp128* %res, align 16 2076 ret void 2077} 2078 2079; Function Attrs: norecurse nounwind readonly 2080define i128 @qpConv2i128(fp128* nocapture readonly %a) { 2081; CHECK-LABEL: qpConv2i128: 2082; CHECK: # %bb.0: # %entry 2083; CHECK-NEXT: mflr r0 2084; CHECK-NEXT: std r0, 16(r1) 2085; CHECK-NEXT: stdu r1, -32(r1) 2086; CHECK-NEXT: .cfi_def_cfa_offset 32 2087; CHECK-NEXT: .cfi_offset lr, 16 2088; CHECK-NEXT: lxv v2, 0(r3) 2089; CHECK-NEXT: bl __fixkfti 2090; CHECK-NEXT: nop 2091; CHECK-NEXT: addi r1, r1, 32 2092; CHECK-NEXT: ld r0, 16(r1) 2093; CHECK-NEXT: mtlr r0 2094; CHECK-NEXT: blr 2095; 2096; CHECK-P8-LABEL: qpConv2i128: 2097; CHECK-P8: # %bb.0: # %entry 2098; CHECK-P8-NEXT: mflr r0 2099; CHECK-P8-NEXT: std r0, 16(r1) 2100; CHECK-P8-NEXT: stdu r1, -32(r1) 2101; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2102; CHECK-P8-NEXT: .cfi_offset lr, 16 2103; CHECK-P8-NEXT: lvx v2, 0, r3 2104; CHECK-P8-NEXT: bl __fixkfti 2105; CHECK-P8-NEXT: nop 2106; CHECK-P8-NEXT: addi r1, r1, 32 2107; CHECK-P8-NEXT: ld r0, 16(r1) 2108; CHECK-P8-NEXT: mtlr r0 2109; CHECK-P8-NEXT: blr 2110entry: 2111 %0 = load fp128, fp128* %a, align 16 2112 %conv = fptosi fp128 %0 to i128 2113 ret i128 %conv 2114} 2115 2116; Function Attrs: norecurse nounwind readonly 2117define i128 @qpConv2ui128(fp128* nocapture readonly %a) { 2118; CHECK-LABEL: qpConv2ui128: 2119; CHECK: # %bb.0: # %entry 2120; CHECK-NEXT: mflr r0 2121; CHECK-NEXT: std r0, 16(r1) 2122; CHECK-NEXT: stdu r1, -32(r1) 2123; CHECK-NEXT: .cfi_def_cfa_offset 32 2124; CHECK-NEXT: .cfi_offset lr, 16 2125; CHECK-NEXT: lxv v2, 0(r3) 2126; CHECK-NEXT: bl __fixunskfti 2127; CHECK-NEXT: nop 2128; CHECK-NEXT: addi r1, r1, 32 2129; CHECK-NEXT: ld r0, 16(r1) 2130; CHECK-NEXT: mtlr r0 2131; CHECK-NEXT: blr 2132; 2133; CHECK-P8-LABEL: qpConv2ui128: 2134; CHECK-P8: # %bb.0: # %entry 2135; CHECK-P8-NEXT: mflr r0 2136; CHECK-P8-NEXT: std r0, 16(r1) 2137; CHECK-P8-NEXT: stdu r1, -32(r1) 2138; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2139; CHECK-P8-NEXT: .cfi_offset lr, 16 2140; CHECK-P8-NEXT: lvx v2, 0, r3 2141; CHECK-P8-NEXT: bl __fixunskfti 2142; CHECK-P8-NEXT: nop 2143; CHECK-P8-NEXT: addi r1, r1, 32 2144; CHECK-P8-NEXT: ld r0, 16(r1) 2145; CHECK-P8-NEXT: mtlr r0 2146; CHECK-P8-NEXT: blr 2147entry: 2148 %0 = load fp128, fp128* %a, align 16 2149 %conv = fptoui fp128 %0 to i128 2150 ret i128 %conv 2151} 2152 2153; Function Attrs: norecurse nounwind readonly 2154define i1 @qpConv2ui1(fp128* nocapture readonly %a) { 2155; CHECK-LABEL: qpConv2ui1: 2156; CHECK: # %bb.0: # %entry 2157; CHECK-NEXT: lxv v2, 0(r3) 2158; CHECK-NEXT: xscvqpswz v2, v2 2159; CHECK-NEXT: mfvsrwz r3, v2 2160; CHECK-NEXT: blr 2161; 2162; CHECK-P8-LABEL: qpConv2ui1: 2163; CHECK-P8: # %bb.0: # %entry 2164; CHECK-P8-NEXT: mflr r0 2165; CHECK-P8-NEXT: std r0, 16(r1) 2166; CHECK-P8-NEXT: stdu r1, -32(r1) 2167; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2168; CHECK-P8-NEXT: .cfi_offset lr, 16 2169; CHECK-P8-NEXT: lvx v2, 0, r3 2170; CHECK-P8-NEXT: bl __fixkfsi 2171; CHECK-P8-NEXT: nop 2172; CHECK-P8-NEXT: addi r1, r1, 32 2173; CHECK-P8-NEXT: ld r0, 16(r1) 2174; CHECK-P8-NEXT: mtlr r0 2175; CHECK-P8-NEXT: blr 2176entry: 2177 %0 = load fp128, fp128* %a, align 16 2178 %conv = fptoui fp128 %0 to i1 2179 ret i1 %conv 2180} 2181 2182; Function Attrs: norecurse nounwind readonly 2183define i1 @qpConv2si1(fp128* nocapture readonly %a) { 2184; CHECK-LABEL: qpConv2si1: 2185; CHECK: # %bb.0: # %entry 2186; CHECK-NEXT: lxv v2, 0(r3) 2187; CHECK-NEXT: xscvqpswz v2, v2 2188; CHECK-NEXT: mfvsrwz r3, v2 2189; CHECK-NEXT: blr 2190; 2191; CHECK-P8-LABEL: qpConv2si1: 2192; CHECK-P8: # %bb.0: # %entry 2193; CHECK-P8-NEXT: mflr r0 2194; CHECK-P8-NEXT: std r0, 16(r1) 2195; CHECK-P8-NEXT: stdu r1, -32(r1) 2196; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2197; CHECK-P8-NEXT: .cfi_offset lr, 16 2198; CHECK-P8-NEXT: lvx v2, 0, r3 2199; CHECK-P8-NEXT: bl __fixkfsi 2200; CHECK-P8-NEXT: nop 2201; CHECK-P8-NEXT: addi r1, r1, 32 2202; CHECK-P8-NEXT: ld r0, 16(r1) 2203; CHECK-P8-NEXT: mtlr r0 2204; CHECK-P8-NEXT: blr 2205entry: 2206 %0 = load fp128, fp128* %a, align 16 2207 %conv = fptosi fp128 %0 to i1 2208 ret i1 %conv 2209} 2210