This is the follow up patch for https://reviews.llvm.org/D86183 as we miss to delete the node if NegX == NegY, which has use after we create the node.
if (NegX && (CostX <= CostY)) {
Cost = std::min(CostX, CostZ);
RemoveDeadNode(NegY);
return DAG.getNode(Opcode, DL, VT, NegX, Y, NegZ, Flags); #<-- NegY is used here if NegY == NegX.
}
I think it would be clearer and less code duplication to put the 'if' check into the lambda, so something like:
auto RemoveDeadNode = [&](SDValue N, SDValue Other) { if (N && N.getNode()->use_empty() && N != Other) DAG.RemoveDeadNode(N.getNode()); };Then call it with something like this: