[llvm] r193068 - Fix the predecessor removal logic in r193045.
Michael Gottesman
mgottesman at apple.com
Thu Oct 24 14:04:52 PDT 2013
Gimme a bit.
On Oct 21, 2013, at 6:09 PM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
> testcase?
>
> On 21 October 2013 01:20, Michael Gottesman <mgottesman at apple.com> wrote:
>> Author: mgottesman
>> Date: Mon Oct 21 00:20:11 2013
>> New Revision: 193068
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=193068&view=rev
>> Log:
>> Fix the predecessor removal logic in r193045.
>>
>> Additionally some small comment/stylistic fixes are included as well.
>>
>> Modified:
>> llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=193068&r1=193067&r2=193068&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Mon Oct 21 00:20:11 2013
>> @@ -3741,18 +3741,20 @@ static bool SwitchToLookupTable(SwitchIn
>>
>> // Compute the maximum table size representable by the integer type we are
>> // switching upon.
>> - const unsigned CaseSize = MinCaseVal->getType()->getPrimitiveSizeInBits();
>> - const uint64_t MaxTableSize = CaseSize > 63? UINT64_MAX : 1ULL << CaseSize;
>> + unsigned CaseSize = MinCaseVal->getType()->getPrimitiveSizeInBits();
>> + uint64_t MaxTableSize = CaseSize > 63? UINT64_MAX : 1ULL << CaseSize;
>> assert(MaxTableSize >= TableSize &&
>> "It is impossible for a switch to have more entries than the max "
>> "representable value of its input integer type's size.");
>>
>> - // If we have a covered lookup table, unconditionally branch to the lookup table
>> - // BB. Otherwise, check if the condition value is within the case range. If it
>> - // is so, branch to the new BB. Otherwise branch to SI's default destination.
>> + // If we have a fully covered lookup table, unconditionally branch to the
>> + // lookup table BB. Otherwise, check if the condition value is within the case
>> + // range. If it is so, branch to the new BB. Otherwise branch to SI's default
>> + // destination.
>> const bool GeneratingCoveredLookupTable = MaxTableSize == TableSize;
>> if (GeneratingCoveredLookupTable) {
>> Builder.CreateBr(LookupBB);
>> + SI->getDefaultDest()->removePredecessor(SI->getParent());
>> } else {
>> Value *Cmp = Builder.CreateICmpULT(TableIndex, ConstantInt::get(
>> MinCaseVal->getType(), TableSize));
>> @@ -3786,14 +3788,10 @@ static bool SwitchToLookupTable(SwitchIn
>> Builder.CreateBr(CommonDest);
>>
>> // Remove the switch.
>> - for (unsigned i = 0; i < SI->getNumSuccessors(); ++i) {
>> + for (unsigned i = 0, e = SI->getNumSuccessors(); i < e; ++i) {
>> BasicBlock *Succ = SI->getSuccessor(i);
>>
>> - // If we are not generating a covered lookup table, we will have a
>> - // conditional branch from SI's parent BB to SI's default destination if our
>> - // input value lies outside of our case range. Thus in that case leave the
>> - // default destination BB as a predecessor of SI's parent BB.
>> - if (Succ == SI->getDefaultDest() && !GeneratingCoveredLookupTable)
>> + if (Succ == SI->getDefaultDest())
>> continue;
>> Succ->removePredecessor(SI->getParent());
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list