[AArch64] Backport to gcc-7 PR71727 fix -mstrict-align
Christophe Lyon
christophe.lyon@linaro.org
Wed Oct 4 13:35:00 GMT 2017
Hi,
I've recently committed a follow-up fix for PR71727 for -mstrict-align
on aarch64 (r253242).
I think it would be appropriate to apply it to gcc-7-branch. The patch
from trunk applies cleanly to gcc-7-branch.
Although the original bug was reported against 4.9.4, 5.3.1, 6.1.0,
Naveen's patch was not backported to these branches, so it's not
appropriate to backport my patch there.
OK?
Thanks,
Christophe
-------------- next part --------------
2017-09-20 Christophe Lyon <christophe.lyon@linaro.org>
PR target/71727
gcc/
* config/aarch64/aarch64.c
(aarch64_builtin_support_vector_misalignment): Always return false
when misalignment is unknown.
gcc/testsuite/
* gcc.target/aarch64/pr71727-2.c: New test.
-------------- next part --------------
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 799989a..7cc67ec 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11757,19 +11757,9 @@ aarch64_builtin_support_vector_misalignment (machine_mode mode,
if (optab_handler (movmisalign_optab, mode) == CODE_FOR_nothing)
return false;
+ /* Misalignment factor is unknown at compile time. */
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 false;
}
return default_builtin_support_vector_misalignment (mode, type, misalignment,
is_packed);
diff --git a/gcc/testsuite/gcc.target/aarch64/pr71727-2.c b/gcc/testsuite/gcc.target/aarch64/pr71727-2.c
new file mode 100644
index 0000000..2bc803a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr71727-2.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-mstrict-align -O3" } */
+
+unsigned char foo(const unsigned char *buffer, unsigned int length)
+{
+ unsigned char sum;
+ unsigned int count;
+
+ for (sum = 0, count = 0; count < length; count++) {
+ sum = (unsigned char) (sum + *(buffer + count));
+ }
+
+ return sum;
+}
+
+/* { dg-final { scan-assembler-times "and\tw\[0-9\]+, w\[0-9\]+, 15" 1 } } */
More information about the Gcc-patches
mailing list