[llvm] r227603 - ARM: further correct .fpu directive handling

Saleem Abdulrasool compnerd at compnerd.org
Fri Jan 30 19:13:59 PST 2015


On Fri, Jan 30, 2015 at 11:35 AM, Saleem Abdulrasool <compnerd at compnerd.org>
wrote:

> Author: compnerd
> Date: Fri Jan 30 13:35:18 2015
> New Revision: 227603
>
> URL: http://llvm.org/viewvc/llvm-project?rev=227603&view=rev
> Log:
> ARM: further correct .fpu directive handling
>
> If the original FPU specification involved a restricted VFP unit (d16),
> ensure
> that we reset the functionality when we encounter a new FPU type.  In
> particular, if the user specified vfpv3-d16, but switched to a VFPv3
> (which has
> 32 double precision registers), we would fail to reset the D16 feature, and
> treat it as being equivalent to vfpv3-d16.
>
> Added:
>     llvm/trunk/test/MC/ARM/pr22395-2.s
> Modified:
>     llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=227603&r1=227602&r2=227603&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Fri Jan 30
> 13:35:18 2015
> @@ -9197,11 +9197,12 @@ static const struct {
>  } FPUs[] = {
>      {ARM::VFP, ARM::FeatureVFP2, ARM::FeatureNEON},
>      {ARM::VFPV2, ARM::FeatureVFP2, ARM::FeatureNEON},
> -    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3, ARM::FeatureNEON},
> +    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3,
> +     ARM::FeatureNEON | ARM::FeatureD16},
>      {ARM::VFPV3_D16, ARM::FeatureVFP2 | ARM::FeatureVFP3 |
> ARM::FeatureD16,
>       ARM::FeatureNEON},
>      {ARM::VFPV4, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4,
> -     ARM::FeatureNEON},
> +     ARM::FeatureNEON | ARM::FeatureD16},
>      {ARM::VFPV4_D16,
>       ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
> ARM::FeatureD16,
>       ARM::FeatureNEON},
> @@ -9210,19 +9211,20 @@ static const struct {
>       ARM::FeatureNEON | ARM::FeatureCrypto},
>      {ARM::FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 |
> ARM::FeatureVFP4 |
>                          ARM::FeatureFPARMv8,
> -     ARM::FeatureNEON | ARM::FeatureCrypto},
> -    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON,
> 0},
> +     ARM::FeatureNEON | ARM::FeatureCrypto | ARM::FeatureD16},
> +    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON,
> +     ARM::FeatureD16},
>      {ARM::NEON_VFPV4,
>       ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
> ARM::FeatureNEON,
> -     0},
> +     ARM::FeatureD16},
>      {ARM::NEON_FP_ARMV8,
>       ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
>           ARM::FeatureFPARMv8 | ARM::FeatureNEON,
> -     ARM::FeatureCrypto},
> +     ARM::FeatureCrypto | ARM::FeatureD16},
>      {ARM::CRYPTO_NEON_FP_ARMV8,
>       ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
>           ARM::FeatureFPARMv8 | ARM::FeatureNEON | ARM::FeatureCrypto,
> -     0},
> +     ARM::FeatureD16},
>      {ARM::SOFTVFP, 0, 0},
>  };
>
>
> Added: llvm/trunk/test/MC/ARM/pr22395-2.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/pr22395-2.s?rev=227603&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/MC/ARM/pr22395-2.s (added)
> +++ llvm/trunk/test/MC/ARM/pr22395-2.s Fri Jan 30 13:35:18 2015
> @@ -0,0 +1,37 @@
> +@ RUN: llvm-mc -triple armv4t-eabi -mattr +d16 -filetype asm -o - %s 2>&1
> | FileCheck %s
> +
> +       .text
> +       .thumb
> +
> +       .p2align 2
> +
> +       .fpu vfpv3
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
> +       .fpu vfpv4
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
> +       .fpu neon
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
> +       .fpu neon-vfpv4
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
> +       .fpu neon-fp-armv8
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
> +       .fpu crypto-neon-fp-armv8
> +       vldmia r0, {d16-d31}
> +@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24,
> d25, d26, d27, d28, d29, d30, d31}
> +@ CHECK-NOT: error: register expected
> +
>
>
Hi Hans,

I think that we should also grab this for 3.6 as it fixes another case that
we didn't handle correctly previously (but this time is dependent on the
flags that users specify).  The change is similar in vein to SVN r227584.


> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>

-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150130/658bc591/attachment.html>


More information about the llvm-commits mailing list