[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