Index: llvm/trunk/lib/IR/ConstantRange.cpp =================================================================== --- llvm/trunk/lib/IR/ConstantRange.cpp +++ llvm/trunk/lib/IR/ConstantRange.cpp @@ -974,8 +974,6 @@ 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: llvm/trunk/unittests/IR/ConstantRangeTest.cpp =================================================================== --- llvm/trunk/unittests/IR/ConstantRangeTest.cpp +++ llvm/trunk/unittests/IR/ConstantRangeTest.cpp @@ -821,6 +821,16 @@ 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) {