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.

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.

R.

Reply via email to