1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-- \ 3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s 4; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \ 5; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s 6; RUN: llc -verify-machineinstrs -target-abi=elfv2 -mtriple=powerpc64-- \ 7; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=CHECK-P9 8 9 define float @FloatConstantPool() { 10; CHECK-LABEL: FloatConstantPool: 11; CHECK: # %bb.0: # %entry 12; CHECK-NEXT: xxsplti32dx vs1, 0, 940572664 13; CHECK-NEXT: xxsplti32dx vs1, 1, 1073741824 14; CHECK-NEXT: # kill: def $f1 killed $f1 killed $vsl1 15; CHECK-NEXT: blr 16; 17; CHECK-P9-LABEL: FloatConstantPool: 18; CHECK-P9: # %bb.0: # %entry 19; CHECK-P9-NEXT: addis r3, r2, .LCPI0_0@toc@ha 20; CHECK-P9-NEXT: lfs f1, .LCPI0_0@toc@l(r3) 21; CHECK-P9-NEXT: blr 22entry: 23 ret float 0x380FFFF840000000 24} 25 26 define double @DoubleConstantPool() { 27; CHECK-LABEL: DoubleConstantPool: 28; CHECK: # %bb.0: # %entry 29; CHECK-NEXT: xxsplti32dx vs1, 0, 1048574 30; CHECK-NEXT: xxsplti32dx vs1, 1, 780229072 31; CHECK-NEXT: # kill: def $f1 killed $f1 killed $vsl1 32; CHECK-NEXT: blr 33; 34; CHECK-P9-LABEL: DoubleConstantPool: 35; CHECK-P9: # %bb.0: # %entry 36; CHECK-P9-NEXT: addis r3, r2, .LCPI1_0@toc@ha 37; CHECK-P9-NEXT: lfd f1, .LCPI1_0@toc@l(r3) 38; CHECK-P9-NEXT: blr 39entry: 40 ret double 2.225070e-308 41} 42 43 define ppc_fp128 @LongDoubleConstantPool() { 44; CHECK-LABEL: LongDoubleConstantPool: 45; CHECK: # %bb.0: # %entry 46; CHECK-NEXT: xxsplti32dx vs1, 0, 56623104 47; CHECK-NEXT: xxsplti32dx vs2, 0, -2146625897 48; CHECK-NEXT: xxsplti32dx vs1, 1, -609716532 49; CHECK-NEXT: xxsplti32dx vs2, 1, 1339675259 50; CHECK-NEXT: # kill: def $f1 killed $f1 killed $vsl1 51; CHECK-NEXT: # kill: def $f2 killed $f2 killed $vsl2 52; CHECK-NEXT: blr 53; 54; CHECK-P9-LABEL: LongDoubleConstantPool: 55; CHECK-P9: # %bb.0: # %entry 56; CHECK-P9-NEXT: addis r3, r2, .LCPI2_0@toc@ha 57; CHECK-P9-NEXT: lfd f1, .LCPI2_0@toc@l(r3) 58; CHECK-P9-NEXT: addis r3, r2, .LCPI2_1@toc@ha 59; CHECK-P9-NEXT: lfd f2, .LCPI2_1@toc@l(r3) 60; CHECK-P9-NEXT: blr 61entry: 62 ret ppc_fp128 0xM03600000DBA876CC800D16974FD9D27B 63} 64 65 define fp128 @__Float128ConstantPool() { 66; CHECK-LABEL: __Float128ConstantPool: 67; CHECK: # %bb.0: # %entry 68; CHECK-NEXT: plxv vs34, .LCPI3_0@PCREL(0), 1 69; CHECK-NEXT: blr 70; 71; CHECK-P9-LABEL: __Float128ConstantPool: 72; CHECK-P9: # %bb.0: # %entry 73; CHECK-P9-NEXT: addis r3, r2, .LCPI3_0@toc@ha 74; CHECK-P9-NEXT: addi r3, r3, .LCPI3_0@toc@l 75; CHECK-P9-NEXT: lxv vs34, 0(r3) 76; CHECK-P9-NEXT: blr 77entry: 78 ret fp128 0xL00000000000000003C00FFFFC5D02B3A 79} 80 81 define <16 x i8> @VectorCharConstantPool() { 82; CHECK-LABEL: VectorCharConstantPool: 83; CHECK: # %bb.0: # %entry 84; CHECK-NEXT: plxv vs34, .LCPI4_0@PCREL(0), 1 85; CHECK-NEXT: blr 86; 87; CHECK-P9-LABEL: VectorCharConstantPool: 88; CHECK-P9: # %bb.0: # %entry 89; CHECK-P9-NEXT: addis r3, r2, .LCPI4_0@toc@ha 90; CHECK-P9-NEXT: addi r3, r3, .LCPI4_0@toc@l 91; CHECK-P9-NEXT: lxv vs34, 0(r3) 92; CHECK-P9-NEXT: blr 93entry: 94 ret <16 x i8> <i8 -128, i8 -127, i8 -126, i8 -125, i8 -124, i8 -123, i8 -122, i8 -121, i8 -120, i8 -119, i8 -118, i8 -117, i8 -116, i8 -115, i8 -114, i8 -113> 95} 96 97 define <8 x i16> @VectorShortConstantPool() { 98; CHECK-LABEL: VectorShortConstantPool: 99; CHECK: # %bb.0: # %entry 100; CHECK-NEXT: plxv vs34, .LCPI5_0@PCREL(0), 1 101; CHECK-NEXT: blr 102; 103; CHECK-P9-LABEL: VectorShortConstantPool: 104; CHECK-P9: # %bb.0: # %entry 105; CHECK-P9-NEXT: addis r3, r2, .LCPI5_0@toc@ha 106; CHECK-P9-NEXT: addi r3, r3, .LCPI5_0@toc@l 107; CHECK-P9-NEXT: lxv vs34, 0(r3) 108; CHECK-P9-NEXT: blr 109entry: 110 ret <8 x i16> <i16 -32768, i16 -32767, i16 -32766, i16 -32765, i16 -32764, i16 -32763, i16 -32762, i16 -32761> 111} 112 113 define <4 x i32> @VectorIntConstantPool() { 114; CHECK-LABEL: VectorIntConstantPool: 115; CHECK: # %bb.0: # %entry 116; CHECK-NEXT: plxv vs34, .LCPI6_0@PCREL(0), 1 117; CHECK-NEXT: blr 118; 119; CHECK-P9-LABEL: VectorIntConstantPool: 120; CHECK-P9: # %bb.0: # %entry 121; CHECK-P9-NEXT: addis r3, r2, .LCPI6_0@toc@ha 122; CHECK-P9-NEXT: addi r3, r3, .LCPI6_0@toc@l 123; CHECK-P9-NEXT: lxv vs34, 0(r3) 124; CHECK-P9-NEXT: blr 125entry: 126 ret <4 x i32> <i32 -2147483648, i32 -2147483647, i32 -2147483646, i32 -2147483645> 127} 128 129 define <2 x i64> @VectorLongLongConstantPool() { 130; CHECK-LABEL: VectorLongLongConstantPool: 131; CHECK: # %bb.0: # %entry 132; CHECK-NEXT: plxv vs34, .LCPI7_0@PCREL(0), 1 133; CHECK-NEXT: blr 134; 135; CHECK-P9-LABEL: VectorLongLongConstantPool: 136; CHECK-P9: # %bb.0: # %entry 137; CHECK-P9-NEXT: addis r3, r2, .LCPI7_0@toc@ha 138; CHECK-P9-NEXT: addi r3, r3, .LCPI7_0@toc@l 139; CHECK-P9-NEXT: lxv vs34, 0(r3) 140; CHECK-P9-NEXT: blr 141entry: 142 ret <2 x i64> <i64 -9223372036854775808, i64 -9223372036854775807> 143} 144 145 define <1 x i128> @VectorInt128ConstantPool() { 146; CHECK-LABEL: VectorInt128ConstantPool: 147; CHECK: # %bb.0: # %entry 148; CHECK-NEXT: plxv vs34, .LCPI8_0@PCREL(0), 1 149; CHECK-NEXT: blr 150; 151; CHECK-P9-LABEL: VectorInt128ConstantPool: 152; CHECK-P9: # %bb.0: # %entry 153; CHECK-P9-NEXT: addis r3, r2, .LCPI8_0@toc@ha 154; CHECK-P9-NEXT: addi r3, r3, .LCPI8_0@toc@l 155; CHECK-P9-NEXT: lxv vs34, 0(r3) 156; CHECK-P9-NEXT: blr 157entry: 158 ret <1 x i128> <i128 -27670116110564327424> 159} 160 161 define <4 x float> @VectorFloatConstantPool() { 162; CHECK-LABEL: VectorFloatConstantPool: 163; CHECK: # %bb.0: # %entry 164; CHECK-NEXT: plxv vs34, .LCPI9_0@PCREL(0), 1 165; CHECK-NEXT: blr 166; 167; CHECK-P9-LABEL: VectorFloatConstantPool: 168; CHECK-P9: # %bb.0: # %entry 169; CHECK-P9-NEXT: addis r3, r2, .LCPI9_0@toc@ha 170; CHECK-P9-NEXT: addi r3, r3, .LCPI9_0@toc@l 171; CHECK-P9-NEXT: lxv vs34, 0(r3) 172; CHECK-P9-NEXT: blr 173entry: 174 ret <4 x float> <float 0x380FFFF840000000, float 0x380FFF57C0000000, float 0x3843FFFB20000000, float 0x3843FF96C0000000> 175} 176 177 define <2 x double> @VectorDoubleConstantPool() { 178; CHECK-LABEL: VectorDoubleConstantPool: 179; CHECK: # %bb.0: # %entry 180; CHECK-NEXT: plxv vs34, .LCPI10_0@PCREL(0), 1 181; CHECK-NEXT: blr 182; 183; CHECK-P9-LABEL: VectorDoubleConstantPool: 184; CHECK-P9: # %bb.0: # %entry 185; CHECK-P9-NEXT: addis r3, r2, .LCPI10_0@toc@ha 186; CHECK-P9-NEXT: addi r3, r3, .LCPI10_0@toc@l 187; CHECK-P9-NEXT: lxv vs34, 0(r3) 188; CHECK-P9-NEXT: blr 189entry: 190 ret <2 x double> <double 2.225070e-308, double 2.225000e-308> 191} 192 193define double @two_constants(double %a) { 194; CHECK-LABEL: two_constants: 195; CHECK: # %bb.0: # %entry 196; CHECK-NEXT: xxsplti32dx vs0, 0, 1074446467 197; CHECK-NEXT: xxsplti32dx vs0, 1, 309237645 198; CHECK-NEXT: xsadddp f0, f1, f0 199; CHECK-NEXT: xxsplti32dx vs1, 0, 1073922179 200; CHECK-NEXT: xxsplti32dx vs1, 1, 309237645 201; CHECK-NEXT: xsadddp f1, f0, f1 202; CHECK-NEXT: blr 203; 204; CHECK-P9-LABEL: two_constants: 205; CHECK-P9: # %bb.0: # %entry 206; CHECK-P9-NEXT: addis r3, r2, .LCPI11_0@toc@ha 207; CHECK-P9-NEXT: lfd f0, .LCPI11_0@toc@l(r3) 208; CHECK-P9-NEXT: addis r3, r2, .LCPI11_1@toc@ha 209; CHECK-P9-NEXT: xsadddp f0, f1, f0 210; CHECK-P9-NEXT: lfd f1, .LCPI11_1@toc@l(r3) 211; CHECK-P9-NEXT: xsadddp f1, f0, f1 212; CHECK-P9-NEXT: blr 213entry: 214 %0 = fadd double %a, 3.344000e+00 215 %1 = fadd double %0, 2.344000e+00 216 ret double %1 217} 218 219define double @two_constants_two_bb(i32 %m, double %a) { 220; CHECK-LABEL: two_constants_two_bb: 221; CHECK: # %bb.0: # %entry 222; CHECK-NEXT: cmplwi r3, 0 223; CHECK-NEXT: beq cr0, .LBB12_2 224; CHECK-NEXT: # %bb.1: 225; CHECK-NEXT: xxsplti32dx vs1, 0, 1074935889 226; CHECK-NEXT: xxsplti32dx vs1, 1, -343597384 227; CHECK-NEXT: # kill: def $f1 killed $f1 killed $vsl1 228; CHECK-NEXT: blr 229; CHECK-NEXT: .LBB12_2: # %if.end 230; CHECK-NEXT: xxsplti32dx vs0, 0, 1076085391 231; CHECK-NEXT: xxsplti32dx vs0, 1, 1546188227 232; CHECK-NEXT: xsadddp f1, f1, f0 233; CHECK-NEXT: # kill: def $f1 killed $f1 killed $vsl1 234; CHECK-NEXT: blr 235; 236; CHECK-P9-LABEL: two_constants_two_bb: 237; CHECK-P9: # %bb.0: # %entry 238; CHECK-P9-NEXT: cmplwi r3, 0 239; CHECK-P9-NEXT: beq cr0, .LBB12_2 240; CHECK-P9-NEXT: # %bb.1: 241; CHECK-P9-NEXT: addis r3, r2, .LCPI12_0@toc@ha 242; CHECK-P9-NEXT: lfd f1, .LCPI12_0@toc@l(r3) 243; CHECK-P9-NEXT: blr 244; CHECK-P9-NEXT: .LBB12_2: # %if.end 245; CHECK-P9-NEXT: addis r3, r2, .LCPI12_1@toc@ha 246; CHECK-P9-NEXT: lfd f0, .LCPI12_1@toc@l(r3) 247; CHECK-P9-NEXT: xsadddp f1, f1, f0 248; CHECK-P9-NEXT: blr 249entry: 250 %tobool.not = icmp eq i32 %m, 0 251 br i1 %tobool.not, label %if.end, label %return 252 253if.end: 254 %add = fadd double %a, 9.880000e+00 255 br label %return 256 257return: 258 %retval.0 = phi double [ %add, %if.end ], [ 4.555000e+00, %entry ] 259 ret double %retval.0 260} 261 262define double @three_constants_f64(double %a, double %c) { 263; CHECK-LABEL: three_constants_f64: 264; CHECK: # %bb.0: # %entry 265; CHECK-NEXT: xxsplti32dx vs0, 0, 1074446467 266; CHECK-NEXT: xxsplti32dx vs0, 1, 309237645 267; CHECK-NEXT: xsadddp f0, f1, f0 268; CHECK-NEXT: xxsplti32dx vs1, 0, 1073922179 269; CHECK-NEXT: xxsplti32dx vs1, 1, 309237645 270; CHECK-NEXT: xsadddp f0, f0, f1 271; CHECK-NEXT: xxsplti32dx vs1, 0, 1073948393 272; CHECK-NEXT: xxsplti32dx vs1, 1, 2027224564 273; CHECK-NEXT: xsadddp f1, f0, f1 274; CHECK-NEXT: blr 275; 276; CHECK-P9-LABEL: three_constants_f64: 277; CHECK-P9: # %bb.0: # %entry 278; CHECK-P9-NEXT: addis r3, r2, .LCPI13_0@toc@ha 279; CHECK-P9-NEXT: lfd f0, .LCPI13_0@toc@l(r3) 280; CHECK-P9-NEXT: addis r3, r2, .LCPI13_1@toc@ha 281; CHECK-P9-NEXT: xsadddp f0, f1, f0 282; CHECK-P9-NEXT: lfd f1, .LCPI13_1@toc@l(r3) 283; CHECK-P9-NEXT: addis r3, r2, .LCPI13_2@toc@ha 284; CHECK-P9-NEXT: xsadddp f0, f0, f1 285; CHECK-P9-NEXT: lfd f1, .LCPI13_2@toc@l(r3) 286; CHECK-P9-NEXT: xsadddp f1, f0, f1 287; CHECK-P9-NEXT: blr 288entry: 289 %0 = fadd double %a, 3.344000e+00 290 %1 = fadd double %0, 2.344000e+00 291 %2 = fadd double %1, 2.394000e+00 292 ret double %2 293} 294 295define float @three_constants_f32(float %a, float %c) { 296; CHECK-LABEL: three_constants_f32: 297; CHECK: # %bb.0: # %entry 298; CHECK-NEXT: xxspltidp vs0, 1083294351 299; CHECK-NEXT: xsaddsp f0, f1, f0 300; CHECK-NEXT: xxspltidp vs1, 1083296911 301; CHECK-NEXT: xsaddsp f0, f0, f1 302; CHECK-NEXT: xxspltidp vs1, 1083292559 303; CHECK-NEXT: xsaddsp f1, f0, f1 304; CHECK-NEXT: blr 305; 306; CHECK-P9-LABEL: three_constants_f32: 307; CHECK-P9: # %bb.0: # %entry 308; CHECK-P9-NEXT: addis r3, r2, .LCPI14_0@toc@ha 309; CHECK-P9-NEXT: lfs f0, .LCPI14_0@toc@l(r3) 310; CHECK-P9-NEXT: addis r3, r2, .LCPI14_1@toc@ha 311; CHECK-P9-NEXT: xsaddsp f0, f1, f0 312; CHECK-P9-NEXT: lfs f1, .LCPI14_1@toc@l(r3) 313; CHECK-P9-NEXT: addis r3, r2, .LCPI14_2@toc@ha 314; CHECK-P9-NEXT: xsaddsp f0, f0, f1 315; CHECK-P9-NEXT: lfs f1, .LCPI14_2@toc@l(r3) 316; CHECK-P9-NEXT: xsaddsp f1, f0, f1 317; CHECK-P9-NEXT: blr 318entry: 319 %0 = fadd float %a, 0x40123851E0000000 320 %1 = fadd float %0, 0x40123991E0000000 321 %2 = fadd float %1, 0x40123771E0000000 322 ret float %2 323} 324 325define fp128 @three_constants_f128(fp128 %a, fp128 %c) { 326; CHECK-LABEL: three_constants_f128: 327; CHECK: # %bb.0: # %entry 328; CHECK-NEXT: plxv vs35, .LCPI15_0@PCREL(0), 1 329; CHECK-NEXT: xsaddqp v2, v2, v3 330; CHECK-NEXT: plxv vs35, .LCPI15_1@PCREL(0), 1 331; CHECK-NEXT: xsaddqp v2, v2, v3 332; CHECK-NEXT: plxv vs35, .LCPI15_2@PCREL(0), 1 333; CHECK-NEXT: xsaddqp v2, v2, v3 334; CHECK-NEXT: blr 335; 336; CHECK-P9-LABEL: three_constants_f128: 337; CHECK-P9: # %bb.0: # %entry 338; CHECK-P9-NEXT: addis r3, r2, .LCPI15_0@toc@ha 339; CHECK-P9-NEXT: addi r3, r3, .LCPI15_0@toc@l 340; CHECK-P9-NEXT: lxv vs35, 0(r3) 341; CHECK-P9-NEXT: addis r3, r2, .LCPI15_1@toc@ha 342; CHECK-P9-NEXT: addi r3, r3, .LCPI15_1@toc@l 343; CHECK-P9-NEXT: xsaddqp v2, v2, v3 344; CHECK-P9-NEXT: lxv vs35, 0(r3) 345; CHECK-P9-NEXT: addis r3, r2, .LCPI15_2@toc@ha 346; CHECK-P9-NEXT: addi r3, r3, .LCPI15_2@toc@l 347; CHECK-P9-NEXT: xsaddqp v2, v2, v3 348; CHECK-P9-NEXT: lxv vs35, 0(r3) 349; CHECK-P9-NEXT: xsaddqp v2, v2, v3 350; CHECK-P9-NEXT: blr 351entry: 352 %0 = fadd fp128 %a, 0xL8000000000000000400123851EB851EB 353 %1 = fadd fp128 %0, 0xL8000000000000000400123851EB991EB 354 %2 = fadd fp128 %1, 0xL8000000000000000400123851EB771EB 355 ret fp128 %2 356} 357 358define ppc_fp128 @three_constants_ppcf128(ppc_fp128 %a, ppc_fp128 %c) { 359; CHECK-LABEL: three_constants_ppcf128: 360; CHECK: # %bb.0: # %entry 361; CHECK-NEXT: mflr r0 362; CHECK-NEXT: std r0, 16(r1) 363; CHECK-NEXT: stdu r1, -48(r1) 364; CHECK-NEXT: .cfi_def_cfa_offset 48 365; CHECK-NEXT: .cfi_offset lr, 16 366; CHECK-NEXT: .cfi_offset v31, -16 367; CHECK-NEXT: xxsplti32dx vs3, 0, 1074935889 368; CHECK-NEXT: xxlxor f4, f4, f4 369; CHECK-NEXT: stxv vs63, 32(r1) # 16-byte Folded Spill 370; CHECK-NEXT: xxsplti32dx vs63, 0, 1074935889 371; CHECK-NEXT: xxsplti32dx vs3, 1, -343597384 372; CHECK-NEXT: # kill: def $f3 killed $f3 killed $vsl3 373; CHECK-NEXT: bl __gcc_qadd@notoc 374; CHECK-NEXT: xxsplti32dx vs3, 0, 1074935889 375; CHECK-NEXT: xxlxor f4, f4, f4 376; CHECK-NEXT: xxsplti32dx vs3, 1, -1719329096 377; CHECK-NEXT: # kill: def $f3 killed $f3 killed $vsl3 378; CHECK-NEXT: bl __gcc_qadd@notoc 379; CHECK-NEXT: xxsplti32dx vs63, 1, 8724152 380; CHECK-NEXT: xxlxor f4, f4, f4 381; CHECK-NEXT: xscpsgndp f3, vs63, vs63 382; CHECK-NEXT: bl __gcc_qadd@notoc 383; CHECK-NEXT: lxv vs63, 32(r1) # 16-byte Folded Reload 384; CHECK-NEXT: addi r1, r1, 48 385; CHECK-NEXT: ld r0, 16(r1) 386; CHECK-NEXT: mtlr r0 387; CHECK-NEXT: blr 388; 389; CHECK-P9-LABEL: three_constants_ppcf128: 390; CHECK-P9: # %bb.0: # %entry 391; CHECK-P9-NEXT: mflr r0 392; CHECK-P9-NEXT: std r0, 16(r1) 393; CHECK-P9-NEXT: stdu r1, -32(r1) 394; CHECK-P9-NEXT: .cfi_def_cfa_offset 32 395; CHECK-P9-NEXT: .cfi_offset lr, 16 396; CHECK-P9-NEXT: addis r3, r2, .LCPI16_0@toc@ha 397; CHECK-P9-NEXT: xxlxor f4, f4, f4 398; CHECK-P9-NEXT: lfd f3, .LCPI16_0@toc@l(r3) 399; CHECK-P9-NEXT: bl __gcc_qadd 400; CHECK-P9-NEXT: nop 401; CHECK-P9-NEXT: addis r3, r2, .LCPI16_1@toc@ha 402; CHECK-P9-NEXT: xxlxor f4, f4, f4 403; CHECK-P9-NEXT: lfd f3, .LCPI16_1@toc@l(r3) 404; CHECK-P9-NEXT: bl __gcc_qadd 405; CHECK-P9-NEXT: nop 406; CHECK-P9-NEXT: addis r3, r2, .LCPI16_2@toc@ha 407; CHECK-P9-NEXT: xxlxor f4, f4, f4 408; CHECK-P9-NEXT: lfd f3, .LCPI16_2@toc@l(r3) 409; CHECK-P9-NEXT: bl __gcc_qadd 410; CHECK-P9-NEXT: nop 411; CHECK-P9-NEXT: addi r1, r1, 32 412; CHECK-P9-NEXT: ld r0, 16(r1) 413; CHECK-P9-NEXT: mtlr r0 414; CHECK-P9-NEXT: blr 415entry: 416 %0 = fadd ppc_fp128 %a, 0xM40123851EB851EB80000000000000000 417 %1 = fadd ppc_fp128 %0, 0xM4012385199851EB80000000000000000 418 %2 = fadd ppc_fp128 %1, 0xM4012385100851EB80000000000000000 419 ret ppc_fp128 %2 420} 421 422define <2 x double> @three_constants_vector(<2 x double> %a, <2 x double> %c) { 423; CHECK-LABEL: three_constants_vector: 424; CHECK: # %bb.0: # %entry 425; CHECK-NEXT: plxv vs0, .LCPI17_0@PCREL(0), 1 426; CHECK-NEXT: plxv vs2, .LCPI17_1@PCREL(0), 1 427; CHECK-NEXT: xvadddp vs1, vs34, vs0 428; CHECK-NEXT: xvadddp vs1, vs1, vs2 429; CHECK-NEXT: xvadddp vs34, vs1, vs0 430; CHECK-NEXT: blr 431; 432; CHECK-P9-LABEL: three_constants_vector: 433; CHECK-P9: # %bb.0: # %entry 434; CHECK-P9-NEXT: addis r3, r2, .LCPI17_0@toc@ha 435; CHECK-P9-NEXT: addi r3, r3, .LCPI17_0@toc@l 436; CHECK-P9-NEXT: lxv vs0, 0(r3) 437; CHECK-P9-NEXT: addis r3, r2, .LCPI17_1@toc@ha 438; CHECK-P9-NEXT: addi r3, r3, .LCPI17_1@toc@l 439; CHECK-P9-NEXT: lxv vs2, 0(r3) 440; CHECK-P9-NEXT: xvadddp vs1, vs34, vs0 441; CHECK-P9-NEXT: xvadddp vs1, vs1, vs2 442; CHECK-P9-NEXT: xvadddp vs34, vs1, vs0 443; CHECK-P9-NEXT: blr 444entry: 445 %0 = fadd <2 x double> %a, <double 4.555000e+00, double 9.880000e+00> 446 %1 = fadd <2 x double> %0, <double 4.555000e+00, double 9.980000e+00> 447 %2 = fadd <2 x double> %1, <double 4.555000e+00, double 9.880000e+00> 448 ret <2 x double> %2 449} 450