[ConstantRange] [a, b) udiv a full range is [0, umax(b)).
authorFlorian Hahn <flo@fhahn.com>
Thu, 25 Apr 2019 10:12:43 +0000 (10:12 +0000)
committerFlorian Hahn <flo@fhahn.com>
Thu, 25 Apr 2019 10:12:43 +0000 (10:12 +0000)
Reviewers: nikic, spatel, efriedma

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D60536

llvm-svn: 359180

llvm/lib/IR/ConstantRange.cpp
llvm/unittests/IR/ConstantRangeTest.cpp

index 7e2c67277035dbfdb8928b151397e81b1f216860..af71fd3ac65895839fbb90e3997bd2367a3555ac 100644 (file)
@@ -974,8 +974,6 @@ ConstantRange
 ConstantRange::udiv(const ConstantRange &RHS) const {
   if (isEmptySet() || RHS.isEmptySet() || RHS.getUnsignedMax().isNullValue())
     return getEmpty();
-  if (RHS.isFullSet())
-    return getFull();
 
   APInt Lower = getUnsignedMin().udiv(RHS.getUnsignedMax());
 
index 692d151778efffba01bb2c8c5eb7ce89c35e86e5..b9d8fe071e36c3aa45eac4cd457f2b76a289e694 100644 (file)
@@ -821,6 +821,16 @@ TEST_F(ConstantRangeTest, UDiv) {
   EXPECT_EQ(Some.udiv(Some), ConstantRange(APInt(16, 0), APInt(16, 0x111)));
   EXPECT_EQ(Some.udiv(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa)));
   EXPECT_EQ(Wrap.udiv(Wrap), Full);
+
+
+  ConstantRange Zero(APInt(16, 0));
+  EXPECT_EQ(Zero.udiv(One), Zero);
+  EXPECT_EQ(Zero.udiv(Full), Zero);
+
+  EXPECT_EQ(ConstantRange(APInt(16, 0), APInt(16, 99)).udiv(Full),
+            ConstantRange(APInt(16, 0), APInt(16, 99)));
+  EXPECT_EQ(ConstantRange(APInt(16, 10), APInt(16, 99)).udiv(Full),
+            ConstantRange(APInt(16, 0), APInt(16, 99)));
 }
 
 TEST_F(ConstantRangeTest, URem) {