diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index b1accdd066dfd..f12b73f82e402 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4749,7 +4749,8 @@ template SDValue DAGCombiner::visitMUL(SDNode *N) { SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ShiftVT); SDNodeFlags Flags; Flags.setNoUnsignedWrap(N->getFlags().hasNoUnsignedWrap()); - // TODO: Preserve setNoSignedWrap if LogBase2 isn't BitWidth - 1. + if (LogBase2.getZExtValue() != BitWidth - 1) + Flags.setNoSignedWrap(N->getFlags().hasNoSignedWrap()); return Matcher.getNode(ISD::SHL, DL, VT, N0, Trunc, Flags); } }