diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-04-02 05:04:50 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-04-02 05:04:50 +0000 |
| commit | f68fd0b533daace9c768e05882166788e5ad86f2 (patch) | |
| tree | 8e2c4c3f483ad5c946ce6c53802c6ece498d7276 /llvm/lib | |
| parent | 0b7e4cd107e81db6bac9dc6747df28e8a44a6e66 (diff) | |
| download | bcm5719-llvm-f68fd0b533daace9c768e05882166788e5ad86f2.tar.gz bcm5719-llvm-f68fd0b533daace9c768e05882166788e5ad86f2.zip | |
Turn -0.0 - X -> fneg
llvm-svn: 21011
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 75352982034..052daa29c4e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -314,7 +314,7 @@ public: // void visitBinary(User &I, unsigned Opcode); void visitAdd(User &I) { visitBinary(I, ISD::ADD); } - void visitSub(User &I) { visitBinary(I, ISD::SUB); } + void visitSub(User &I); void visitMul(User &I) { visitBinary(I, ISD::MUL); } void visitDiv(User &I) { visitBinary(I, I.getType()->isUnsigned() ? ISD::UDIV : ISD::SDIV); @@ -454,6 +454,18 @@ void SelectionDAGLowering::visitBr(BranchInst &I) { } } +void SelectionDAGLowering::visitSub(User &I) { + // -0.0 - X --> fneg + if (ConstantFP *CFP = dyn_cast<ConstantFP>(I.getOperand(0))) + if (CFP->isExactlyValue(-0.0)) { + SDOperand Op2 = getValue(I.getOperand(1)); + setValue(&I, DAG.getNode(ISD::FNEG, Op2.getValueType(), Op2)); + return; + } + + visitBinary(I, ISD::SUB); +} + void SelectionDAGLowering::visitBinary(User &I, unsigned Opcode) { SDOperand Op1 = getValue(I.getOperand(0)); SDOperand Op2 = getValue(I.getOperand(1)); |

