Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 9274280

Browse files
committed
Revert r353416 "[DAG] Cleanup unused nodes on failed store-to-load forward combine."
This cleanup causes out-of-tree crashes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353527 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 7772407 commit 9274280

File tree

1 file changed

+9
-21
lines changed

1 file changed

+9
-21
lines changed

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13154,42 +13154,30 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
1315413154
if (LD->getBasePtr().isUndef() || Offset != 0)
1315513155
return SDValue();
1315613156
// Model necessary truncations / extenstions.
13157-
SmallVector<SDNode *, 4> Vals; // Temporaries which may need to be deleted.
13158-
SDValue Val, RV;
13157+
SDValue Val;
1315913158
// Truncate Value To Stored Memory Size.
1316013159
do {
1316113160
if (!getTruncatedStoreValue(ST, Val))
1316213161
continue;
13163-
if (Vals.empty() || Vals.back() != Val.getNode())
13164-
Vals.push_back(Val.getNode());
1316513162
if (!isTypeLegal(LDMemType))
1316613163
continue;
1316713164
if (STMemType != LDMemType) {
1316813165
// TODO: Support vectors? This requires extract_subvector/bitcast.
1316913166
if (!STMemType.isVector() && !LDMemType.isVector() &&
13170-
STMemType.isInteger() && LDMemType.isInteger()) {
13171-
Vals.push_back(Val.getNode());
13167+
STMemType.isInteger() && LDMemType.isInteger())
1317213168
Val = DAG.getNode(ISD::TRUNCATE, SDLoc(LD), LDMemType, Val);
13173-
} else
13169+
else
1317413170
continue;
1317513171
}
13176-
if (Vals.empty() || Vals.back() != Val.getNode())
13177-
Vals.push_back(Val.getNode());
13178-
if (extendLoadedValueToExtension(LD, Val))
13179-
RV = ReplaceLd(LD, Val, Chain);
13180-
else if (Vals.empty() || Vals.back() != Val.getNode())
13181-
Vals.push_back(Val.getNode());
13172+
if (!extendLoadedValueToExtension(LD, Val))
13173+
continue;
13174+
return ReplaceLd(LD, Val, Chain);
1318213175
} while (false);
1318313176

1318413177
// On failure, cleanup dead nodes we may have created.
13185-
if (Vals.empty() || Vals.back() != Val.getNode())
13186-
Vals.push_back(Val.getNode());
13187-
while (!Vals.empty()) {
13188-
SDNode *Val = Vals.pop_back_val();
13189-
if (Val->use_empty())
13190-
recursivelyDeleteUnusedNodes(Val);
13191-
}
13192-
return RV;
13178+
if (Val->use_empty())
13179+
deleteAndRecombine(Val.getNode());
13180+
return SDValue();
1319313181
}
1319413182

1319513183
SDValue DAGCombiner::visitLOAD(SDNode *N) {

0 commit comments

Comments
 (0)