[llvm-commits] [llvm] r164926 - /llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp

Craig Topper craig.topper at gmail.com
Mon Oct 1 00:50:30 PDT 2012


It was forming a jump table instead of just a constant lookup table because
of the subtract in there making it so that not everything was a constant.
Maybe there should be some way to detect that the subtract was only
dependent on the switch value?

Even the jump table switch had problems because it seems nothing combines
identical basic blocks except for some common tail merging that occurs in
branch folding. But the tail folding has a threshold of 3 instructions in
the tail folding and these duplicate basic blocks were all 2 instructions
long. Maybe tail merging should ignore the threshold if the common tail of
two blocks are the whole blocks and they aren't both laid out behind their
predecessor?

On Mon, Oct 1, 2012 at 12:40 AM, Chandler Carruth <chandlerc at google.com>wrote:

> On Mon, Oct 1, 2012 at 12:33 AM, Craig Topper <craig.topper at gmail.com>wrote:
>
>> Author: ctopper
>> Date: Mon Oct  1 02:33:27 2012
>> New Revision: 164926
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=164926&view=rev
>> Log:
>> Use constants for all return values in switch. Allows clang to optimize
>> it into a lookup table.
>>
>> Modified:
>>     llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
>>
>> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp?rev=164926&r1=164925&r2=164926&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp Mon Oct  1
>> 02:33:27 2012
>> @@ -243,9 +243,14 @@
>>    case X86::R15: case X86::R15D: case X86::R15W: case X86::R15B:
>>      return N86::EDI;
>>
>> -  case X86::ST0: case X86::ST1: case X86::ST2: case X86::ST3:
>> -  case X86::ST4: case X86::ST5: case X86::ST6: case X86::ST7:
>> -    return RegNo-X86::ST0;
>> +  case X86::ST0: return 0;
>> +  case X86::ST1: return 1;
>> +  case X86::ST2: return 2;
>> +  case X86::ST3: return 3;
>> +  case X86::ST4: return 4;
>> +  case X86::ST5: return 5;
>> +  case X86::ST6: return 6;
>> +  case X86::ST7: return 7;
>>
>
> Out of curiosity, why are we unable to form the lookup table out of this?
> It seems like a common pattern that should be directly supported.
>
>


-- 
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121001/ae0a2462/attachment.html>


More information about the llvm-commits mailing list