path: root/tools/llc/llc.cpp
diff options
authorLang Hames <>2012-06-19 22:51:23 +0000
committerLang Hames <>2012-06-19 22:51:23 +0000
commitd693cafcfb9e67ba7040cb810e4409a166421482 (patch)
tree86a20682e48b7aaf402fc95f6497eae48e8fa89a /tools/llc/llc.cpp
parentfa8becb6f9e8aa2cbe3bab79e1fc4cdf2ffbb8e5 (diff)
Add DAG-combines for aggressive FMA formation.
This patch adds DAG combines to form FMAs from pairs of FADD + FMUL or FSUB + FMUL. The combines are performed when: (a) Either AllowExcessFPPrecision option (-enable-excess-fp-precision for llc) OR UnsafeFPMath option (-enable-unsafe-fp-math) are set, and (b) TargetLoweringInfo::isFMAFasterThanMulAndAdd(VT) is true for the type of the FADD/FSUB, and (c) The FMUL only has one user (the FADD/FSUB). If your target has fast FMA instructions you can make use of these combines by overriding TargetLoweringInfo::isFMAFasterThanMulAndAdd(VT) to return true for types supported by your FMA instruction, and adding patterns to match ISD::FMA to your FMA instructions. git-svn-id: 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llc/llc.cpp')
1 files changed, 3 insertions, 3 deletions
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index d0880913baf..b303cec3b51 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -156,8 +156,8 @@ DisableFPElimNonLeaf("disable-non-leaf-fp-elim",
static cl::opt<bool>
- cl::desc("Disable optimizations that may increase FP precision"),
+ cl::desc("Enable optimizations that may increase FP precision"),
static cl::opt<bool>
@@ -404,7 +404,7 @@ int main(int argc, char **argv) {
Options.LessPreciseFPMADOption = EnableFPMAD;
Options.NoFramePointerElim = DisableFPElim;
Options.NoFramePointerElimNonLeaf = DisableFPElimNonLeaf;
- Options.NoExcessFPPrecision = DisableExcessPrecision;
+ Options.AllowExcessFPPrecision = EnableExcessPrecision;
Options.UnsafeFPMath = EnableUnsafeFPMath;
Options.NoInfsFPMath = EnableNoInfsFPMath;
Options.NoNaNsFPMath = EnableNoNaNsFPMath;