diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp | 9 | 
1 files changed, 9 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp index 8e5cf46263e..f32769c2411 100644 --- a/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp @@ -632,6 +632,15 @@ void StraightLineStrengthReduce::rewriteCandidateWithBasis(        // trivially dead.        RecursivelyDeleteTriviallyDeadInstructions(Bump);      } else { +      // It's tempting to preserve nsw on Bump and/or Reduced. However, it's +      // usually unsound, e.g., +      // +      // X = (-2 +nsw 1) *nsw INT_MAX +      // Y = (-2 +nsw 3) *nsw INT_MAX +      //   => +      // Y = X + 2 * INT_MAX +      // +      // Neither + and * in the resultant expression are nsw.        Reduced = Builder.CreateAdd(Basis.Ins, Bump);      }      break; | 

