<div dir="ltr"><div dir="ltr"><div>Couldn't we simplify this before it's ever created instead of deleting later?</div><div>Ie, we have things like "FoldBUILD_VECTOR()" and "FoldCONCAT_VECTORS()" in SelectionDAG::getNode(), but no similar simplifications for ISD::SELECT_CC.<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 7, 2019 at 10:13 AM Nirav Dave via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: niravd<br>
Date: Thu Feb  7 09:13:55 2019<br>
New Revision: 353428<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=353428&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=353428&view=rev</a><br>
Log:<br>
[DAG] Cleanup of unused node in SimplifySelectCC.<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=353428&r1=353427&r2=353428&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=353428&r1=353427&r2=353428&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Feb  7 09:13:55 2019<br>
@@ -18660,14 +18660,21 @@ SDValue DAGCombiner::SimplifySelectCC(co<br>
   auto *N3C = dyn_cast<ConstantSDNode>(N3.getNode());<br>
<br>
   // Determine if the condition we're dealing with is constant.<br>
-  SDValue SCC = SimplifySetCC(getSetCCResultType(CmpOpVT), N0, N1, CC, DL,<br>
-                              false);<br>
-  if (SCC.getNode()) AddToWorklist(SCC.getNode());<br>
-<br>
-  if (auto *SCCC = dyn_cast_or_null<ConstantSDNode>(SCC.getNode())) {<br>
-    // fold select_cc true, x, y -> x<br>
-    // fold select_cc false, x, y -> y<br>
-    return !SCCC->isNullValue() ? N2 : N3;<br>
+  if (SDValue SCC =<br>
+          SimplifySetCC(getSetCCResultType(CmpOpVT), N0, N1, CC, DL, false)) {<br>
+    AddToWorklist(SCC.getNode());<br>
+    if (auto *SCCC = dyn_cast<ConstantSDNode>(SCC.getNode())) {<br>
+      // fold select_cc true, x, y -> x<br>
+      // fold select_cc false, x, y -> y<br>
+      bool isNull = SCCC->isNullValue();<br>
+      SDValue RV = isNull ? N3 : N2;<br>
+      // Delete SCC if we don't use it.<br>
+      if (SCCC != RV.getNode())<br>
+        recursivelyDeleteUnusedNodes(SCCC);<br>
+      return RV;<br>
+    }<br>
+    // Don't combine. Cleanup SCC.<br>
+    recursivelyDeleteUnusedNodes(SCC.getNode());<br>
   }<br>
<br>
   if (SDValue V =<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>