aboutsummaryrefslogtreecommitdiff
path: root/8.4.0
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2021-03-04 10:57:56 +0000
committerSergei Trofimovich <slyfox@gentoo.org>2021-03-04 10:57:56 +0000
commit67592629eaebe65710e7e71edb7cd12c53244e33 (patch)
treed3766ba4f427bb6405ee355503eaeb2388677bff /8.4.0
parent11.0.0: drop 30_all_fno-delayed-branch.patch (fixed upstream) (diff)
downloadgcc-patches-67592629eaebe65710e7e71edb7cd12c53244e33.tar.gz
gcc-patches-67592629eaebe65710e7e71edb7cd12c53244e33.tar.bz2
gcc-patches-67592629eaebe65710e7e71edb7cd12c53244e33.zip
8.4.0: backport PR97236: fix bad use of VMAT_CONTIGUOUS
Bug: https://gcc.gnu.org/PR97236 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to '8.4.0')
-rw-r--r--8.4.0/gentoo/33_all_vmat-PR97236.patch118
-rw-r--r--8.4.0/gentoo/README.history3
2 files changed, 121 insertions, 0 deletions
diff --git a/8.4.0/gentoo/33_all_vmat-PR97236.patch b/8.4.0/gentoo/33_all_vmat-PR97236.patch
new file mode 100644
index 0000000..ee5e46c
--- /dev/null
+++ b/8.4.0/gentoo/33_all_vmat-PR97236.patch
@@ -0,0 +1,118 @@
+https://gcc.gnu.org/PR97236
+
+From de0ede7625f6c4d4bbd2caaf363032b0da80cf69 Mon Sep 17 00:00:00 2001
+From: Matthias Klose <doko@ubuntu.com>
+Date: Tue, 6 Oct 2020 13:41:37 +0200
+Subject: [PATCH] Backport fix for PR/tree-optimization/97236 - fix bad use of
+ VMAT_CONTIGUOUS
+
+This avoids using VMAT_CONTIGUOUS with single-element interleaving
+when using V1mode vectors. Instead keep VMAT_ELEMENTWISE but
+continue to avoid load-lanes and gathers.
+
+2020-10-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/97236
+ * tree-vect-stmts.c (get_group_load_store_type): Keep
+ VMAT_ELEMENTWISE for single-element vectors.
+
+ * gcc.dg/vect/pr97236.c: New testcase.
+
+(cherry picked from commit 1ab88985631dd2c5a5e3b5c0dce47cf8b6ed2f82)
+---
+ gcc/testsuite/gcc.dg/vect/pr97236.c | 43 +++++++++++++++++++++++++++++
+ gcc/tree-vect-stmts.c | 20 ++++++--------
+ 2 files changed, 52 insertions(+), 11 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.dg/vect/pr97236.c
+
+diff --git a/gcc/testsuite/gcc.dg/vect/pr97236.c b/gcc/testsuite/gcc.dg/vect/pr97236.c
+new file mode 100644
+index 00000000000..9d3dc20d953
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/vect/pr97236.c
+@@ -0,0 +1,43 @@
++typedef unsigned char __uint8_t;
++typedef __uint8_t uint8_t;
++typedef struct plane_t {
++ uint8_t *p_pixels;
++ int i_lines;
++ int i_pitch;
++} plane_t;
++
++typedef struct {
++ plane_t p[5];
++} picture_t;
++
++#define N 4
++
++void __attribute__((noipa))
++picture_Clone(picture_t *picture, picture_t *res)
++{
++ for (int i = 0; i < N; i++) {
++ res->p[i].p_pixels = picture->p[i].p_pixels;
++ res->p[i].i_lines = picture->p[i].i_lines;
++ res->p[i].i_pitch = picture->p[i].i_pitch;
++ }
++}
++
++int
++main()
++{
++ picture_t aaa, bbb;
++ uint8_t pixels[10] = {1, 1, 1, 1, 1, 1, 1, 1};
++
++ for (unsigned i = 0; i < N; i++)
++ aaa.p[i].p_pixels = pixels;
++
++ picture_Clone (&aaa, &bbb);
++
++ uint8_t c = 0;
++ for (unsigned i = 0; i < N; i++)
++ c += bbb.p[i].p_pixels[0];
++
++ if (c != N)
++ __builtin_abort ();
++ return 0;
++}
+diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
+index 7472558048c..ea75c7249aa 100644
+--- a/gcc/tree-vect-stmts.c
++++ b/gcc/tree-vect-stmts.c
+@@ -2209,25 +2209,23 @@ get_group_load_store_type (gimple *stmt, tree vectype, bool slp,
+ /* First cope with the degenerate case of a single-element
+ vector. */
+ if (known_eq (TYPE_VECTOR_SUBPARTS (vectype), 1U))
+- *memory_access_type = VMAT_CONTIGUOUS;
++ ;
+
+ /* Otherwise try using LOAD/STORE_LANES. */
+- if (*memory_access_type == VMAT_ELEMENTWISE
+- && (vls_type == VLS_LOAD
+- ? vect_load_lanes_supported (vectype, group_size, masked_p)
+- : vect_store_lanes_supported (vectype, group_size,
+- masked_p)))
++ else if (vls_type == VLS_LOAD
++ ? vect_load_lanes_supported (vectype, group_size, masked_p)
++ : vect_store_lanes_supported (vectype, group_size,
++ masked_p))
+ {
+ *memory_access_type = VMAT_LOAD_STORE_LANES;
+ overrun_p = would_overrun_p;
+ }
+
+ /* If that fails, try using permuting loads. */
+- if (*memory_access_type == VMAT_ELEMENTWISE
+- && (vls_type == VLS_LOAD
+- ? vect_grouped_load_supported (vectype, single_element_p,
+- group_size)
+- : vect_grouped_store_supported (vectype, group_size)))
++ else if (vls_type == VLS_LOAD
++ ? vect_grouped_load_supported (vectype, single_element_p,
++ group_size)
++ : vect_grouped_store_supported (vectype, group_size))
+ {
+ *memory_access_type = VMAT_CONTIGUOUS_PERMUTE;
+ overrun_p = would_overrun_p;
+--
+2.30.1
+
diff --git a/8.4.0/gentoo/README.history b/8.4.0/gentoo/README.history
index b922698..3997a59 100644
--- a/8.4.0/gentoo/README.history
+++ b/8.4.0/gentoo/README.history
@@ -1,3 +1,6 @@
+4 TODO
+ + 33_all_vmat-PR97236.patch
+
3 18 Dec 2020
+ 31_all_plugin-objdump.patch
U 11_all_extra-options.patch