diff mbox series

tree-optimization/95297 - handle scalar shift arg for SLP invariant vectype

Message ID nycvar.YFH.7.76.2005251309320.4397@zhemvz.fhfr.qr
State New
Headers show
Series tree-optimization/95297 - handle scalar shift arg for SLP invariant vectype | expand

Commit Message

Richard Biener May 25, 2020, 11:09 a.m. UTC
This skips invariant vector type setting for a scalar shift argument.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95297
	* tree-vect-stmts.c (vectorizable_shift): For scalar_shift_arg
	skip updating operand 1 vector type.

	* g++.dg/vect/pr95297.cc: New testcase.
---
 gcc/testsuite/g++.dg/vect/pr95297.cc | 22 ++++++++++++++++++++++
 gcc/tree-vect-stmts.c                |  3 ++-
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/vect/pr95297.cc
diff mbox series

Patch

diff --git a/gcc/testsuite/g++.dg/vect/pr95297.cc b/gcc/testsuite/g++.dg/vect/pr95297.cc
new file mode 100644
index 00000000000..6ffc92e5fd0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr95297.cc
@@ -0,0 +1,22 @@ 
+// { dg-do compile }
+// { dg-additional-options "-O3 -fvect-cost-model=dynamic" }
+
+extern bool var_10;
+extern int var_16;
+extern short var_17;
+extern long var_18;
+extern int arr_3[][13];
+
+int min(const int &a, const int &b)
+{
+  return a < b ? a : b;
+}
+
+void test() {
+    for (short a = 0; a < 010; a++)
+      for (char b = 0; b < 012; b++)
+	arr_3[a][b] = min(-var_10, 0) + 2147483647 >> var_10;
+    var_16 = (bool)4;
+    var_17 = 0;
+    var_18 = -1594153176;
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 9023dd4c216..76c7b995817 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -5784,7 +5784,8 @@  vectorizable_shift (vec_info *vinfo,
     {
       if (slp_node
 	  && (!vect_maybe_update_slp_op_vectype (slp_op0, vectype)
-	      || !vect_maybe_update_slp_op_vectype (slp_op1, op1_vectype)))
+	      || (!scalar_shift_arg
+		  && !vect_maybe_update_slp_op_vectype (slp_op1, op1_vectype))))
 	{
 	  if (dump_enabled_p ())
 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,