summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2012-09-26 11:07:37 +0000
committerHans Wennborg <hans@hanshq.net>2012-09-26 11:07:37 +0000
commitf2e2c108ddabb20beef5f37d5cb1bee49e29e44c (patch)
tree3fcc78a6f4f4191f5df81caca305c036f2767e2f /llvm/lib/Transforms/Utils/SimplifyCFG.cpp
parent208124f5a27255bd96b279847631136c711f4ada (diff)
downloadbcm5719-llvm-f2e2c108ddabb20beef5f37d5cb1bee49e29e44c.tar.gz
bcm5719-llvm-f2e2c108ddabb20beef5f37d5cb1bee49e29e44c.zip
Address Duncan's comments on r164682:
- Finish assert messages with exclamation mark - Move overflow checking into ShouldBuildLookupTable. llvm-svn: 164692
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 278292f4ccb..d7468a18908 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -3302,8 +3302,8 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
const SmallVector<std::pair<ConstantInt*, Constant*>, 4>& Values,
Constant *DefaultValue,
const TargetData *TD) {
- assert(Values.size() && "Can't build lookup table without values.");
- assert(TableSize >= Values.size() && "Can't fit values in table.");
+ assert(Values.size() && "Can't build lookup table without values!");
+ assert(TableSize >= Values.size() && "Can't fit values in table!");
// If all values in the table are equal, this is that value.
SingleValue = Values.begin()->second;
@@ -3431,6 +3431,8 @@ static bool ShouldBuildLookupTable(SwitchInst *SI,
// The table density should be at least 40%. This is the same criterion as for
// jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
// FIXME: Find the best cut-off.
+ if (SI->getNumCases() > TableSize || TableSize >= UINT64_MAX / 10)
+ return false; // TableSize overflowed, or mul below might overflow.
if (SI->getNumCases() * 10 >= TableSize * 4)
return true;
@@ -3513,10 +3515,6 @@ static bool SwitchToLookupTable(SwitchInst *SI,
}
APInt RangeSpread = MaxCaseVal->getValue() - MinCaseVal->getValue();
- // Be careful to avoid overflow when TableSize is used in
- // ShouldBuildLookupTable.
- if (RangeSpread.zextOrSelf(64).ugt(UINT64_MAX / 4 - 1))
- return false;
uint64_t TableSize = RangeSpread.getLimitedValue() + 1;
if (!ShouldBuildLookupTable(SI, TableSize, TD, ResultTypes))
return false;
OpenPOWER on IntegriCloud