]> granicus.if.org Git - llvm/commitdiff
Revert r353416 "[DAG] Cleanup unused nodes on failed store-to-load forward combine."
authorNirav Dave <niravd@google.com>
Fri, 8 Feb 2019 15:21:13 +0000 (15:21 +0000)
committerNirav Dave <niravd@google.com>
Fri, 8 Feb 2019 15:21:13 +0000 (15:21 +0000)
This cleanup causes out-of-tree crashes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353527 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index a9904a25783079b437ead2ffe9fe7aa7d038cb27..5a933dd8be247bbce2ab3eacda61c9d11d835882 100644 (file)
@@ -13154,42 +13154,30 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
   if (LD->getBasePtr().isUndef() || Offset != 0)
     return SDValue();
   // Model necessary truncations / extenstions.
-  SmallVector<SDNode *, 4> Vals; // Temporaries which may need to be deleted.
-  SDValue Val, RV;
+  SDValue Val;
   // Truncate Value To Stored Memory Size.
   do {
     if (!getTruncatedStoreValue(ST, Val))
       continue;
-    if (Vals.empty() || Vals.back() != Val.getNode())
-      Vals.push_back(Val.getNode());
     if (!isTypeLegal(LDMemType))
       continue;
     if (STMemType != LDMemType) {
       // TODO: Support vectors? This requires extract_subvector/bitcast.
       if (!STMemType.isVector() && !LDMemType.isVector() &&
-          STMemType.isInteger() && LDMemType.isInteger()) {
-        Vals.push_back(Val.getNode());
+          STMemType.isInteger() && LDMemType.isInteger())
         Val = DAG.getNode(ISD::TRUNCATE, SDLoc(LD), LDMemType, Val);
-      else
+      else
         continue;
     }
-    if (Vals.empty() || Vals.back() != Val.getNode())
-      Vals.push_back(Val.getNode());
-    if (extendLoadedValueToExtension(LD, Val))
-      RV = ReplaceLd(LD, Val, Chain);
-    else if (Vals.empty() || Vals.back() != Val.getNode())
-      Vals.push_back(Val.getNode());
+    if (!extendLoadedValueToExtension(LD, Val))
+      continue;
+    return ReplaceLd(LD, Val, Chain);
   } while (false);
 
   // On failure, cleanup dead nodes we may have created.
-  if (Vals.empty() || Vals.back() != Val.getNode())
-    Vals.push_back(Val.getNode());
-  while (!Vals.empty()) {
-    SDNode *Val = Vals.pop_back_val();
-    if (Val->use_empty())
-      recursivelyDeleteUnusedNodes(Val);
-  }
-  return RV;
+  if (Val->use_empty())
+    deleteAndRecombine(Val.getNode());
+  return SDValue();
 }
 
 SDValue DAGCombiner::visitLOAD(SDNode *N) {