diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index c53c8d160a2..7572cf4a6ec 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -38100,12 +38100,14 @@ static SDValue combineGatherScatter(SDNode *N, SelectionDAG &DAG, Index.getOperand(0).getScalarValueSizeInBits() <= 32) { SmallVector<SDValue, 5> NewOps(N->op_begin(), N->op_end()); NewOps[4] = Index.getOperand(0); - DAG.UpdateNodeOperands(N, NewOps); - // The original sign extend has less users, add back to worklist in case - // it needs to be removed - DCI.AddToWorklist(Index.getNode()); - DCI.AddToWorklist(N); - return SDValue(N, 0); + SDNode *Res = DAG.UpdateNodeOperands(N, NewOps); + if (Res == N) { + // The original sign extend has less users, add back to worklist in + // case it needs to be removed + DCI.AddToWorklist(Index.getNode()); + DCI.AddToWorklist(N); + } + return SDValue(Res, 0); } } @@ -38118,9 +38120,10 @@ static SDValue combineGatherScatter(SDNode *N, SelectionDAG &DAG, Index = DAG.getSExtOrTrunc(Index, DL, IndexVT); SmallVector<SDValue, 5> NewOps(N->op_begin(), N->op_end()); NewOps[4] = Index; - DAG.UpdateNodeOperands(N, NewOps); - DCI.AddToWorklist(N); - return SDValue(N, 0); + SDNode *Res = DAG.UpdateNodeOperands(N, NewOps); + if (Res == N) + DCI.AddToWorklist(N); + return SDValue(Res, 0); } // Try to remove zero extends from 32->64 if we know the sign bit of @@ -38131,12 +38134,14 @@ static SDValue combineGatherScatter(SDNode *N, SelectionDAG &DAG, if (DAG.SignBitIsZero(Index.getOperand(0))) { SmallVector<SDValue, 5> NewOps(N->op_begin(), N->op_end()); NewOps[4] = Index.getOperand(0); - DAG.UpdateNodeOperands(N, NewOps); - // The original zero extend has less users, add back to worklist in case - // it needs to be removed - DCI.AddToWorklist(Index.getNode()); - DCI.AddToWorklist(N); - return SDValue(N, 0); + SDNode *Res = DAG.UpdateNodeOperands(N, NewOps); + if (Res == N) { + // The original sign extend has less users, add back to worklist in + // case it needs to be removed + DCI.AddToWorklist(Index.getNode()); + DCI.AddToWorklist(N); + } + return SDValue(Res, 0); } } } |

