summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-13 06:26:26 +0000
committerChris Lattner <sabre@nondot.org>2006-03-13 06:26:26 +0000
commit8bb6cb7d7b8cc08e4290a4f0d749d1dace8b42de (patch)
treec580b987bb1d12e8bf0b7cb2cec4b4db2a6995f8 /llvm/lib
parent994d8e6bd4e3f474b0db6d71378c1bc466105ff8 (diff)
downloadbcm5719-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.cpp12
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();
}
OpenPOWER on IntegriCloud