[compiler-rt] r317814 - [Builtins] Do not use tailcall for Thumb1

Weiming Zhao via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 9 09:32:57 PST 2017


Author: weimingz
Date: Thu Nov  9 09:32:57 2017
New Revision: 317814

URL: http://llvm.org/viewvc/llvm-project?rev=317814&view=rev
Log:
[Builtins] Do not use tailcall for Thumb1

Summary:
The `b` instruction in Thumb1 has limited range, which may cause link-time errors if the jump target is far away.
This patch guards the tailcalls for non-Thumb1

Reviewers: peter.smith, compnerd, rengolin, eli.friedman

Reviewed By: rengolin

Subscribers: joerg, dalias, javed.absar, llvm-commits

Differential Revision: https://reviews.llvm.org/D39700

Modified:
    compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S
    compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S
    compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S
    compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S

Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S Thu Nov  9 09:32:57 2017
@@ -14,7 +14,13 @@
         .syntax unified
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp)
+#ifdef USE_THUMB_1
+        push    {r7, lr}
+        bl      memcmp
+        pop     {r7, pc}
+#else
         b       memcmp
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_memcmp)
 
 DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp)

Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S Thu Nov  9 09:32:57 2017
@@ -14,7 +14,13 @@
         .syntax unified
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy)
+#ifdef USE_THUMB_1
+        push    {r7, lr}
+        bl      memcpy
+        pop     {r7, pc}
+#else
         b       memcpy
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_memcpy)
 
 DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy)

Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S Thu Nov  9 09:32:57 2017
@@ -13,7 +13,13 @@
 
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove)
+#ifdef USE_THUMB_1
+        push    {r7, lr}
+        bl      memmove
+        pop     {r7, pc}
+#else
         b       memmove
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_memmove)
 
 DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove)

Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S Thu Nov  9 09:32:57 2017
@@ -18,7 +18,13 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_memse
         mov     r3, r1
         mov     r1, r2
         mov     r2, r3
+#ifdef USE_THUMB_1
+        push    {r7, lr}
+        bl      memset
+        pop     {r7, pc}
+#else
         b       memset
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_memset)
 
 DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset)
@@ -28,7 +34,13 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_mems
 DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
         mov     r2, r1
         movs    r1, #0
+#ifdef USE_THUMB_1
+        push    {r7, lr}
+        bl      memset
+        pop     {r7, pc}
+#else
         b       memset
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_memclr)
 
 DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)




More information about the llvm-commits mailing list