[llvm] r335729 - [ValueLattice] Return false if value range did not change in mergeIn.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 27 05:57:51 PDT 2018
Author: fhahn
Date: Wed Jun 27 05:57:51 2018
New Revision: 335729
URL: http://llvm.org/viewvc/llvm-project?rev=335729&view=rev
Log:
[ValueLattice] Return false if value range did not change in mergeIn.
Modified:
llvm/trunk/include/llvm/Analysis/ValueLattice.h
llvm/trunk/unittests/Analysis/ValueLatticeTest.cpp
Modified: llvm/trunk/include/llvm/Analysis/ValueLattice.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ValueLattice.h?rev=335729&r1=335728&r2=335729&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/ValueLattice.h (original)
+++ llvm/trunk/include/llvm/Analysis/ValueLattice.h Wed Jun 27 05:57:51 2018
@@ -275,6 +275,8 @@ public:
ConstantRange NewR = getConstantRange().unionWith(RHS.getConstantRange());
if (NewR.isFullSet())
markOverdefined();
+ else if (NewR == getConstantRange())
+ return false;
else
markConstantRange(std::move(NewR));
return true;
Modified: llvm/trunk/unittests/Analysis/ValueLatticeTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Analysis/ValueLatticeTest.cpp?rev=335729&r1=335728&r2=335729&view=diff
==============================================================================
--- llvm/trunk/unittests/Analysis/ValueLatticeTest.cpp (original)
+++ llvm/trunk/unittests/Analysis/ValueLatticeTest.cpp Wed Jun 27 05:57:51 2018
@@ -50,20 +50,26 @@ TEST_F(ValueLatticeTest, MergeIn) {
// Merge to lattice values with equal integer constant.
auto LV1 = ValueLatticeElement::get(C1);
- LV1.mergeIn(ValueLatticeElement::get(C1), M.getDataLayout());
+ EXPECT_FALSE(LV1.mergeIn(ValueLatticeElement::get(C1), M.getDataLayout()));
EXPECT_TRUE(LV1.isConstantRange());
EXPECT_EQ(LV1.asConstantInteger().getValue().getLimitedValue(), 1U);
// Merge LV1 with different integer constant.
- LV1.mergeIn(ValueLatticeElement::get(ConstantInt::get(I32Ty, 99)),
- M.getDataLayout());
+ EXPECT_TRUE(LV1.mergeIn(ValueLatticeElement::get(ConstantInt::get(I32Ty, 99)),
+ M.getDataLayout()));
+ EXPECT_TRUE(LV1.isConstantRange());
+ EXPECT_EQ(LV1.getConstantRange().getLower().getLimitedValue(), 1U);
+ EXPECT_EQ(LV1.getConstantRange().getUpper().getLimitedValue(), 100U);
+
+ // Merge constant range with same constant range.
+ EXPECT_FALSE(LV1.mergeIn(LV1, M.getDataLayout()));
EXPECT_TRUE(LV1.isConstantRange());
EXPECT_EQ(LV1.getConstantRange().getLower().getLimitedValue(), 1U);
EXPECT_EQ(LV1.getConstantRange().getUpper().getLimitedValue(), 100U);
// Merge LV1 in undefined value.
ValueLatticeElement LV2;
- LV2.mergeIn(LV1, M.getDataLayout());
+ EXPECT_TRUE(LV2.mergeIn(LV1, M.getDataLayout()));
EXPECT_TRUE(LV1.isConstantRange());
EXPECT_EQ(LV1.getConstantRange().getLower().getLimitedValue(), 1U);
EXPECT_EQ(LV1.getConstantRange().getUpper().getLimitedValue(), 100U);
@@ -71,8 +77,14 @@ TEST_F(ValueLatticeTest, MergeIn) {
EXPECT_EQ(LV2.getConstantRange().getLower().getLimitedValue(), 1U);
EXPECT_EQ(LV2.getConstantRange().getUpper().getLimitedValue(), 100U);
- // Merge with overdefined.
- LV1.mergeIn(ValueLatticeElement::getOverdefined(), M.getDataLayout());
+ // Merge LV1 with overdefined.
+ EXPECT_TRUE(
+ LV1.mergeIn(ValueLatticeElement::getOverdefined(), M.getDataLayout()));
+ EXPECT_TRUE(LV1.isOverdefined());
+
+ // Merge overdefined with overdefined.
+ EXPECT_FALSE(
+ LV1.mergeIn(ValueLatticeElement::getOverdefined(), M.getDataLayout()));
EXPECT_TRUE(LV1.isOverdefined());
}
@@ -136,8 +148,9 @@ TEST_F(ValueLatticeTest, getCompareFloat
EXPECT_TRUE(LV1.getCompare(CmpInst::FCMP_OLT, I1Ty, LV2)->isZeroValue());
EXPECT_TRUE(LV1.getCompare(CmpInst::FCMP_OGT, I1Ty, LV2)->isZeroValue());
- LV1.mergeIn(ValueLatticeElement::get(ConstantFP::get(FloatTy, 2.2)),
- M.getDataLayout());
+ EXPECT_TRUE(
+ LV1.mergeIn(ValueLatticeElement::get(ConstantFP::get(FloatTy, 2.2)),
+ M.getDataLayout()));
EXPECT_EQ(LV1.getCompare(CmpInst::FCMP_OEQ, I1Ty, LV2), nullptr);
EXPECT_EQ(LV1.getCompare(CmpInst::FCMP_OGE, I1Ty, LV2), nullptr);
EXPECT_EQ(LV1.getCompare(CmpInst::FCMP_OLE, I1Ty, LV2), nullptr);
More information about the llvm-commits
mailing list