[llvm] [InstCombine] When -A + B both have nsw flag, set nsw flag. (PR #72127)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 13 08:01:47 PST 2023


================
@@ -1487,7 +1487,11 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) {
       return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B));
 
     // -A + B --> B - A
-    return BinaryOperator::CreateSub(RHS, A);
+    auto *Sub = BinaryOperator::CreateSub(RHS, A);
+    if (auto *Op1 = dyn_cast<BinaryOperator>(LHS)) {
+      Sub->setHasNoSignedWrap(I.hasNoSignedWrap() && Op1->hasNoSignedWrap());
+    }
----------------
nikic wrote:

```suggestion
    auto *OBO = cast<OverflowingBinaryOperator>(LHS));
    Sub->setHasNoSignedWrap(I.hasNoSignedWrap() && OBO->hasNoSignedWrap());
```

https://github.com/llvm/llvm-project/pull/72127


More information about the llvm-commits mailing list