[llvm] 8a15caa - [ConstraintElimination] Fix sign of sub decomposition.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 24 10:32:58 PST 2022


Author: Florian Hahn
Date: 2022-01-24T18:32:32Z
New Revision: 8a15caaae56182815839741de414a0ba60037a9a

URL: https://github.com/llvm/llvm-project/commit/8a15caaae56182815839741de414a0ba60037a9a
DIFF: https://github.com/llvm/llvm-project/commit/8a15caaae56182815839741de414a0ba60037a9a.diff

LOG: [ConstraintElimination] Fix sign of sub decomposition.

Update the decomposition code to make sure the right coefficient (-1) is
used for the second operand of the subtract.

Fixes PR53123.

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
    llvm/test/Transforms/ConstraintElimination/sub-nuw.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index 7f2d5d7d9987..fcb88b54a094 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -108,7 +108,7 @@ static SmallVector<std::pair<int64_t, Value *>, 4> decompose(Value *V) {
   if (match(V, m_NUWSub(m_Value(Op0), m_ConstantInt(CI))))
     return {{-1 * CI->getSExtValue(), nullptr}, {1, Op0}};
   if (match(V, m_NUWSub(m_Value(Op0), m_Value(Op1))))
-    return {{0, nullptr}, {1, Op0}, {1, Op1}};
+    return {{0, nullptr}, {1, Op0}, {-1, Op1}};
 
   return {{0, nullptr}, {1, V}};
 }

diff  --git a/llvm/test/Transforms/ConstraintElimination/sub-nuw.ll b/llvm/test/Transforms/ConstraintElimination/sub-nuw.ll
index 4d3b259b0143..25594db9905d 100644
--- a/llvm/test/Transforms/ConstraintElimination/sub-nuw.ll
+++ b/llvm/test/Transforms/ConstraintElimination/sub-nuw.ll
@@ -247,7 +247,7 @@ define i16 @test_pr53123_sub_constraint_sign(i16 %v) {
 ; CHECK-NEXT:    [[ADD:%.*]] = shl nuw nsw i16 [[V]], 1
 ; CHECK-NEXT:    [[SUB9:%.*]] = sub nuw nsw i16 32767, [[ADD]]
 ; CHECK-NEXT:    [[CMP11:%.*]] = icmp ugt i16 [[ADD]], [[SUB9]]
-; CHECK-NEXT:    br i1 false, label [[BB_3:%.*]], label [[BB_2]]
+; CHECK-NEXT:    br i1 [[CMP11]], label [[BB_3:%.*]], label [[BB_2]]
 ; CHECK:       bb.2:
 ; CHECK-NEXT:    ret i16 1
 ; CHECK:       bb.3:


        


More information about the llvm-commits mailing list