As we now ask vect_supportable_dr_alignment for gathers avoid using
(optimized) re-align instructions for them.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

        PR tree-optimization/122131
        * tree-vect-data-refs.cc (vect_supportable_dr_alignment): Do
        not use re-align loads for gathers.

        * gcc.target/powerpc/altivec-39.c: New testcase.
---
 gcc/testsuite/gcc.target/powerpc/altivec-39.c | 17 +++++++++++++++++
 gcc/tree-vect-data-refs.cc                    |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec-39.c

diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-39.c 
b/gcc/testsuite/gcc.target/powerpc/altivec-39.c
new file mode 100644
index 00000000000..3263eb7bbc6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-39.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -maltivec" } */
+/* { dg-require-effective-target powerpc_altivec } */
+
+char *sort_filesquote_name_buf_plimit;
+int sort_filesquote_name_buf_width;
+int *__ctype_b_loc() __attribute__((__const__));
+void sort_filesquote_name_buf(char* p)
+{
+  unsigned displayed_width = 0;
+  while (p < sort_filesquote_name_buf_plimit) {
+    if (__ctype_b_loc()[*p])
+      displayed_width++;
+    p++;
+  }
+  sort_filesquote_name_buf_width = displayed_width;
+}
diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc
index a31ff93bbd3..c40a5205911 100644
--- a/gcc/tree-vect-data-refs.cc
+++ b/gcc/tree-vect-data-refs.cc
@@ -6610,7 +6610,7 @@ vect_supportable_dr_alignment (vec_info *vinfo, 
dr_vec_info *dr_info,
         }
     } */
 
-  if (DR_IS_READ (dr))
+  if (DR_IS_READ (dr) && !is_gather_scatter)
     {
       if (can_implement_p (vec_realign_load_optab, mode)
          && (!targetm.vectorize.builtin_mask_for_load
-- 
2.51.0

Reply via email to