HomePhabricator

ARM: don't attempt to merge litpools referencing different PC-anchors.

Description

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.

Details

Committed
tnorthoverMay 5 2016, 11:38 AM
Parents
rL268661: [Hexagon] Add aliases for vector loads/stores with no explicit offset
Branches
Unknown
Tags
Unknown