Commit 7df76747 by Naveen H.S Committed by Naveen H.S

2016-12-07 Naveen H.S <Naveen.Hurugalawadi@cavium.com>

gcc
	* config/aarch64/aarch64.c
	(aarch64_builtin_support_vector_misalignment): New.
	(TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT): Define.
gcc/testsuite
	* gcc.target/aarch64/pr71727.c : New Testcase.

From-SVN: r243333
parent fd1c9a07
2016-12-07 Naveen H.S <Naveen.Hurugalawadi@cavium.com>
* config/aarch64/aarch64.c
(aarch64_builtin_support_vector_misalignment): New.
(TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT): Define.
2016-12-06 David Malcolm <dmalcolm@redhat.com> 2016-12-06 David Malcolm <dmalcolm@redhat.com>
PR bootstrap/78705 PR bootstrap/78705
...@@ -141,6 +141,10 @@ static bool aarch64_vector_mode_supported_p (machine_mode); ...@@ -141,6 +141,10 @@ static bool aarch64_vector_mode_supported_p (machine_mode);
static bool aarch64_vectorize_vec_perm_const_ok (machine_mode vmode, static bool aarch64_vectorize_vec_perm_const_ok (machine_mode vmode,
const unsigned char *sel); const unsigned char *sel);
static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool); static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool);
static bool aarch64_builtin_support_vector_misalignment (machine_mode mode,
const_tree type,
int misalignment,
bool is_packed);
/* Major revision number of the ARM Architecture implemented by the target. */ /* Major revision number of the ARM Architecture implemented by the target. */
unsigned aarch64_architecture_version; unsigned aarch64_architecture_version;
...@@ -11412,6 +11416,37 @@ aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed) ...@@ -11412,6 +11416,37 @@ aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed)
return true; return true;
} }
/* Return true if the vector misalignment factor is supported by the
target. */
static bool
aarch64_builtin_support_vector_misalignment (machine_mode mode,
const_tree type, int misalignment,
bool is_packed)
{
if (TARGET_SIMD && STRICT_ALIGNMENT)
{
/* Return if movmisalign pattern is not supported for this mode. */
if (optab_handler (movmisalign_optab, mode) == CODE_FOR_nothing)
return false;
if (misalignment == -1)
{
/* Misalignment factor is unknown at compile time but we know
it's word aligned. */
if (aarch64_simd_vector_alignment_reachable (type, is_packed))
{
int element_size = TREE_INT_CST_LOW (TYPE_SIZE (type));
if (element_size != 64)
return true;
}
return false;
}
}
return default_builtin_support_vector_misalignment (mode, type, misalignment,
is_packed);
}
/* If VALS is a vector constant that can be loaded into a register /* If VALS is a vector constant that can be loaded into a register
using DUP, generate instructions to do so and return an RTX to using DUP, generate instructions to do so and return an RTX to
assign to the register. Otherwise return NULL_RTX. */ assign to the register. Otherwise return NULL_RTX. */
...@@ -14824,6 +14859,10 @@ aarch64_libgcc_floating_mode_supported_p ...@@ -14824,6 +14859,10 @@ aarch64_libgcc_floating_mode_supported_p
#undef TARGET_VECTOR_MODE_SUPPORTED_P #undef TARGET_VECTOR_MODE_SUPPORTED_P
#define TARGET_VECTOR_MODE_SUPPORTED_P aarch64_vector_mode_supported_p #define TARGET_VECTOR_MODE_SUPPORTED_P aarch64_vector_mode_supported_p
#undef TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
#define TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT \
aarch64_builtin_support_vector_misalignment
#undef TARGET_ARRAY_MODE_SUPPORTED_P #undef TARGET_ARRAY_MODE_SUPPORTED_P
#define TARGET_ARRAY_MODE_SUPPORTED_P aarch64_array_mode_supported_p #define TARGET_ARRAY_MODE_SUPPORTED_P aarch64_array_mode_supported_p
......
2016-12-07 Naveen H.S <Naveen.Hurugalawadi@cavium.com>
* gcc.target/aarch64/pr71727.c : New Testcase.
2016-12-06 Tom de Vries <tom@codesourcery.com> 2016-12-06 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/67955 PR tree-optimization/67955
......
/* { dg-do compile } */
/* { dg-options "-mstrict-align -O3" } */
struct test_struct_s
{
long a;
long b;
long c;
long d;
unsigned long e;
};
char _a;
struct test_struct_s xarray[128];
void
_start (void)
{
struct test_struct_s *new_entry;
new_entry = &xarray[0];
new_entry->a = 1;
new_entry->b = 2;
new_entry->c = 3;
new_entry->d = 4;
new_entry->e = 5;
return;
}
/* { dg-final { scan-assembler-times "mov\tx" 5 {target lp64} } } */
/* { dg-final { scan-assembler-not "add\tx0, x0, :" {target lp64} } } */
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