[llvm-bugs] [Bug 25722] New: ARM: integrated assembler should replace "ldr rX, =imm" with "mov rX, #imm" if imm can be encoded as immediate

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Dec 2 13:07:30 PST 2015


            Bug ID: 25722
           Summary: ARM: integrated assembler should replace "ldr rX,
                    =imm" with "mov rX, #imm" if imm can be encoded as
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: ARM
          Assignee: unassignedbugs at nondot.org
          Reporter: nicolasweber at gmx.de
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

gas does that, it produces smaller code, and it prevents follow-on "out of
range pc-relative fixup value" errors if the ldr is in a large-ish code block
and the offset to the constant pool is too large.

Example (reduced from boringssl):

thakis at thakis:~/src/chrome/src$ head arm.S
.fpu neon
.align 4
.global foo
.hidden foo
.type foo, %function

ldr r4, =0
mov r1, r2
mov r1, r2
/* repeat previous instruction 2000 times here */

thakis at thakis:~/src/chrome/src$
third_party/llvm-build/Release+Asserts/bin/clang -c arm.S -march=armv7-a 
-target arm-linux-androideab
arm.S:8:1: error: out of range pc-relative fixup value
ldr r4, =0
thakis at thakis:~/src/chrome/src$
-c arm.S
thakis at thakis:~/src/chrome/src$
-D -marm arm.o  | head

arm.o:     file format elf32-littlearm

Disassembly of section .text:

00000000 <.text>:
       0:    e3a04000     mov    r4, #0
       4:    e1a01002     mov    r1, r2
       8:    e1a01002     mov    r1, r2

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20151202/96cbd523/attachment-0001.html>

More information about the llvm-bugs mailing list