match a reassociated form of fnmul. This implements CodeGen/ARM/fnmul.ll
authorChris Lattner <sabre@nondot.org>
Thu, 3 May 2007 00:32:00 +0000 (00:32 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 3 May 2007 00:32:00 +0000 (00:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36660 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelDAGToDAG.cpp
lib/Target/ARM/ARMInstrVFP.td

index 8108ee4993b5d5b8572d9ff0ec4b7bf2f19b9fe3..79d58692e9f6da09245bfcddea1d7e96434d22aa 100644 (file)
@@ -27,6 +27,7 @@
 #include "llvm/CodeGen/SelectionDAGISel.h"
 #include "llvm/CodeGen/SSARegMap.h"
 #include "llvm/Target/TargetLowering.h"
+#include "llvm/Target/TargetOptions.h"
 #include "llvm/Support/Debug.h"
 using namespace llvm;
 
index cac8e4465c9e4ba766f4b13c1beb01b48225d472..671e1a48c184343ae8613b074e430a48ee7e9c0b 100644 (file)
@@ -139,8 +139,7 @@ def FMULD  : ADI<(ops DPR:$dst, DPR:$a, DPR:$b),
 def FMULS  : ASI<(ops SPR:$dst, SPR:$a, SPR:$b),
                  "fmuls $dst, $a, $b",
                  [(set SPR:$dst, (fmul SPR:$a, SPR:$b))]>;
-
-
+                 
 def FNMULD  : ADI<(ops DPR:$dst, DPR:$a, DPR:$b),
                   "fnmuld $dst, $a, $b",
                   [(set DPR:$dst, (fneg (fmul DPR:$a, DPR:$b)))]>;
@@ -149,6 +148,13 @@ def FNMULS  : ASI<(ops SPR:$dst, SPR:$a, SPR:$b),
                   "fnmuls $dst, $a, $b",
                   [(set SPR:$dst, (fneg (fmul SPR:$a, SPR:$b)))]>;
 
+// Match reassociated forms only if not sign dependent rounding.
+def : Pat<(fmul (fneg DPR:$a), DPR:$b),
+          (FNMULD DPR:$a, DPR:$b)>, Requires<[NoHonorSignDependentRounding]>;
+def : Pat<(fmul (fneg SPR:$a), SPR:$b),
+          (FNMULS SPR:$a, SPR:$b)>, Requires<[NoHonorSignDependentRounding]>;
+
+
 def FSUBD  : ADI<(ops DPR:$dst, DPR:$a, DPR:$b),
                  "fsubd $dst, $a, $b",
                  [(set DPR:$dst, (fsub DPR:$a, DPR:$b))]>;