Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
[Thumb-1] Fix corner cases for compressed jump tables
Browse files Browse the repository at this point in the history
Summary:
When synthesized TBB/TBH is expanded, we need to avoid the case of:
   BaseReg is redefined after the load of branching target. E.g.:

    %R2 = tLEApcrelJT <jt#1>
    %R1 =  tLDRr %R1, %R2    ==> %R2 = tLEApcrelJT <jt#1>
    %R2 = tLDRspi %SP, 12        %R2 = tLDRspi %SP, 12
    tBR_JTr %R1                  tTBB_JT %R2, %R1
`
Reviewers: jmolloy

Reviewed By: jmolloy

Subscribers: llvm-commits, rengolin

Differential Revision: https://reviews.llvm.org/D32250

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300870 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Weiming Zhao committed Apr 20, 2017
1 parent b2a1e24 commit a90b36e
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lib/Target/ARM/ARMConstantIslandPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2157,6 +2157,15 @@ bool ARMConstantIslands::optimizeThumb2JumpTables() {

// If we're in PIC mode, there should be another ADD following.
auto *TRI = STI->getRegisterInfo();

// %base cannot be redefined after the load as it will appear before
// TBB/TBH like:
// %base =
// %base =
// tBB %base, %idx
if (registerDefinedBetween(BaseReg, Load->getNextNode(), MBB->end(), TRI))
continue;

if (isPositionIndependentOrROPI) {
MachineInstr *Add = Load->getNextNode();
if (Add->getOpcode() != ARM::tADDrr ||
Expand Down

0 comments on commit a90b36e

Please sign in to comment.