276 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=sparc64 --fp-contract=fast -mattr=-ua2007 < %s | FileCheck %s -check-prefix=NO-UA20073; RUN: llc -mtriple=sparc64 --fp-contract=fast -mattr=+ua2007 < %s | FileCheck %s -check-prefix=UA20074 5define float @fmadds(float %a, float %b, float %c) nounwind {6; NO-UA2007-LABEL: fmadds:7; NO-UA2007: ! %bb.0:8; NO-UA2007-NEXT: fmuls %f1, %f3, %f09; NO-UA2007-NEXT: retl10; NO-UA2007-NEXT: fadds %f0, %f5, %f011;12; UA2007-LABEL: fmadds:13; UA2007: ! %bb.0:14; UA2007-NEXT: retl15; UA2007-NEXT: fmadds %f1, %f3, %f5, %f016 %ret = call float @llvm.fmuladd.f32(float %a, float %b, float %c)17 ret float %ret18}19 20define double @fmaddd(double %a, double %b, double %c) nounwind {21; NO-UA2007-LABEL: fmaddd:22; NO-UA2007: ! %bb.0:23; NO-UA2007-NEXT: fmuld %f0, %f2, %f024; NO-UA2007-NEXT: retl25; NO-UA2007-NEXT: faddd %f0, %f4, %f026;27; UA2007-LABEL: fmaddd:28; UA2007: ! %bb.0:29; UA2007-NEXT: retl30; UA2007-NEXT: fmaddd %f0, %f2, %f4, %f031 %ret = call double @llvm.fmuladd.f64(double %a, double %b, double %c)32 ret double %ret33}34 35define float @fmsubs(float %a, float %b, float %c) nounwind {36; NO-UA2007-LABEL: fmsubs:37; NO-UA2007: ! %bb.0:38; NO-UA2007-NEXT: fmuls %f1, %f3, %f039; NO-UA2007-NEXT: retl40; NO-UA2007-NEXT: fsubs %f0, %f5, %f041;42; UA2007-LABEL: fmsubs:43; UA2007: ! %bb.0:44; UA2007-NEXT: retl45; UA2007-NEXT: fmsubs %f1, %f3, %f5, %f046 %neg = fneg float %c47 %ret = call float @llvm.fmuladd.f32(float %a, float %b, float %neg)48 ret float %ret49}50 51define double @fmsubd(double %a, double %b, double %c) nounwind {52; NO-UA2007-LABEL: fmsubd:53; NO-UA2007: ! %bb.0:54; NO-UA2007-NEXT: fmuld %f0, %f2, %f055; NO-UA2007-NEXT: retl56; NO-UA2007-NEXT: fsubd %f0, %f4, %f057;58; UA2007-LABEL: fmsubd:59; UA2007: ! %bb.0:60; UA2007-NEXT: retl61; UA2007-NEXT: fmsubd %f0, %f2, %f4, %f062 %neg = fneg double %c63 %ret = call double @llvm.fmuladd.f64(double %a, double %b, double %neg)64 ret double %ret65}66 67define float @fnmadds(float %a, float %b, float %c) nounwind {68; NO-UA2007-LABEL: fnmadds:69; NO-UA2007: ! %bb.0:70; NO-UA2007-NEXT: fmuls %f1, %f3, %f071; NO-UA2007-NEXT: fadds %f0, %f5, %f072; NO-UA2007-NEXT: retl73; NO-UA2007-NEXT: fnegs %f0, %f074;75; UA2007-LABEL: fnmadds:76; UA2007: ! %bb.0:77; UA2007-NEXT: retl78; UA2007-NEXT: fnmadds %f1, %f3, %f5, %f079 %fma = call float @llvm.fmuladd.f32(float %a, float %b, float %c)80 %ret = fneg float %fma81 ret float %ret82}83 84define double @fnmaddd(double %a, double %b, double %c) nounwind {85; NO-UA2007-LABEL: fnmaddd:86; NO-UA2007: ! %bb.0:87; NO-UA2007-NEXT: fmuld %f0, %f2, %f088; NO-UA2007-NEXT: faddd %f0, %f4, %f089; NO-UA2007-NEXT: retl90; NO-UA2007-NEXT: fnegd %f0, %f091;92; UA2007-LABEL: fnmaddd:93; UA2007: ! %bb.0:94; UA2007-NEXT: retl95; UA2007-NEXT: fnmaddd %f0, %f2, %f4, %f096 %fma = call double @llvm.fmuladd.f64(double %a, double %b, double %c)97 %ret = fneg double %fma98 ret double %ret99}100 101define float @fnmsubs(float %a, float %b, float %c) nounwind {102; NO-UA2007-LABEL: fnmsubs:103; NO-UA2007: ! %bb.0:104; NO-UA2007-NEXT: fmuls %f1, %f3, %f0105; NO-UA2007-NEXT: fsubs %f0, %f5, %f0106; NO-UA2007-NEXT: retl107; NO-UA2007-NEXT: fnegs %f0, %f0108;109; UA2007-LABEL: fnmsubs:110; UA2007: ! %bb.0:111; UA2007-NEXT: retl112; UA2007-NEXT: fnmsubs %f1, %f3, %f5, %f0113 %neg = fneg float %c114 %fma = call float @llvm.fmuladd.f32(float %a, float %b, float %neg)115 %ret = fneg float %fma116 ret float %ret117}118 119define double @fnmsubd(double %a, double %b, double %c) nounwind {120; NO-UA2007-LABEL: fnmsubd:121; NO-UA2007: ! %bb.0:122; NO-UA2007-NEXT: fmuld %f0, %f2, %f0123; NO-UA2007-NEXT: fsubd %f0, %f4, %f0124; NO-UA2007-NEXT: retl125; NO-UA2007-NEXT: fnegd %f0, %f0126;127; UA2007-LABEL: fnmsubd:128; UA2007: ! %bb.0:129; UA2007-NEXT: retl130; UA2007-NEXT: fnmsubd %f0, %f2, %f4, %f0131 %neg = fneg double %c132 %fma = call double @llvm.fmuladd.f64(double %a, double %b, double %neg)133 %ret = fneg double %fma134 ret double %ret135}136 137 138define float @combine_madds(float %a, float %b, float %c) nounwind {139; NO-UA2007-LABEL: combine_madds:140; NO-UA2007: ! %bb.0:141; NO-UA2007-NEXT: fmuls %f1, %f3, %f0142; NO-UA2007-NEXT: retl143; NO-UA2007-NEXT: fadds %f0, %f5, %f0144;145; UA2007-LABEL: combine_madds:146; UA2007: ! %bb.0:147; UA2007-NEXT: retl148; UA2007-NEXT: fmadds %f1, %f3, %f5, %f0149 %mul = fmul float %a, %b150 %add = fadd float %mul, %c151 ret float %add152}153 154define double @combine_maddd(double %a, double %b, double %c) nounwind {155; NO-UA2007-LABEL: combine_maddd:156; NO-UA2007: ! %bb.0:157; NO-UA2007-NEXT: fmuld %f0, %f2, %f0158; NO-UA2007-NEXT: retl159; NO-UA2007-NEXT: faddd %f0, %f4, %f0160;161; UA2007-LABEL: combine_maddd:162; UA2007: ! %bb.0:163; UA2007-NEXT: retl164; UA2007-NEXT: fmaddd %f0, %f2, %f4, %f0165 %mul = fmul double %a, %b166 %add = fadd double %mul, %c167 ret double %add168}169 170define float @combine_msubs(float %a, float %b, float %c) nounwind {171; NO-UA2007-LABEL: combine_msubs:172; NO-UA2007: ! %bb.0:173; NO-UA2007-NEXT: fmuls %f1, %f3, %f0174; NO-UA2007-NEXT: retl175; NO-UA2007-NEXT: fsubs %f0, %f5, %f0176;177; UA2007-LABEL: combine_msubs:178; UA2007: ! %bb.0:179; UA2007-NEXT: retl180; UA2007-NEXT: fmsubs %f1, %f3, %f5, %f0181 %mul = fmul float %a, %b182 %sub = fsub float %mul, %c183 ret float %sub184}185 186define double @combine_msubd(double %a, double %b, double %c) nounwind {187; NO-UA2007-LABEL: combine_msubd:188; NO-UA2007: ! %bb.0:189; NO-UA2007-NEXT: fmuld %f0, %f2, %f0190; NO-UA2007-NEXT: retl191; NO-UA2007-NEXT: fsubd %f0, %f4, %f0192;193; UA2007-LABEL: combine_msubd:194; UA2007: ! %bb.0:195; UA2007-NEXT: retl196; UA2007-NEXT: fmsubd %f0, %f2, %f4, %f0197 %mul = fmul double %a, %b198 %sub = fsub double %mul, %c199 ret double %sub200}201 202define float @combine_nmadds(float %a, float %b, float %c) nounwind {203; NO-UA2007-LABEL: combine_nmadds:204; NO-UA2007: ! %bb.0:205; NO-UA2007-NEXT: fmuls %f1, %f3, %f0206; NO-UA2007-NEXT: fadds %f0, %f5, %f0207; NO-UA2007-NEXT: retl208; NO-UA2007-NEXT: fnegs %f0, %f0209;210; UA2007-LABEL: combine_nmadds:211; UA2007: ! %bb.0:212; UA2007-NEXT: retl213; UA2007-NEXT: fnmadds %f1, %f3, %f5, %f0214 %mul = fmul float %a, %b215 %add = fadd float %mul, %c216 %neg = fneg float %add217 ret float %neg218}219 220define double @combine_nmaddd(double %a, double %b, double %c) nounwind {221; NO-UA2007-LABEL: combine_nmaddd:222; NO-UA2007: ! %bb.0:223; NO-UA2007-NEXT: fmuld %f0, %f2, %f0224; NO-UA2007-NEXT: faddd %f0, %f4, %f0225; NO-UA2007-NEXT: retl226; NO-UA2007-NEXT: fnegd %f0, %f0227;228; UA2007-LABEL: combine_nmaddd:229; UA2007: ! %bb.0:230; UA2007-NEXT: retl231; UA2007-NEXT: fnmaddd %f0, %f2, %f4, %f0232 %mul = fmul double %a, %b233 %add = fadd double %mul, %c234 %neg = fneg double %add235 ret double %neg236}237 238define float @combine_nmsubs(float %a, float %b, float %c) nounwind {239; NO-UA2007-LABEL: combine_nmsubs:240; NO-UA2007: ! %bb.0:241; NO-UA2007-NEXT: fmuls %f1, %f3, %f0242; NO-UA2007-NEXT: fsubs %f0, %f5, %f0243; NO-UA2007-NEXT: retl244; NO-UA2007-NEXT: fnegs %f0, %f0245;246; UA2007-LABEL: combine_nmsubs:247; UA2007: ! %bb.0:248; UA2007-NEXT: retl249; UA2007-NEXT: fnmsubs %f1, %f3, %f5, %f0250 %mul = fmul float %a, %b251 %sub = fsub float %mul, %c252 %neg = fneg float %sub253 ret float %neg254}255 256define double @combine_nmsubd(double %a, double %b, double %c) nounwind {257; NO-UA2007-LABEL: combine_nmsubd:258; NO-UA2007: ! %bb.0:259; NO-UA2007-NEXT: fmuld %f0, %f2, %f0260; NO-UA2007-NEXT: fsubd %f0, %f4, %f0261; NO-UA2007-NEXT: retl262; NO-UA2007-NEXT: fnegd %f0, %f0263;264; UA2007-LABEL: combine_nmsubd:265; UA2007: ! %bb.0:266; UA2007-NEXT: retl267; UA2007-NEXT: fnmsubd %f0, %f2, %f4, %f0268 %mul = fmul double %a, %b269 %sub = fsub double %mul, %c270 %neg = fneg double %sub271 ret double %neg272}273 274declare float @llvm.fmuladd.f32(float, float, float)275declare double @llvm.fmuladd.f64(double, double, double)276