Hi,

I forgot to ping this,

is the updated patch OK? 

On 9/6/19 1:27 PM, Bernd Edlinger wrote:
> On 9/6/19 12:47 PM, Richard Earnshaw (lists) wrote:
>> On 06/09/2019 11:28, Bernd Edlinger wrote:
>>> Hi!
>>>
>>> It was pointed out in the PR that the test case fails on big endian
>>> targets.
>>>
>>> This is probably obvious, since the test case scans the assembler
>>> output for vld1.32, vst1.32, vldr and vstr, but these are never
>>> generated for -mbig-endian.
>>>
>>> So added dg-require-effective-target arm_little_endian.
>>>
>>>
>>> Is it OK for trunk?
>>>
>>>
>>> Thanks
>>> Bernd.
>>>
>>
>> I think this test needs further work - there's opportunity for the compiler 
>> to optimize it by placement of both a and x, since it can see both 
>> definitions.  Note that vldr is safe on 32-bit (or higher) aligned objects, 
>> so if GCC can see the definition it can use that information (the actual 
>> rather than the declared placement) in its optimizations.
>>
>> Changing the global to extern, or making it a pointer and dereferencing that 
>> is probably enough.
>>
> 
> done.
> 
>> Finally, the test is really just a memory copy operation.  There's no real 
>> reason why it has to use the vector registers for this at all.  I think if 
>> you want to force them, you'll need to do some operations on the values as 
>> well so that the compiler has to place the values in the vector registers 
>> rather than anywhere it sees fit.
>>
> 
> Okay, nailed the test case down, to use neon registers.
> 
> Is it OK now?
> 
> 
> Thanks
> Bernd.
> 
> 2019-09-06  Bernd Edlinger  <bernd.edlin...@hotmail.de>
> 
>       * gcc.target/arm/pr91603.c: Add dg-require-effective-target
>       arm_little_endian.  Force value in neon register.
> 
> Index: gcc/testsuite/gcc.target/arm/pr91603.c
> ===================================================================
> --- gcc/testsuite/gcc.target/arm/pr91603.c    (revision 275409)
> +++ gcc/testsuite/gcc.target/arm/pr91603.c    (working copy)
> @@ -1,5 +1,6 @@
>  /* { dg-do compile }  */
>  /* { dg-require-effective-target arm_neon_ok } */
> +/* { dg-require-effective-target arm_little_endian } */
>  /* { dg-options "-O3" } */
>  /* { dg-add-options arm_neon } */
>  
> @@ -6,7 +7,7 @@
>  typedef __simd64_int32_t int32x2_t;
>  typedef __attribute__((aligned (1))) int32x2_t unalignedvec;
>  
> -unalignedvec a = {11, 13};
> +extern unalignedvec a;
>  
>  void foo(unalignedvec *);
>  
> @@ -13,7 +14,9 @@ void foo(unalignedvec *);
>  void test()
>  {
>    unalignedvec x = a;
> +  __asm__ ("@ value in %h0": "=w"(x) : "0"(x));
>    foo (&x);
> +  __asm__ ("@ value in %h0": "=w"(x) : "0"(x));
>    a = x;
>  }
>  

Reply via email to