[LLVMbugs] [Bug 11087] New: Save code space on ARM Thumb with PC-relative LDR
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri Oct 7 17:10:25 PDT 2011
http://llvm.org/bugs/show_bug.cgi?id=11087
Summary: Save code space on ARM Thumb with PC-relative LDR
Product: libraries
Version: 2.9
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: enhancement
Priority: P
Component: Backend: ARM
AssignedTo: unassignedbugs at nondot.org
ReportedBy: xocotl at gmail.com
CC: llvmbugs at cs.uiuc.edu
It would be nice if LLVM was able to save space on ARM Thumb/Thumb2 by using
PC-relative LDR, at least when set to optimize for size. The Keil compiler does
this.
For example, instead of 8-byte MOVW/MOVT, what the Keil compiler will do is
intersperse the 8-byte relocation with the code, and use a PC-relative LDR.
This takes 6 bytes instead of 8. Trivial example from a boot loader (objdump
output):
00001000 <__main-0x8>:
1000: 4800 ldr r0, [pc, #0] (1004
<BuildAttributes$$gibberish+0x1004>)
1002: 4700 bx r0
1004: 0000100d .word 0x0000100d
The other nice effect of this is that it seems to search through your
already-existing constants before introducing new 4-byte addresses. So often
the 8-byte MOVW/MOVT becomes 2 bytes. Once, for example, I had a table of
function pointers, and it just pulled the address from there as it was only a
few hundred bytes away.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list