From: Manman Ren Date: Thu, 24 Jul 2014 21:13:20 +0000 (+0000) Subject: Feedback from Hans on r213815. No functionaility change. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0349d541d25d97e2f91bb971c4a9ebf392c43fd9;p=oota-llvm.git Feedback from Hans on r213815. No functionaility change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213895 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index a651eacd1bb..24bb63bb60a 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -3477,7 +3477,7 @@ namespace { /// BuildLookup - Build instructions with Builder to retrieve the value at /// the position given by Index in the lookup table. - Value *BuildLookup(Value *Index, uint64_t TableSize, IRBuilder<> &Builder); + Value *BuildLookup(Value *Index, IRBuilder<> &Builder); /// WouldFitInRegister - Return true if a table with TableSize elements of /// type ElementType would fit in a target-legal register. @@ -3598,8 +3598,7 @@ SwitchLookupTable::SwitchLookupTable(Module &M, Kind = ArrayKind; } -Value *SwitchLookupTable::BuildLookup(Value *Index, uint64_t TableSize, - IRBuilder<> &Builder) { +Value *SwitchLookupTable::BuildLookup(Value *Index, IRBuilder<> &Builder) { switch (Kind) { case SingleValueKind: return SingleValue; @@ -3626,12 +3625,14 @@ Value *SwitchLookupTable::BuildLookup(Value *Index, uint64_t TableSize, } case ArrayKind: { // Make sure the table index will not overflow when treated as signed. - if (IntegerType *IT = dyn_cast(Index->getType())) - if (TableSize > (1ULL << (IT->getBitWidth() - 1))) - Index = Builder.CreateZExt(Index, - IntegerType::get(IT->getContext(), - IT->getBitWidth() + 1), - "switch.tableidx.zext"); + IntegerType *IT = cast(Index->getType()); + uint64_t TableSize = Array->getInitializer()->getType() + ->getArrayNumElements(); + if (TableSize > (1ULL << (IT->getBitWidth() - 1))) + Index = Builder.CreateZExt(Index, + IntegerType::get(IT->getContext(), + IT->getBitWidth() + 1), + "switch.tableidx.zext"); Value *GEPIndices[] = { Builder.getInt32(0), Index }; Value *GEP = Builder.CreateInBoundsGEP(Array, GEPIndices, @@ -3887,7 +3888,7 @@ static bool SwitchToLookupTable(SwitchInst *SI, SwitchLookupTable Table(Mod, TableSize, MinCaseVal, ResultLists[PHI], DV, DL); - Value *Result = Table.BuildLookup(TableIndex, TableSize, Builder); + Value *Result = Table.BuildLookup(TableIndex, Builder); // If the result is used to return immediately from the function, we want to // do that right here.