291 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \3; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 | FileCheck %s4; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \5; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 | FileCheck %s --check-prefix=CHECK-P86 7declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)8declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)9declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)10declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)11 12declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)13declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)14 15define fp128 @fadd_f128(fp128 %f1, fp128 %f2) #0 {16; CHECK-LABEL: fadd_f128:17; CHECK: # %bb.0:18; CHECK-NEXT: xsaddqp v2, v2, v319; CHECK-NEXT: blr20;21; CHECK-P8-LABEL: fadd_f128:22; CHECK-P8: # %bb.0:23; CHECK-P8-NEXT: mflr r024; CHECK-P8-NEXT: stdu r1, -32(r1)25; CHECK-P8-NEXT: std r0, 48(r1)26; CHECK-P8-NEXT: .cfi_def_cfa_offset 3227; CHECK-P8-NEXT: .cfi_offset lr, 1628; CHECK-P8-NEXT: bl __addkf329; CHECK-P8-NEXT: nop30; CHECK-P8-NEXT: addi r1, r1, 3231; CHECK-P8-NEXT: ld r0, 16(r1)32; CHECK-P8-NEXT: mtlr r033; CHECK-P8-NEXT: blr34 %res = call fp128 @llvm.experimental.constrained.fadd.f128(35 fp128 %f1, fp128 %f2,36 metadata !"round.dynamic",37 metadata !"fpexcept.strict") #038 ret fp128 %res39}40 41define fp128 @fsub_f128(fp128 %f1, fp128 %f2) #0 {42; CHECK-LABEL: fsub_f128:43; CHECK: # %bb.0:44; CHECK-NEXT: xssubqp v2, v2, v345; CHECK-NEXT: blr46;47; CHECK-P8-LABEL: fsub_f128:48; CHECK-P8: # %bb.0:49; CHECK-P8-NEXT: mflr r050; CHECK-P8-NEXT: stdu r1, -32(r1)51; CHECK-P8-NEXT: std r0, 48(r1)52; CHECK-P8-NEXT: .cfi_def_cfa_offset 3253; CHECK-P8-NEXT: .cfi_offset lr, 1654; CHECK-P8-NEXT: bl __subkf355; CHECK-P8-NEXT: nop56; CHECK-P8-NEXT: addi r1, r1, 3257; CHECK-P8-NEXT: ld r0, 16(r1)58; CHECK-P8-NEXT: mtlr r059; CHECK-P8-NEXT: blr60 %res = call fp128 @llvm.experimental.constrained.fsub.f128(61 fp128 %f1, fp128 %f2,62 metadata !"round.dynamic",63 metadata !"fpexcept.strict") #064 ret fp128 %res65}66 67define fp128 @fmul_f128(fp128 %f1, fp128 %f2) #0 {68; CHECK-LABEL: fmul_f128:69; CHECK: # %bb.0:70; CHECK-NEXT: xsmulqp v2, v2, v371; CHECK-NEXT: blr72;73; CHECK-P8-LABEL: fmul_f128:74; CHECK-P8: # %bb.0:75; CHECK-P8-NEXT: mflr r076; CHECK-P8-NEXT: stdu r1, -32(r1)77; CHECK-P8-NEXT: std r0, 48(r1)78; CHECK-P8-NEXT: .cfi_def_cfa_offset 3279; CHECK-P8-NEXT: .cfi_offset lr, 1680; CHECK-P8-NEXT: bl __mulkf381; CHECK-P8-NEXT: nop82; CHECK-P8-NEXT: addi r1, r1, 3283; CHECK-P8-NEXT: ld r0, 16(r1)84; CHECK-P8-NEXT: mtlr r085; CHECK-P8-NEXT: blr86 %res = call fp128 @llvm.experimental.constrained.fmul.f128(87 fp128 %f1, fp128 %f2,88 metadata !"round.dynamic",89 metadata !"fpexcept.strict") #090 ret fp128 %res91}92 93define fp128 @fdiv_f128(fp128 %f1, fp128 %f2) #0 {94; CHECK-LABEL: fdiv_f128:95; CHECK: # %bb.0:96; CHECK-NEXT: xsdivqp v2, v2, v397; CHECK-NEXT: blr98;99; CHECK-P8-LABEL: fdiv_f128:100; CHECK-P8: # %bb.0:101; CHECK-P8-NEXT: mflr r0102; CHECK-P8-NEXT: stdu r1, -32(r1)103; CHECK-P8-NEXT: std r0, 48(r1)104; CHECK-P8-NEXT: .cfi_def_cfa_offset 32105; CHECK-P8-NEXT: .cfi_offset lr, 16106; CHECK-P8-NEXT: bl __divkf3107; CHECK-P8-NEXT: nop108; CHECK-P8-NEXT: addi r1, r1, 32109; CHECK-P8-NEXT: ld r0, 16(r1)110; CHECK-P8-NEXT: mtlr r0111; CHECK-P8-NEXT: blr112 %res = call fp128 @llvm.experimental.constrained.fdiv.f128(113 fp128 %f1, fp128 %f2,114 metadata !"round.dynamic",115 metadata !"fpexcept.strict") #0116 ret fp128 %res117}118 119define fp128 @fmadd_f128(fp128 %f0, fp128 %f1, fp128 %f2) #0 {120; CHECK-LABEL: fmadd_f128:121; CHECK: # %bb.0:122; CHECK-NEXT: xsmaddqp v4, v2, v3123; CHECK-NEXT: vmr v2, v4124; CHECK-NEXT: blr125;126; CHECK-P8-LABEL: fmadd_f128:127; CHECK-P8: # %bb.0:128; CHECK-P8-NEXT: mflr r0129; CHECK-P8-NEXT: stdu r1, -32(r1)130; CHECK-P8-NEXT: std r0, 48(r1)131; CHECK-P8-NEXT: .cfi_def_cfa_offset 32132; CHECK-P8-NEXT: .cfi_offset lr, 16133; CHECK-P8-NEXT: bl fmaf128134; CHECK-P8-NEXT: nop135; CHECK-P8-NEXT: addi r1, r1, 32136; CHECK-P8-NEXT: ld r0, 16(r1)137; CHECK-P8-NEXT: mtlr r0138; CHECK-P8-NEXT: blr139 %res = call fp128 @llvm.experimental.constrained.fma.f128(140 fp128 %f0, fp128 %f1, fp128 %f2,141 metadata !"round.dynamic",142 metadata !"fpexcept.strict") #0143 ret fp128 %res144}145 146define fp128 @fmsub_f128(fp128 %f0, fp128 %f1, fp128 %f2) #0 {147; CHECK-LABEL: fmsub_f128:148; CHECK: # %bb.0:149; CHECK-NEXT: xsmsubqp v4, v2, v3150; CHECK-NEXT: vmr v2, v4151; CHECK-NEXT: blr152;153; CHECK-P8-LABEL: fmsub_f128:154; CHECK-P8: # %bb.0:155; CHECK-P8-NEXT: mflr r0156; CHECK-P8-NEXT: stdu r1, -48(r1)157; CHECK-P8-NEXT: std r0, 64(r1)158; CHECK-P8-NEXT: .cfi_def_cfa_offset 48159; CHECK-P8-NEXT: .cfi_offset lr, 16160; CHECK-P8-NEXT: xxswapd vs0, v4161; CHECK-P8-NEXT: addi r3, r1, 32162; CHECK-P8-NEXT: stxvd2x vs0, 0, r3163; CHECK-P8-NEXT: lbz r4, 47(r1)164; CHECK-P8-NEXT: xori r4, r4, 128165; CHECK-P8-NEXT: stb r4, 47(r1)166; CHECK-P8-NEXT: lxvd2x vs0, 0, r3167; CHECK-P8-NEXT: xxswapd v4, vs0168; CHECK-P8-NEXT: bl fmaf128169; CHECK-P8-NEXT: nop170; CHECK-P8-NEXT: addi r1, r1, 48171; CHECK-P8-NEXT: ld r0, 16(r1)172; CHECK-P8-NEXT: mtlr r0173; CHECK-P8-NEXT: blr174 %neg = fneg fp128 %f2175 %res = call fp128 @llvm.experimental.constrained.fma.f128(176 fp128 %f0, fp128 %f1, fp128 %neg,177 metadata !"round.dynamic",178 metadata !"fpexcept.strict") #0179 ret fp128 %res180}181 182define fp128 @fnmadd_f128(fp128 %f0, fp128 %f1, fp128 %f2) #0 {183; CHECK-LABEL: fnmadd_f128:184; CHECK: # %bb.0:185; CHECK-NEXT: xsnmaddqp v4, v2, v3186; CHECK-NEXT: vmr v2, v4187; CHECK-NEXT: blr188;189; CHECK-P8-LABEL: fnmadd_f128:190; CHECK-P8: # %bb.0:191; CHECK-P8-NEXT: mflr r0192; CHECK-P8-NEXT: stdu r1, -48(r1)193; CHECK-P8-NEXT: std r0, 64(r1)194; CHECK-P8-NEXT: .cfi_def_cfa_offset 48195; CHECK-P8-NEXT: .cfi_offset lr, 16196; CHECK-P8-NEXT: bl fmaf128197; CHECK-P8-NEXT: nop198; CHECK-P8-NEXT: xxswapd vs0, v2199; CHECK-P8-NEXT: addi r3, r1, 32200; CHECK-P8-NEXT: stxvd2x vs0, 0, r3201; CHECK-P8-NEXT: lbz r4, 47(r1)202; CHECK-P8-NEXT: xori r4, r4, 128203; CHECK-P8-NEXT: stb r4, 47(r1)204; CHECK-P8-NEXT: lxvd2x vs0, 0, r3205; CHECK-P8-NEXT: xxswapd v2, vs0206; CHECK-P8-NEXT: addi r1, r1, 48207; CHECK-P8-NEXT: ld r0, 16(r1)208; CHECK-P8-NEXT: mtlr r0209; CHECK-P8-NEXT: blr210 %fma = call fp128 @llvm.experimental.constrained.fma.f128(211 fp128 %f0, fp128 %f1, fp128 %f2,212 metadata !"round.dynamic",213 metadata !"fpexcept.strict") #0214 %res = fneg fp128 %fma215 ret fp128 %res216}217 218define fp128 @fnmsub_f128(fp128 %f0, fp128 %f1, fp128 %f2) #0 {219; CHECK-LABEL: fnmsub_f128:220; CHECK: # %bb.0:221; CHECK-NEXT: xsnmsubqp v4, v2, v3222; CHECK-NEXT: vmr v2, v4223; CHECK-NEXT: blr224;225; CHECK-P8-LABEL: fnmsub_f128:226; CHECK-P8: # %bb.0:227; CHECK-P8-NEXT: mflr r0228; CHECK-P8-NEXT: stdu r1, -64(r1)229; CHECK-P8-NEXT: std r0, 80(r1)230; CHECK-P8-NEXT: .cfi_def_cfa_offset 64231; CHECK-P8-NEXT: .cfi_offset lr, 16232; CHECK-P8-NEXT: xxswapd vs0, v4233; CHECK-P8-NEXT: addi r3, r1, 32234; CHECK-P8-NEXT: stxvd2x vs0, 0, r3235; CHECK-P8-NEXT: lbz r4, 47(r1)236; CHECK-P8-NEXT: xori r4, r4, 128237; CHECK-P8-NEXT: stb r4, 47(r1)238; CHECK-P8-NEXT: lxvd2x vs0, 0, r3239; CHECK-P8-NEXT: xxswapd v4, vs0240; CHECK-P8-NEXT: bl fmaf128241; CHECK-P8-NEXT: nop242; CHECK-P8-NEXT: xxswapd vs0, v2243; CHECK-P8-NEXT: addi r3, r1, 48244; CHECK-P8-NEXT: stxvd2x vs0, 0, r3245; CHECK-P8-NEXT: lbz r4, 63(r1)246; CHECK-P8-NEXT: xori r4, r4, 128247; CHECK-P8-NEXT: stb r4, 63(r1)248; CHECK-P8-NEXT: lxvd2x vs0, 0, r3249; CHECK-P8-NEXT: xxswapd v2, vs0250; CHECK-P8-NEXT: addi r1, r1, 64251; CHECK-P8-NEXT: ld r0, 16(r1)252; CHECK-P8-NEXT: mtlr r0253; CHECK-P8-NEXT: blr254 %neg = fneg fp128 %f2255 %fma = call fp128 @llvm.experimental.constrained.fma.f128(256 fp128 %f0, fp128 %f1, fp128 %neg,257 metadata !"round.dynamic",258 metadata !"fpexcept.strict") #0259 %res = fneg fp128 %fma260 ret fp128 %res261}262 263 264define fp128 @fsqrt_f128(fp128 %f1) #0 {265; CHECK-LABEL: fsqrt_f128:266; CHECK: # %bb.0:267; CHECK-NEXT: xssqrtqp v2, v2268; CHECK-NEXT: blr269;270; CHECK-P8-LABEL: fsqrt_f128:271; CHECK-P8: # %bb.0:272; CHECK-P8-NEXT: mflr r0273; CHECK-P8-NEXT: stdu r1, -32(r1)274; CHECK-P8-NEXT: std r0, 48(r1)275; CHECK-P8-NEXT: .cfi_def_cfa_offset 32276; CHECK-P8-NEXT: .cfi_offset lr, 16277; CHECK-P8-NEXT: bl sqrtf128278; CHECK-P8-NEXT: nop279; CHECK-P8-NEXT: addi r1, r1, 32280; CHECK-P8-NEXT: ld r0, 16(r1)281; CHECK-P8-NEXT: mtlr r0282; CHECK-P8-NEXT: blr283 %res = call fp128 @llvm.experimental.constrained.sqrt.f128(284 fp128 %f1,285 metadata !"round.dynamic",286 metadata !"fpexcept.strict") #0287 ret fp128 %res288}289 290attributes #0 = { strictfp }291