diff options
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index a3ad2c2f3ee..dabb8afd104 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -18673,21 +18673,14 @@ SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1, auto *N3C = dyn_cast<ConstantSDNode>(N3.getNode()); // Determine if the condition we're dealing with is constant. - if (SDValue SCC = - SimplifySetCC(getSetCCResultType(CmpOpVT), N0, N1, CC, DL, false)) { - AddToWorklist(SCC.getNode()); - if (auto *SCCC = dyn_cast<ConstantSDNode>(SCC.getNode())) { - // fold select_cc true, x, y -> x - // fold select_cc false, x, y -> y - bool isNull = SCCC->isNullValue(); - SDValue RV = isNull ? N3 : N2; - // Delete SCC if we don't use it. - if (SCCC != RV.getNode()) - recursivelyDeleteUnusedNodes(SCCC); - return RV; - } - // Don't combine. Cleanup SCC. - recursivelyDeleteUnusedNodes(SCC.getNode()); + SDValue SCC = SimplifySetCC(getSetCCResultType(CmpOpVT), N0, N1, CC, DL, + false); + if (SCC.getNode()) AddToWorklist(SCC.getNode()); + + if (auto *SCCC = dyn_cast_or_null<ConstantSDNode>(SCC.getNode())) { + // fold select_cc true, x, y -> x + // fold select_cc false, x, y -> y + return !SCCC->isNullValue() ? N2 : N3; } if (SDValue V = |