diff options
| author | Tim Northover <tnorthover@apple.com> | 2016-05-05 18:38:53 +0000 | 
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2016-05-05 18:38:53 +0000 | 
| commit | df43264cf7e716baa5e476a41d24c556d5acbd92 (patch) | |
| tree | 291b30c782a9fd33f396dcc9ffc8b47fa7d74939 /llvm/lib/ExecutionEngine | |
| parent | f7a4bd40681dc729e0744ab7ad0d08b5ac136b2c (diff) | |
| download | bcm5719-llvm-df43264cf7e716baa5e476a41d24c556d5acbd92.tar.gz bcm5719-llvm-df43264cf7e716baa5e476a41d24c556d5acbd92.zip | |
ARM: don't attempt to merge litpools referencing different PC-anchors.
Given something like:
    ldr r0, .LCPI0_0 (== pc-rel var)
    add r0, pc
    ldr r1, .LCPI0_1 (== pc-rel var)
    add r1, pc
we cannot combine the 2 ldr instructions and litpools because they get added to
a different pc to form the correct address. I think the original logic came
from a time when we fused the LDRpci/PICADD instructions into one
pseudo-instruction so the PC was always immediately at-hand. That's no longer
the case.
Should fix general-dynamic TLS access on Linux, and quite possibly other -fPIC
code that relies on litpools (e.g. v6m and -Oz compilations) though trivial
tweaks of the .ll test didn't provoke anything.
llvm-svn: 268662
Diffstat (limited to 'llvm/lib/ExecutionEngine')
0 files changed, 0 insertions, 0 deletions

