diff options
author | Nirav Dave <niravd@google.com> | 2017-03-28 14:11:20 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2017-03-28 14:11:20 +0000 |
commit | 9b5563c52ca9412597b38c15b6f0c6225d95f8a1 (patch) | |
tree | 3010320fe9616ab9a50f4bf1452e3cee1203abf1 /llvm/lib/CodeGen | |
parent | be8d7a32c209661085692c74924eb9bf42b23b57 (diff) | |
download | bcm5719-llvm-9b5563c52ca9412597b38c15b6f0c6225d95f8a1.tar.gz bcm5719-llvm-9b5563c52ca9412597b38c15b6f0c6225d95f8a1.zip |
[SDAG] Fix Stale SDNode usage in visitAND
Reorder CombineTo Calls to prevent potential use of deleted node.
Fixes PR32372.
Reviewers: jnspaulsson, RKSimon, uweigand, jonpa
Reviewed By: jonpa
Subscribers: jonpa, llvm-commits
Differential Revision: https://reviews.llvm.org/D31346
llvm-svn: 298920
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 2263ddc5647..c480c992744 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -3536,6 +3536,10 @@ SDValue DAGCombiner::visitAND(SDNode *N) { // If the load type was an EXTLOAD, convert to ZEXTLOAD in order to // preserve semantics once we get rid of the AND. SDValue NewLoad(Load, 0); + + // Fold the AND away. NewLoad may get replaced immediately. + CombineTo(N, NewLoad); + if (Load->getExtensionType() == ISD::EXTLOAD) { NewLoad = DAG.getLoad(Load->getAddressingMode(), ISD::ZEXTLOAD, Load->getValueType(0), SDLoc(Load), @@ -3553,10 +3557,6 @@ SDValue DAGCombiner::visitAND(SDNode *N) { } } - // Fold the AND away, taking care not to fold to the old load node if we - // replaced it. - CombineTo(N, (N0.getNode() == Load) ? NewLoad : N0); - return SDValue(N, 0); // Return N so it doesn't get rechecked! } } |