Revert r353416 "[DAG] Cleanup unused nodes on failed store-to-load forward combine."

This cleanup causes out-of-tree crashes.

llvm-svn: 353527
This commit is contained in:
Nirav Dave 2019-02-08 15:21:13 +00:00
parent b0a227049f
commit 97011ccce0
1 changed files with 9 additions and 21 deletions

View 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) {