From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2100) id D2A453857C46; Sat, 22 Aug 2020 21:33:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D2A453857C46 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1598132011; bh=0XPvms/rTlq8efT2Xz4XkhwwW/toZZdrLhRgW+RmiHI=; h=From:To:Subject:Date:From; b=AEZ4Li0DnhCNe/MHIisldXfw3ETwPSp174xpx3+QUR55zf1G/tGpuYXZxu9l8Cjdq hNB1s4pIVIVRjHaNgkab5XqXLcy3QTspUqrSoxmBlsZKSEt1theav49G7jA/hpTpvi QcB/NJFiIcv9A9y6v4BhWgihqqcrU/ddgOI0pXuI= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Giuliano Belinassi To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/autopar_devel] tree-optimization/95297 - handle scalar shift arg for SLP invariant vectype X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/devel/autopar_devel X-Git-Oldrev: 3fc16a2d5504c81ab15975b4968871cf6d168f5b X-Git-Newrev: 691d738863e56201c756488824d51c11cc9ac8f6 Message-Id: <20200822213331.D2A453857C46@sourceware.org> Date: Sat, 22 Aug 2020 21:33:31 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 22 Aug 2020 21:33:31 -0000 https://gcc.gnu.org/g:691d738863e56201c756488824d51c11cc9ac8f6 commit 691d738863e56201c756488824d51c11cc9ac8f6 Author: Richard Biener Date: Mon May 25 11:14:03 2020 +0200 tree-optimization/95297 - handle scalar shift arg for SLP invariant vectype This skips invariant vector type setting for a scalar shift argument. 2020-05-25 Richard Biener 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. * g++.dg/vect/pr95290.cc: Likewise. Diff: --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/vect/pr95290.cc | 25 +++++++++++++++++++++++++ gcc/testsuite/g++.dg/vect/pr95297.cc | 22 ++++++++++++++++++++++ gcc/tree-vect-stmts.c | 3 ++- 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8a089279e1b..38ca3ef863b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-05-25 Richard Biener + + PR tree-optimization/95297 + * tree-vect-stmts.c (vectorizable_shift): For scalar_shift_arg + skip updating operand 1 vector type. + 2020-05-25 Richard Biener PR tree-optimization/95284 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index db94bd05bc3..2ac873c4291 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-05-25 Richard Biener + + PR tree-optimization/95297 + * g++.dg/vect/pr95297.cc: New testcase. + * g++.dg/vect/pr95290.cc: Likewise. + 2020-05-25 Richard Biener PR tree-optimization/95284 diff --git a/gcc/testsuite/g++.dg/vect/pr95290.cc b/gcc/testsuite/g++.dg/vect/pr95290.cc new file mode 100644 index 00000000000..150bbf72103 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr95290.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +typedef short a; +enum b {}; +typedef struct { + a c; +} d; +typedef struct { + a e, f; +} g; +typedef struct { + g h; +} i; +typedef struct { + d j; + int k; +} l; +class m +{ + i imgdata; + void n(); + l o; +}; +void m::n() try { imgdata.h.e = imgdata.h.f = o.j.c >> o.j.c; } catch (b) { +} 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 e7822c44951..c3254926e22 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5774,7 +5774,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,