[llvm] 4949fb7 - [CVP] Don't allow undef range when inferring nowrap flags

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 12 02:26:12 PST 2023


Author: Nikita Popov
Date: 2023-12-12T11:26:00+01:00
New Revision: 4949fb7954ba3b98026ce358af328396b858134a

URL: https://github.com/llvm/llvm-project/commit/4949fb7954ba3b98026ce358af328396b858134a
DIFF: https://github.com/llvm/llvm-project/commit/4949fb7954ba3b98026ce358af328396b858134a.diff

LOG: [CVP] Don't allow undef range when inferring nowrap flags

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
    llvm/test/Transforms/CorrelatedValuePropagation/add.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
index a5cf875ef3541d..669bdf50ba6e6e 100644
--- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
+++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
@@ -1048,8 +1048,10 @@ static bool processBinOp(BinaryOperator *BinOp, LazyValueInfo *LVI) {
   Value *LHS = BinOp->getOperand(0);
   Value *RHS = BinOp->getOperand(1);
 
-  ConstantRange LRange = LVI->getConstantRange(LHS, BinOp);
-  ConstantRange RRange = LVI->getConstantRange(RHS, BinOp);
+  ConstantRange LRange =
+      LVI->getConstantRange(LHS, BinOp, /*UndefAllowed*/ false);
+  ConstantRange RRange =
+      LVI->getConstantRange(RHS, BinOp, /*UndefAllowed*/ false);
 
   bool Changed = false;
   bool NewNUW = false, NewNSW = false;

diff  --git a/llvm/test/Transforms/CorrelatedValuePropagation/add.ll b/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
index 0768408563f5c1..b29a496ab1deb9 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
@@ -527,7 +527,6 @@ exit:
   ret i32 %acc.curr
 }
 
-; FIXME: This is a miscompile.
 define i32 @test_undef_range(i32 %x) {
 ; CHECK-LABEL: define i32 @test_undef_range(
 ; CHECK-SAME: i32 [[X:%.*]]) {
@@ -542,7 +541,7 @@ define i32 @test_undef_range(i32 %x) {
 ; CHECK-NEXT:    br label [[JOIN]]
 ; CHECK:       join:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 1, [[CASE1]] ], [ 2, [[CASE2]] ], [ undef, [[ENTRY:%.*]] ]
-; CHECK-NEXT:    [[ADD:%.*]] = add nuw nsw i32 [[PHI]], 1
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[PHI]], 1
 ; CHECK-NEXT:    ret i32 [[ADD]]
 ;
 entry:


        


More information about the llvm-commits mailing list