diff options
author | Hans Wennborg <hans@hanshq.net> | 2012-09-26 11:07:37 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2012-09-26 11:07:37 +0000 |
commit | f2e2c108ddabb20beef5f37d5cb1bee49e29e44c (patch) | |
tree | 3fcc78a6f4f4191f5df81caca305c036f2767e2f /llvm/lib/Transforms/Utils/SimplifyCFG.cpp | |
parent | 208124f5a27255bd96b279847631136c711f4ada (diff) | |
download | bcm5719-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.cpp | 10 |
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; |