diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-03-13 06:26:26 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-03-13 06:26:26 +0000 |
| commit | 8bb6cb7d7b8cc08e4290a4f0d749d1dace8b42de (patch) | |
| tree | c580b987bb1d12e8bf0b7cb2cec4b4db2a6995f8 /llvm/lib | |
| parent | 994d8e6bd4e3f474b0db6d71378c1bc466105ff8 (diff) | |
| download | bcm5719-llvm-8bb6cb7d7b8cc08e4290a4f0d749d1dace8b42de.tar.gz bcm5719-llvm-8bb6cb7d7b8cc08e4290a4f0d749d1dace8b42de.zip | |
add a couple of missing folds
llvm-svn: 26724
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 1e05d583e83..1d6d40eb9a9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2102,6 +2102,18 @@ SDOperand DAGCombiner::visitFP_ROUND(SDNode *N) { // fold (fp_round c1fp) -> c1fp if (N0CFP) return DAG.getNode(ISD::FP_ROUND, VT, N0); + + // fold (fp_round (fp_extend x)) -> x + if (N0.getOpcode() == ISD::FP_EXTEND && VT == N0.getOperand(0).getValueType()) + return N0.getOperand(0); + + // fold (fp_round (copysign X, Y)) -> (copysign (fp_round X), Y) + if (N0.getOpcode() == ISD::FCOPYSIGN && N0.Val->hasOneUse()) { + SDOperand Tmp = DAG.getNode(ISD::FP_ROUND, VT, N0.getOperand(0)); + AddToWorkList(Tmp.Val); + return DAG.getNode(ISD::FCOPYSIGN, VT, Tmp, N0.getOperand(1)); + } + return SDOperand(); } |

