diff options
author | Nirav Dave <niravd@google.com> | 2018-07-20 15:27:24 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2018-07-20 15:27:24 +0000 |
commit | 25802ac9fde5f0f3643c08c7a75b748a8ec10009 (patch) | |
tree | c5e8af4da2037140b98fc9b2265c378d062d9f2f /llvm/lib/CodeGen | |
parent | 7f7e60694e37cef81423bf626950c59081c96b42 (diff) | |
download | bcm5719-llvm-25802ac9fde5f0f3643c08c7a75b748a8ec10009.tar.gz bcm5719-llvm-25802ac9fde5f0f3643c08c7a75b748a8ec10009.zip |
[DAG] Avoid Node Update assertion due to AND simplification
Check for construction-time folding for incomplete AND nodes in
BackwardsPropagateMask.
Fixes PR38185.
Reviewers: RKSimon, samparker
Reviewed By: samparker
Subscribers: llvm-commits, hiraditya
Differential Revision: https://reviews.llvm.org/D49444
llvm-svn: 337563
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 60f7bcbb536..c1a15b39130 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4214,8 +4214,8 @@ bool DAGCombiner::BackwardsPropagateMask(SDNode *N, SelectionDAG &DAG) { FixupNode->getValueType(0), SDValue(FixupNode, 0), MaskOp); DAG.ReplaceAllUsesOfValueWith(SDValue(FixupNode, 0), And); - DAG.UpdateNodeOperands(And.getNode(), SDValue(FixupNode, 0), - MaskOp); + if (And.getOpcode() == ISD ::AND) + DAG.UpdateNodeOperands(And.getNode(), SDValue(FixupNode, 0), MaskOp); } // Narrow any constants that need it. @@ -4238,7 +4238,9 @@ bool DAGCombiner::BackwardsPropagateMask(SDNode *N, SelectionDAG &DAG) { SDValue And = DAG.getNode(ISD::AND, SDLoc(Load), Load->getValueType(0), SDValue(Load, 0), MaskOp); DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 0), And); - DAG.UpdateNodeOperands(And.getNode(), SDValue(Load, 0), MaskOp); + if (And.getOpcode() == ISD ::AND) + And = SDValue( + DAG.UpdateNodeOperands(And.getNode(), SDValue(Load, 0), MaskOp), 0); SDValue NewLoad = ReduceLoadWidth(And.getNode()); assert(NewLoad && "Shouldn't be masking the load if it can't be narrowed"); |