Skip to content
  • Evan Cheng's avatar
    Change Thumb2 jumptable codegen to one that uses two level jumps: · f3a1fce8
    Evan Cheng authored
    Before:
          adr r12, #LJTI3_0_0
          ldr pc, [r12, +r0, lsl #2]
    LJTI3_0_0:
          .long    LBB3_24
          .long    LBB3_30
          .long    LBB3_31
          .long    LBB3_32
    
    After:
          adr r12, #LJTI3_0_0
          add pc, r12, +r0, lsl #2
    LJTI3_0_0:
          b.w    LBB3_24
          b.w    LBB3_30
          b.w    LBB3_31
          b.w    LBB3_32
    
    This has several advantages.
    1. This will make it easier to optimize this to a TBB / TBH instruction +
       (smaller) table.
    2. This eliminate the need for ugly asm printer hack to force the address
       into thumb addresses (bit 0 is one).
    3. Same codegen for pic and non-pic.
    4. This eliminate the need to align the table so constantpool island pass
       won't have to over-estimate the size.
    
    Based on my calculation, the later is probably slightly faster as well since
    ldr pc with shifter address is very slow. That is, it should be a win as long
    as the HW implementation can do a reasonable job of branch predict the second
    branch.
    
    llvm-svn: 77024
    f3a1fce8
Loading