@@ -50,29 +50,41 @@ TEST_F(ValueLatticeTest, MergeIn) {
50
50
51
51
// Merge to lattice values with equal integer constant.
52
52
auto LV1 = ValueLatticeElement::get (C1);
53
- LV1.mergeIn (ValueLatticeElement::get (C1), M.getDataLayout ());
53
+ EXPECT_FALSE ( LV1.mergeIn (ValueLatticeElement::get (C1), M.getDataLayout () ));
54
54
EXPECT_TRUE (LV1.isConstantRange ());
55
55
EXPECT_EQ (LV1.asConstantInteger ().getValue ().getLimitedValue (), 1U );
56
56
57
57
// Merge LV1 with different integer constant.
58
- LV1.mergeIn (ValueLatticeElement::get (ConstantInt::get (I32Ty, 99 )),
59
- M.getDataLayout ());
58
+ EXPECT_TRUE (LV1.mergeIn (ValueLatticeElement::get (ConstantInt::get (I32Ty, 99 )),
59
+ M.getDataLayout ()));
60
+ EXPECT_TRUE (LV1.isConstantRange ());
61
+ EXPECT_EQ (LV1.getConstantRange ().getLower ().getLimitedValue (), 1U );
62
+ EXPECT_EQ (LV1.getConstantRange ().getUpper ().getLimitedValue (), 100U );
63
+
64
+ // Merge constant range with same constant range.
65
+ EXPECT_FALSE (LV1.mergeIn (LV1, M.getDataLayout ()));
60
66
EXPECT_TRUE (LV1.isConstantRange ());
61
67
EXPECT_EQ (LV1.getConstantRange ().getLower ().getLimitedValue (), 1U );
62
68
EXPECT_EQ (LV1.getConstantRange ().getUpper ().getLimitedValue (), 100U );
63
69
64
70
// Merge LV1 in undefined value.
65
71
ValueLatticeElement LV2;
66
- LV2.mergeIn (LV1, M.getDataLayout ());
72
+ EXPECT_TRUE ( LV2.mergeIn (LV1, M.getDataLayout () ));
67
73
EXPECT_TRUE (LV1.isConstantRange ());
68
74
EXPECT_EQ (LV1.getConstantRange ().getLower ().getLimitedValue (), 1U );
69
75
EXPECT_EQ (LV1.getConstantRange ().getUpper ().getLimitedValue (), 100U );
70
76
EXPECT_TRUE (LV2.isConstantRange ());
71
77
EXPECT_EQ (LV2.getConstantRange ().getLower ().getLimitedValue (), 1U );
72
78
EXPECT_EQ (LV2.getConstantRange ().getUpper ().getLimitedValue (), 100U );
73
79
74
- // Merge with overdefined.
75
- LV1.mergeIn (ValueLatticeElement::getOverdefined (), M.getDataLayout ());
80
+ // Merge LV1 with overdefined.
81
+ EXPECT_TRUE (
82
+ LV1.mergeIn (ValueLatticeElement::getOverdefined (), M.getDataLayout ()));
83
+ EXPECT_TRUE (LV1.isOverdefined ());
84
+
85
+ // Merge overdefined with overdefined.
86
+ EXPECT_FALSE (
87
+ LV1.mergeIn (ValueLatticeElement::getOverdefined (), M.getDataLayout ()));
76
88
EXPECT_TRUE (LV1.isOverdefined ());
77
89
}
78
90
@@ -136,8 +148,9 @@ TEST_F(ValueLatticeTest, getCompareFloat) {
136
148
EXPECT_TRUE (LV1.getCompare (CmpInst::FCMP_OLT, I1Ty, LV2)->isZeroValue ());
137
149
EXPECT_TRUE (LV1.getCompare (CmpInst::FCMP_OGT, I1Ty, LV2)->isZeroValue ());
138
150
139
- LV1.mergeIn (ValueLatticeElement::get (ConstantFP::get (FloatTy, 2.2 )),
140
- M.getDataLayout ());
151
+ EXPECT_TRUE (
152
+ LV1.mergeIn (ValueLatticeElement::get (ConstantFP::get (FloatTy, 2.2 )),
153
+ M.getDataLayout ()));
141
154
EXPECT_EQ (LV1.getCompare (CmpInst::FCMP_OEQ, I1Ty, LV2), nullptr );
142
155
EXPECT_EQ (LV1.getCompare (CmpInst::FCMP_OGE, I1Ty, LV2), nullptr );
143
156
EXPECT_EQ (LV1.getCompare (CmpInst::FCMP_OLE, I1Ty, LV2), nullptr );
0 commit comments