diff options
author | belagod <belagod@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-04 11:43:04 +0000 |
---|---|---|
committer | belagod <belagod@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-04 11:43:04 +0000 |
commit | bb374c4d80818d31efecaead684a9586cba32419 (patch) | |
tree | c6b6cf74611be587609cba012c66a550c0217d45 /gcc/config/aarch64 | |
parent | 7a4d976ff9dc3e2a6d45cbbf67a2b11b78d82ade (diff) | |
download | gcc-bb374c4d80818d31efecaead684a9586cba32419.tar.gz |
2012-12-04 Tejas Belagod <tejas.belagod@arm.com>
* config/aarch64/aarch64.c (aarch64_simd_vector_alignment,
aarch64_simd_vector_alignment_reachable): New.
(TARGET_VECTOR_ALIGNMENT, TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE):
Define.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194126 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/aarch64')
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index f262ef940e0..bd723211351 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -6316,6 +6316,31 @@ aarch64_simd_attr_length_move (rtx insn) return 4; } +/* Implement target hook TARGET_VECTOR_ALIGNMENT. The AAPCS64 sets the maximum + alignment of a vector to 128 bits. */ +static HOST_WIDE_INT +aarch64_simd_vector_alignment (const_tree type) +{ + HOST_WIDE_INT align = tree_low_cst (TYPE_SIZE (type), 0); + return MIN (align, 128); +} + +/* Implement target hook TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE. */ +static bool +aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed) +{ + if (is_packed) + return false; + + /* We guarantee alignment for vectors up to 128-bits. */ + if (tree_int_cst_compare (TYPE_SIZE (type), + bitsize_int (BIGGEST_ALIGNMENT)) > 0) + return false; + + /* Vectors whose size is <= BIGGEST_ALIGNMENT are naturally aligned. */ + return true; +} + static unsigned HOST_WIDE_INT aarch64_shift_truncation_mask (enum machine_mode mode) { @@ -6864,6 +6889,13 @@ aarch64_c_mode_for_suffix (char suffix) #undef TARGET_MAX_ANCHOR_OFFSET #define TARGET_MAX_ANCHOR_OFFSET 4095 +#undef TARGET_VECTOR_ALIGNMENT +#define TARGET_VECTOR_ALIGNMENT aarch64_simd_vector_alignment + +#undef TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE +#define TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE \ + aarch64_simd_vector_alignment_reachable + struct gcc_target targetm = TARGET_INITIALIZER; #include "gt-aarch64.h" |