summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorAmaury Sechet <deadalnix@gmail.com>2017-08-14 11:44:03 +0000
committerAmaury Sechet <deadalnix@gmail.com>2017-08-14 11:44:03 +0000
commit9c529b6be31cf1478ed14c39ac6c6c4b97628f5f (patch)
tree5c89217aaca0dde612baa9ad0628fceda25fa155 /llvm/lib
parent9b5a89b0e2fb3482eee26a707fb23e295baf2fb5 (diff)
downloadbcm5719-llvm-9c529b6be31cf1478ed14c39ac6c6c4b97628f5f.tar.gz
bcm5719-llvm-9c529b6be31cf1478ed14c39ac6c6c4b97628f5f.zip
[DAGCombine] Do not try to deduplicate commutative operations if both operand are the same.
Summary: It is creating useless work as the commuted nodes is the same as the node we are working on in that case. Reviewers: jyknight, nemanjai, mkuper, spatel, RKSimon, zvi, bkramer Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D33840 llvm-svn: 310832
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 88dc0f4bde6..bd11c5aa1b3 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -1614,15 +1614,15 @@ SDValue DAGCombiner::combine(SDNode *N) {
}
}
- // If N is a commutative binary node, try commuting it to enable more
- // sdisel CSE.
+ // If N is a commutative binary node, try eliminate it if the commuted
+ // version is already present in the DAG.
if (!RV.getNode() && TLI.isCommutativeBinOp(N->getOpcode()) &&
N->getNumValues() == 1) {
SDValue N0 = N->getOperand(0);
SDValue N1 = N->getOperand(1);
// Constant operands are canonicalized to RHS.
- if (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1)) {
+ if (N0 != N1 && (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1))) {
SDValue Ops[] = {N1, N0};
SDNode *CSENode = DAG.getNodeIfExists(N->getOpcode(), N->getVTList(), Ops,
N->getFlags());
OpenPOWER on IntegriCloud