diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-01-07 01:47:05 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-01-07 01:47:05 +0000 |
commit | 45ca7c6336f174fae3a9521d5161a498ca27fd13 (patch) | |
tree | 7885c9d2cea7f10d4f0eff077b8d19543159cbfe /test/CodeGen/ARM | |
parent | f231a6dc7f251859af61677991b9c70ade6e1bfa (diff) | |
download | external_llvm-45ca7c6336f174fae3a9521d5161a498ca27fd13.zip external_llvm-45ca7c6336f174fae3a9521d5161a498ca27fd13.tar.gz external_llvm-45ca7c6336f174fae3a9521d5161a498ca27fd13.tar.bz2 |
Use movw+movt in ARMFastISel::ARMMaterializeGV.
This eliminates a lot of constant pool entries for -O0 builds of code
with many global variable accesses.
This speeds up -O0 codegen of consumer-typeset by 2x because the
constant island pass no longer has to look at thousands of constant pool
entries.
<rdar://problem/10629774>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147712 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/ARM')
-rw-r--r-- | test/CodeGen/ARM/fast-isel-intrinsic.ll | 30 | ||||
-rw-r--r-- | test/CodeGen/ARM/fast-isel.ll | 12 |
2 files changed, 28 insertions, 14 deletions
diff --git a/test/CodeGen/ARM/fast-isel-intrinsic.ll b/test/CodeGen/ARM/fast-isel-intrinsic.ll index f2ba04f..5bc35ee 100644 --- a/test/CodeGen/ARM/fast-isel-intrinsic.ll +++ b/test/CodeGen/ARM/fast-isel-intrinsic.ll @@ -6,14 +6,16 @@ define void @t1() nounwind ssp { ; ARM: t1 -; ARM: ldr r0, LCPI0_0 +; ARM: movw r0, :lower16:_message1 +; ARM: movt r0, :upper16:_message1 ; ARM: add r0, r0, #5 ; ARM: movw r1, #64 ; ARM: movw r2, #10 ; ARM: uxtb r1, r1 ; ARM: bl _memset ; THUMB: t1 -; THUMB: ldr.n r0, LCPI0_0 +; THUMB: movw r0, :lower16:_message1 +; THUMB: movt r0, :upper16:_message1 ; THUMB: adds r0, #5 ; THUMB: movs r1, #64 ; THUMB: movt r1, #0 @@ -29,7 +31,8 @@ declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind define void @t2() nounwind ssp { ; ARM: t2 -; ARM: ldr r0, LCPI1_0 +; ARM: movw r0, :lower16:L_temp$non_lazy_ptr +; ARM: movt r0, :upper16:L_temp$non_lazy_ptr ; ARM: ldr r0, [r0] ; ARM: add r1, r0, #4 ; ARM: add r0, r0, #16 @@ -39,7 +42,8 @@ define void @t2() nounwind ssp { ; ARM: ldr r1, [sp] @ 4-byte Reload ; ARM: bl _memcpy ; THUMB: t2 -; THUMB: ldr.n r0, LCPI1_0 +; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr +; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr ; THUMB: ldr r0, [r0] ; THUMB: adds r1, r0, #4 ; THUMB: adds r0, #16 @@ -55,7 +59,8 @@ declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, define void @t3() nounwind ssp { ; ARM: t3 -; ARM: ldr r0, LCPI2_0 +; ARM: movw r0, :lower16:L_temp$non_lazy_ptr +; ARM: movt r0, :upper16:L_temp$non_lazy_ptr ; ARM: ldr r0, [r0] ; ARM: add r1, r0, #4 ; ARM: add r0, r0, #16 @@ -63,7 +68,8 @@ define void @t3() nounwind ssp { ; ARM: mov r0, r1 ; ARM: bl _memmove ; THUMB: t3 -; THUMB: ldr.n r0, LCPI2_0 +; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr +; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr ; THUMB: ldr r0, [r0] ; THUMB: adds r1, r0, #4 ; THUMB: adds r0, #16 @@ -77,9 +83,11 @@ define void @t3() nounwind ssp { define void @t4() nounwind ssp { ; ARM: t4 -; ARM: ldr r0, LCPI3_0 +; ARM: movw r0, :lower16:L_temp$non_lazy_ptr +; ARM: movt r0, :upper16:L_temp$non_lazy_ptr ; ARM: ldr r0, [r0] -; ARM: ldr r1, LCPI3_1 +; ARM: movw r1, :lower16:L_temp$non_lazy_ptr +; ARM: movt r1, :upper16:L_temp$non_lazy_ptr ; ARM: ldr r1, [r1] ; ARM: ldr r2, [r1, #16] ; ARM: str r2, [r0, #4] @@ -88,9 +96,11 @@ define void @t4() nounwind ssp { ; ARM: ldrh r1, [r1, #24] ; ARM: strh r1, [r0, #12] ; ARM: bx lr -; THUMB: ldr.n r0, LCPI3_0 +; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr +; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr ; THUMB: ldr r0, [r0] -; THUMB: ldr.n r1, LCPI3_1 +; THUMB: movw r1, :lower16:L_temp$non_lazy_ptr +; THUMB: movt r1, :upper16:L_temp$non_lazy_ptr ; THUMB: ldr r1, [r1] ; THUMB: ldr r2, [r1, #16] ; THUMB: str r2, [r0, #4] diff --git a/test/CodeGen/ARM/fast-isel.ll b/test/CodeGen/ARM/fast-isel.ll index 9f33aea..c8e0211 100644 --- a/test/CodeGen/ARM/fast-isel.ll +++ b/test/CodeGen/ARM/fast-isel.ll @@ -142,19 +142,23 @@ define void @test4() { store i32 %b, i32* @test4g ret void -; THUMB: ldr.n r0, LCPI4_1 +; THUMB: movw r0, :lower16:L_test4g$non_lazy_ptr +; THUMB: movt r0, :upper16:L_test4g$non_lazy_ptr ; THUMB: ldr r0, [r0] ; THUMB: ldr r0, [r0] ; THUMB: adds r0, #1 -; THUMB: ldr.n r1, LCPI4_0 +; THUMB: movw r1, :lower16:L_test4g$non_lazy_ptr +; THUMB: movt r1, :upper16:L_test4g$non_lazy_ptr ; THUMB: ldr r1, [r1] ; THUMB: str r0, [r1] -; ARM: ldr r0, LCPI4_1 +; ARM: movw r0, :lower16:L_test4g$non_lazy_ptr +; ARM: movt r0, :upper16:L_test4g$non_lazy_ptr ; ARM: ldr r0, [r0] ; ARM: ldr r0, [r0] ; ARM: add r0, r0, #1 -; ARM: ldr r1, LCPI4_0 +; ARM: movw r1, :lower16:L_test4g$non_lazy_ptr +; ARM: movt r1, :upper16:L_test4g$non_lazy_ptr ; ARM: ldr r1, [r1] ; ARM: str r0, [r1] } |