summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorSander de Smalen <sander.desmalen@arm.com>2019-04-11 13:02:19 +0000
committerSander de Smalen <sander.desmalen@arm.com>2019-04-11 13:02:19 +0000
commit4f5d2df48d57cf1f9f9aed3eac8337128f01f327 (patch)
treed418254041c0cc60745bfceedc833f9cdfd998b0 /llvm/lib/Analysis
parent6fa145e429b726b5105d7570b121d918a799bb84 (diff)
downloadbcm5719-llvm-4f5d2df48d57cf1f9f9aed3eac8337128f01f327.tar.gz
bcm5719-llvm-4f5d2df48d57cf1f9f9aed3eac8337128f01f327.zip
[ValueTracking] Change if-else chain into switch in computeKnownBitsFromAssume
This is a follow-up patch to D60504 to further improve performance issues in computeKnownBitsFromAssume. The patch is NFC, but may improve compile-time performance if the compiler isn't clever enough to do the optimization itself. llvm-svn: 358163
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index f51d5ab9edc..4bb4d307995 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -625,7 +625,10 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
CmpInst::Predicate Pred;
uint64_t C;
- if (Cmp->getPredicate() == ICmpInst::ICMP_EQ) {
+ switch (Cmp->getPredicate()) {
+ default:
+ break;
+ case ICmpInst::ICMP_EQ:
// assume(v = a)
if (match(Cmp, m_c_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
@@ -762,7 +765,8 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
Known.Zero |= RHSKnown.One << C;
Known.One |= RHSKnown.Zero << C;
}
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_SGE) {
+ break;
+ case ICmpInst::ICMP_SGE:
// assume(v >=_s c) where c is non-negative
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
@@ -774,7 +778,8 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
Known.makeNonNegative();
}
}
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_SGT) {
+ break;
+ case ICmpInst::ICMP_SGT:
// assume(v >_s c) where c is at least -1.
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
@@ -786,7 +791,8 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
Known.makeNonNegative();
}
}
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_SLE) {
+ break;
+ case ICmpInst::ICMP_SLE:
// assume(v <=_s c) where c is negative
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
@@ -798,7 +804,8 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
Known.makeNegative();
}
}
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_SLT) {
+ break;
+ case ICmpInst::ICMP_SLT:
// assume(v <_s c) where c is non-positive
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
@@ -810,8 +817,9 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
Known.makeNegative();
}
}
- // assume(v <=_u c)
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_ULE) {
+ break;
+ case ICmpInst::ICMP_ULE:
+ // assume(v <=_u c)
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
KnownBits RHSKnown(BitWidth);
@@ -820,8 +828,9 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
// Whatever high bits in c are zero are known to be zero.
Known.Zero.setHighBits(RHSKnown.countMinLeadingZeros());
}
+ break;
+ case ICmpInst::ICMP_ULT:
// assume(v <_u c)
- } else if (Cmp->getPredicate() == ICmpInst::ICMP_ULT) {
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
KnownBits RHSKnown(BitWidth);
@@ -842,6 +851,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
else
Known.Zero.setHighBits(RHSKnown.countMinLeadingZeros());
}
+ break;
}
}
OpenPOWER on IntegriCloud