[compiler-rt] r211032 - compiler-rt: prefer thumb over ARM

Stephen Hines srhines at google.com
Thu Jul 17 00:47:36 PDT 2014


This patch actually breaks umodsi3 on devices with CLZ, but without IDIV.
In umodsi3, there is a computed jump (based on 4 byte ARM instructions),
which ends up overshooting the end of the function for small inputs (in my
case a 17 % 2 ended up crashing LLVM compilation on an ARM device). I am
going to post a revert for this patch (and the related "add it blocks for
Thumb-2") until someone wants to rewrite umodsi3 in a thumb/thumb2 friendly
way.

Steve


On Mon, Jun 16, 2014 at 9:05 AM, Saleem Abdulrasool <compnerd at compnerd.org>
wrote:

> Author: compnerd
> Date: Mon Jun 16 11:05:24 2014
> New Revision: 211032
>
> URL: http://llvm.org/viewvc/llvm-project?rev=211032&view=rev
> Log:
> compiler-rt: prefer thumb over ARM
>
> When possible, use Thumb or Thumb-2 over ARM instructions.  This is
> particularly
> important for pure-Thumb environments (e.g. Windows on ARM).  Although, it
> is
> possible to conditionalise this for that target specifically, this is
> available
> on most newer ARM CPUs, and the code remains compatible with older CPUs
> with no
> adverse effects.  It therefore feels better to always prefer Thumb when
> possible.
>
> Modified:
>     compiler-rt/trunk/lib/builtins/arm/bswapdi2.S
>     compiler-rt/trunk/lib/builtins/arm/bswapsi2.S
>     compiler-rt/trunk/lib/builtins/arm/clzdi2.S
>     compiler-rt/trunk/lib/builtins/arm/clzsi2.S
>     compiler-rt/trunk/lib/builtins/arm/divmodsi4.S
>     compiler-rt/trunk/lib/builtins/arm/divsi3.S
>     compiler-rt/trunk/lib/builtins/arm/modsi3.S
>     compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
>     compiler-rt/trunk/lib/builtins/arm/udivsi3.S
>     compiler-rt/trunk/lib/builtins/arm/umodsi3.S
>
> Modified: compiler-rt/trunk/lib/builtins/arm/bswapdi2.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapdi2.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/bswapdi2.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/bswapdi2.S Mon Jun 16 11:05:24 2014
> @@ -11,6 +11,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>  //
>  // extern uint64_t __bswapdi2(uint64_t);
>
> Modified: compiler-rt/trunk/lib/builtins/arm/bswapsi2.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapsi2.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/bswapsi2.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/bswapsi2.S Mon Jun 16 11:05:24 2014
> @@ -11,6 +11,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>  //
>  // extern uint32_t __bswapsi2(uint32_t);
>
> Modified: compiler-rt/trunk/lib/builtins/arm/clzdi2.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzdi2.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/clzdi2.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/clzdi2.S Mon Jun 16 11:05:24 2014
> @@ -15,6 +15,10 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
> +
>
>         .p2align        2
>  DEFINE_COMPILERRT_FUNCTION(__clzdi2)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/clzsi2.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzsi2.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/clzsi2.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/clzsi2.S Mon Jun 16 11:05:24 2014
> @@ -15,6 +15,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align        2
>  DEFINE_COMPILERRT_FUNCTION(__clzsi2)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/divmodsi4.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divmodsi4.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/divmodsi4.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/divmodsi4.S Mon Jun 16 11:05:24 2014
> @@ -23,6 +23,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 3
>  DEFINE_COMPILERRT_FUNCTION(__divmodsi4)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/divsi3.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divsi3.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/divsi3.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/divsi3.S Mon Jun 16 11:05:24 2014
> @@ -22,6 +22,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 3
>  // Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the same
> routine.
>
> Modified: compiler-rt/trunk/lib/builtins/arm/modsi3.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/modsi3.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/modsi3.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/modsi3.S Mon Jun 16 11:05:24 2014
> @@ -22,6 +22,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 3
>  DEFINE_COMPILERRT_FUNCTION(__modsi3)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S Mon Jun 16 11:05:24
> 2014
> @@ -16,6 +16,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 2
>  DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/udivsi3.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/udivsi3.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/udivsi3.S Mon Jun 16 11:05:24 2014
> @@ -16,6 +16,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 2
>  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidiv, __udivsi3)
>
> Modified: compiler-rt/trunk/lib/builtins/arm/umodsi3.S
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/umodsi3.S?rev=211032&r1=211031&r2=211032&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/builtins/arm/umodsi3.S (original)
> +++ compiler-rt/trunk/lib/builtins/arm/umodsi3.S Mon Jun 16 11:05:24 2014
> @@ -16,6 +16,9 @@
>
>         .syntax unified
>         .text
> +#if __ARM_ARCH_ISA_THUMB == 2
> +       .thumb
> +#endif
>
>         .p2align 2
>  DEFINE_COMPILERRT_FUNCTION(__umodsi3)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140717/8b540c5c/attachment.html>


More information about the llvm-commits mailing list