ARM: refactor optimizeThumb2JumpTables.
authorTim Northover <tnorthover@apple.com>
Wed, 13 May 2015 20:28:32 +0000 (20:28 +0000)
committerTim Northover <tnorthover@apple.com>
Wed, 13 May 2015 20:28:32 +0000 (20:28 +0000)
commit688f7bb21a686fc296c8e1c313f9a1054a4baaf9
tree1e42717a22156ab1a551b9da841600834c4f0ef3
parentfb69dd8b6495290d5c39ce8017a537d8fa8f284c
ARM: refactor optimizeThumb2JumpTables.

The previous logic mixed 2 separate questions:
  + Can we form a TBB/TBH instruction?
  + Can we remove the jump-table calculation before it?

It then performed a bunch of random tests on the instructions earlier in the
basic block, which were probably sufficient to answer 2 but only because of the
very limited ways in which a t2BR_JT can actually be created.

For example there's no reason to expect the LeaInst to define the same base
register as the following indexing calulation. In practice this means we might
have missed opportunities to form TBB/TBH, in theory you could end up
misidentifying a sequence and removing the wrong LEA:

     %R1 = t2LEApcrelJT ...
     %R2 = t2LEApcrelJT ...
     <... using and killing %R2 ...>
     %R2 = t2ADDr %R1, $Ridx

Before we would have looked for an LEA defining %R2 and found the wrong one. We
just got lucky that jump table setup was (almost?) always confined to a single
basic block and there was only one jump table per block.

llvm-svn: 237293
llvm/lib/Target/ARM/ARMConstantIslandPass.cpp