InstCombine: Preserve nsw for (mul %V, -1) -> (sub 0, %V)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222604 91177308-0d34-0410-b5e6-96231b3b80d8
InstCombine: Preserve nsw/nuw for ((X << C2)*C1) -> (X * (C1 << C2))

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222605 91177308-0d34-0410-b5e6-96231b3b80d8
InstCombine: Preserve nsw when folding X*(2^C) -> X << C

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222606 91177308-0d34-0410-b5e6-96231b3b80d8