public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/autopar_devel] tree-vect-generic: Fix bitfield widths [PR94980 3/3]
@ 2020-08-22 21:08 Giuliano Belinassi
  0 siblings, 0 replies; only message in thread
From: Giuliano Belinassi @ 2020-08-22 21:08 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1366fc6ca39a92f95f0f7b409fbdaa2183db5f1e

commit 1366fc6ca39a92f95f0f7b409fbdaa2183db5f1e
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Tue May 12 09:01:13 2020 +0100

    tree-vect-generic: Fix bitfield widths [PR94980 3/3]
    
    This third patch of three actually fixes the PR.  We were using
    8-bit BIT_FIELD_REFs to access single-bit elements, and multiplying
    the vector index by 8 bits rather than 1 bit.
    
    2020-05-12  Richard Sandiford  <richard.sandiford@arm.com>
    
    gcc/
            PR tree-optimization/94980
            * tree-vect-generic.c (expand_vector_comparison): Use
            vector_element_bits_tree to get the element size in bits,
            rather than using TYPE_SIZE.
            (expand_vector_condition, vector_element): Likewise.
    
    gcc/testsuite/
            PR tree-optimization/94980
            * gcc.target/i386/pr94980.c: New test.

Diff:
---
 gcc/ChangeLog                           |  8 ++++++++
 gcc/testsuite/ChangeLog                 |  5 +++++
 gcc/testsuite/gcc.target/i386/pr94980.c | 10 ++++++++++
 gcc/tree-vect-generic.c                 |  8 ++++----
 4 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bcaad02166c..751b71d5710 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2020-05-12  Richard Sandiford  <richard.sandiford@arm.com>
+
+	PR tree-optimization/94980
+	* tree-vect-generic.c (expand_vector_comparison): Use
+	vector_element_bits_tree to get the element size in bits,
+	rather than using TYPE_SIZE.
+	(expand_vector_condition, vector_element): Likewise.
+
 2020-05-12  Richard Sandiford  <richard.sandiford@arm.com>
 
 	PR tree-optimization/94980
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5064e684b6b..dc7eb3141a4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-12  Richard Sandiford  <richard.sandiford@arm.com>
+
+	PR tree-optimization/94980
+	* gcc.target/i386/pr94980.c: New test.
+
 2020-05-11  Kelvin Nilsen  <kelvin@gcc.gnu.org>
 
 	* gcc.target/powerpc/vec-clzm-0.c: Rename to...
diff --git a/gcc/testsuite/gcc.target/i386/pr94980.c b/gcc/testsuite/gcc.target/i386/pr94980.c
new file mode 100644
index 00000000000..488f94abec9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr94980.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-mavx512vl" } */
+
+int __attribute__((__vector_size__(16))) v;
+
+void
+foo(void)
+{
+  0 <= (0 != v) >= 0;
+}
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
index adea9337a97..a7fe83da0e3 100644
--- a/gcc/tree-vect-generic.c
+++ b/gcc/tree-vect-generic.c
@@ -390,7 +390,7 @@ expand_vector_comparison (gimple_stmt_iterator *gsi, tree type, tree op0,
 						(TREE_TYPE (type)))))
 	{
 	  tree inner_type = TREE_TYPE (TREE_TYPE (op0));
-	  tree part_width = TYPE_SIZE (inner_type);
+	  tree part_width = vector_element_bits_tree (TREE_TYPE (op0));
 	  tree index = bitsize_int (0);
 	  int nunits = nunits_for_known_piecewise_op (TREE_TYPE (op0));
 	  int prec = GET_MODE_PRECISION (SCALAR_TYPE_MODE (type));
@@ -944,9 +944,9 @@ expand_vector_condition (gimple_stmt_iterator *gsi)
   vec<constructor_elt, va_gc> *v;
   tree constr;
   tree inner_type = TREE_TYPE (type);
+  tree width = vector_element_bits_tree (type);
   tree cond_type = TREE_TYPE (TREE_TYPE (a));
   tree comp_inner_type = cond_type;
-  tree width = TYPE_SIZE (inner_type);
   tree index = bitsize_int (0);
   tree comp_width = width;
   tree comp_index = index;
@@ -960,7 +960,7 @@ expand_vector_condition (gimple_stmt_iterator *gsi)
       a1 = TREE_OPERAND (a, 0);
       a2 = TREE_OPERAND (a, 1);
       comp_inner_type = TREE_TYPE (TREE_TYPE (a1));
-      comp_width = TYPE_SIZE (comp_inner_type);
+      comp_width = vector_element_bits_tree (TREE_TYPE (a1));
     }
 
   if (expand_vec_cond_expr_p (type, TREE_TYPE (a1), TREE_CODE (a)))
@@ -1333,7 +1333,7 @@ vector_element (gimple_stmt_iterator *gsi, tree vect, tree idx, tree *ptmpvec)
         }
       else
         {
-	  tree size = TYPE_SIZE (vect_elt_type);
+	  tree size = vector_element_bits_tree (vect_type);
 	  tree pos = fold_build2 (MULT_EXPR, bitsizetype, bitsize_int (index),
 				  size);
 	  return fold_build3 (BIT_FIELD_REF, vect_elt_type, vect, size, pos);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-22 21:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-22 21:08 [gcc/devel/autopar_devel] tree-vect-generic: Fix bitfield widths [PR94980 3/3] Giuliano Belinassi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).