diff options
| author | Chris Lattner <sabre@nondot.org> | 2007-05-03 00:32:00 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2007-05-03 00:32:00 +0000 |
| commit | 1c1082133c4c6459935df55f03e4a67d46c3f0fe (patch) | |
| tree | f42b930c460e6725ce4aa90f70203353448edd20 /llvm/lib | |
| parent | 483dc2bf089337d21248eb16eccd2ac613b4637b (diff) | |
| download | bcm5719-llvm-1c1082133c4c6459935df55f03e4a67d46c3f0fe.tar.gz bcm5719-llvm-1c1082133c4c6459935df55f03e4a67d46c3f0fe.zip | |
match a reassociated form of fnmul. This implements CodeGen/ARM/fnmul.ll
llvm-svn: 36660
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrVFP.td | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp index 8108ee4993b..79d58692e9f 100644 --- a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp +++ b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp @@ -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; diff --git a/llvm/lib/Target/ARM/ARMInstrVFP.td b/llvm/lib/Target/ARM/ARMInstrVFP.td index cac8e4465c9..671e1a48c18 100644 --- a/llvm/lib/Target/ARM/ARMInstrVFP.td +++ b/llvm/lib/Target/ARM/ARMInstrVFP.td @@ -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))]>; |

