Commit 635e66fe by Alan Lawrence Committed by Alan Lawrence

[AArch64 array_mode 8/8] Add d-registers to TARGET_ARRAY_MODE_SUPPORTED_P

gcc/:

	* config/aarch64/aarch64.h (AARCH64_VALID_SIMD_DREG_MODE): New.

	* config/aarch64/aarch64.c (aarch64_array_mode_supported_p): Add
	AARCH64_VALID_SIMD_DREG_MODE.

gcc/testsuite/:

	* gcc.target/aarch64/vect_int32x2x4_1.c: New.

From-SVN: r227794
parent 97755701
2015-09-15 Alan Lawrence <alan.lawrence@arm.com> 2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
* config/aarch64/aarch64.h (AARCH64_VALID_SIMD_DREG_MODE): New.
* config/aarch64/aarch64.c (aarch64_array_mode_supported_p): Add
AARCH64_VALID_SIMD_DREG_MODE.
2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
* config/aarch64/aarch64-simd.md (aarch64_ld2r<mode>, * config/aarch64/aarch64-simd.md (aarch64_ld2r<mode>,
aarch64_ld3r<mode>, aarch64_ld4r<mode>): Combine together, making... aarch64_ld3r<mode>, aarch64_ld4r<mode>): Combine together, making...
(aarch64_simd_ld<VSTRUCT:nregs>r<VALLDIF:mode>): ...this. (aarch64_simd_ld<VSTRUCT:nregs>r<VALLDIF:mode>): ...this.
......
...@@ -677,7 +677,8 @@ aarch64_array_mode_supported_p (machine_mode mode, ...@@ -677,7 +677,8 @@ aarch64_array_mode_supported_p (machine_mode mode,
unsigned HOST_WIDE_INT nelems) unsigned HOST_WIDE_INT nelems)
{ {
if (TARGET_SIMD if (TARGET_SIMD
&& AARCH64_VALID_SIMD_QREG_MODE (mode) && (AARCH64_VALID_SIMD_QREG_MODE (mode)
|| AARCH64_VALID_SIMD_DREG_MODE (mode))
&& (nelems >= 2 && nelems <= 4)) && (nelems >= 2 && nelems <= 4))
return true; return true;
......
...@@ -872,6 +872,12 @@ extern enum aarch64_code_model aarch64_cmodel; ...@@ -872,6 +872,12 @@ extern enum aarch64_code_model aarch64_cmodel;
(aarch64_cmodel == AARCH64_CMODEL_TINY \ (aarch64_cmodel == AARCH64_CMODEL_TINY \
|| aarch64_cmodel == AARCH64_CMODEL_TINY_PIC) || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
/* Modes valid for AdvSIMD D registers, i.e. that fit in half a Q register. */
#define AARCH64_VALID_SIMD_DREG_MODE(MODE) \
((MODE) == V2SImode || (MODE) == V4HImode || (MODE) == V8QImode \
|| (MODE) == V2SFmode || (MODE) == V4HFmode || (MODE) == DImode \
|| (MODE) == DFmode)
/* Modes valid for AdvSIMD Q registers. */ /* Modes valid for AdvSIMD Q registers. */
#define AARCH64_VALID_SIMD_QREG_MODE(MODE) \ #define AARCH64_VALID_SIMD_QREG_MODE(MODE) \
((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \ ((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \
......
2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
* gcc.target/aarch64/vect_int32x2x4_1.c: New.
2015-09-15 Richard Biener <rguenther@suse.de> 2015-09-15 Richard Biener <rguenther@suse.de>
PR middle-end/67563 PR middle-end/67563
......
/* { dg-do compile } */
/* { dg-options "-O3 -fdump-rtl-expand" } */
#include <arm_neon.h>
uint32x2x4_t
test_1 (uint32x2x4_t a, uint32x2x4_t b)
{
uint32x2x4_t result;
for (unsigned index = 0; index < 4; ++index)
result.val[index] = a.val[index] + b.val[index];
return result;
}
/* Should not use the stack in expand. */
/* { dg-final { scan-rtl-dump-not "virtual-stack-vars" "expand" } } */
/* Should not have to modify the stack pointer. */
/* { dg-final { scan-assembler-not "\t(add|sub).*sp" } } */
/* Should not have to store or load anything. */
/* { dg-final { scan-assembler-not "\t(ld|st)\[rp\]" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment