Unfortunately, I could not come up with a test case for this one; but I don't think getPreStartForSignExtend can assume AR is nsw -- there is one place in scalar evolution that calls getSignExtendAddRecStart(AR, ...) without proving that AR is nsw
(line 1564)
  OperandExtendedAdd =
    getAddExpr(WideStart,
               getMulExpr(WideMaxBECount,
                          getZeroExtendExpr(Step, WideTy)));
  if (SAdd == OperandExtendedAdd) {
    // If AR wraps around then
    //
    //    abs(Step) * MaxBECount > unsigned-max(AR->getType())
    // => SAdd != OperandExtendedAdd
    //
    // Thus (AR is not NW => SAdd != OperandExtendedAdd) <=>
    // (SAdd == OperandExtendedAdd => AR is NW)
    const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW);
    // Return the expression with the addrec on the outside.
    return getAddRecExpr(getSignExtendAddRecStart(AR, Ty, this),
                         getZeroExtendExpr(Step, Ty),
                         L, AR->getNoWrapFlags());
  }
}