aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/PredicateSimplifier.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2007-07-14 04:28:04 +0000
committerNick Lewycky <nicholas@mxc.ca>2007-07-14 04:28:04 +0000
commita73d11efd435cfa5ab275400c9881724f9224ca0 (patch)
treeb5d23106e9da42036b8d159081c7a4abc74f4ed4 /lib/Transforms/Scalar/PredicateSimplifier.cpp
parent377b1190cbcf99e9298300d890c4b744dd2ed2c7 (diff)
Use maximal intersection algorithm exclusively. Fixes miscompile bug.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39852 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/PredicateSimplifier.cpp')
-rw-r--r--lib/Transforms/Scalar/PredicateSimplifier.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/Transforms/Scalar/PredicateSimplifier.cpp b/lib/Transforms/Scalar/PredicateSimplifier.cpp
index 7b0a413f50..cea218a8e3 100644
--- a/lib/Transforms/Scalar/PredicateSimplifier.cpp
+++ b/lib/Transforms/Scalar/PredicateSimplifier.cpp
@@ -938,7 +938,7 @@ namespace {
std::lower_bound(begin(), E, std::make_pair(Subtree, empty), swo);
if (I != end() && I->first == Subtree) {
- ConstantRange CR2 = I->second.intersectWith(CR);
+ ConstantRange CR2 = I->second.maximalIntersectWith(CR);
assert(!CR2.isEmptySet() && !CR2.isSingleElement() &&
"Invalid union of ranges.");
I->second = CR2;
@@ -970,18 +970,18 @@ namespace {
ConstantRange Range(CR.getBitWidth());
if (LV_s == SGT_BIT) {
- Range = Range.intersectWith(makeConstantRange(
+ Range = Range.maximalIntersectWith(makeConstantRange(
hasEQ ? ICmpInst::ICMP_SGE : ICmpInst::ICMP_SGT, CR));
} else if (LV_s == SLT_BIT) {
- Range = Range.intersectWith(makeConstantRange(
+ Range = Range.maximalIntersectWith(makeConstantRange(
hasEQ ? ICmpInst::ICMP_SLE : ICmpInst::ICMP_SLT, CR));
}
if (LV_u == UGT_BIT) {
- Range = Range.intersectWith(makeConstantRange(
+ Range = Range.maximalIntersectWith(makeConstantRange(
hasEQ ? ICmpInst::ICMP_UGE : ICmpInst::ICMP_UGT, CR));
} else if (LV_u == ULT_BIT) {
- Range = Range.intersectWith(makeConstantRange(
+ Range = Range.maximalIntersectWith(makeConstantRange(
hasEQ ? ICmpInst::ICMP_ULE : ICmpInst::ICMP_ULT, CR));
}
@@ -1104,7 +1104,7 @@ namespace {
switch (LV) {
default: assert(!"Impossible lattice value!");
case NE:
- return CR1.intersectWith(CR2).isEmptySet();
+ return CR1.maximalIntersectWith(CR2).isEmptySet();
case ULT:
return CR1.getUnsignedMax().ult(CR2.getUnsignedMin());
case ULE:
@@ -1170,7 +1170,7 @@ namespace {
unsigned i = VN.valueNumber(*I, Subtree);
ConstantRange CR_Kill = i ? range(i, Subtree) : range(*I);
if (CR_Kill.isFullSet()) continue;
- Merged = Merged.intersectWith(CR_Kill);
+ Merged = Merged.maximalIntersectWith(CR_Kill);
}
if (Merged.isFullSet() || Merged == CR_New) return;
@@ -1180,7 +1180,7 @@ namespace {
void applyRange(unsigned n, const ConstantRange &CR,
DomTreeDFS::Node *Subtree, VRPSolver *VRP) {
- ConstantRange Merged = CR.intersectWith(range(n, Subtree));
+ ConstantRange Merged = CR.maximalIntersectWith(range(n, Subtree));
if (Merged.isEmptySet()) {
markBlock(VRP);
return;
@@ -1270,14 +1270,14 @@ namespace {
ConstantRange CR2 = range(n2, Subtree);
if (!CR1.isSingleElement()) {
- ConstantRange NewCR1 = CR1.intersectWith(create(LV, CR2));
+ ConstantRange NewCR1 = CR1.maximalIntersectWith(create(LV, CR2));
if (NewCR1 != CR1)
applyRange(n1, NewCR1, Subtree, VRP);
}
if (!CR2.isSingleElement()) {
- ConstantRange NewCR2 = CR2.intersectWith(create(reversePredicate(LV),
- CR1));
+ ConstantRange NewCR2 = CR2.maximalIntersectWith(
+ create(reversePredicate(LV), CR1));
if (NewCR2 != CR2)
applyRange(n2, NewCR2, Subtree, VRP);
}