From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id AC125387091D; Mon, 13 May 2024 14:28:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AC125387091D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1715610489; bh=9H+FNoq4Nk1FYkbtBPDSagyTFiZqrAsO9lZPP98loDE=; h=From:To:Subject:Date:From; b=brZEC8cNzmqrb7Owgf5ULfmSoYh2HklQhf+OE8Yk98BKqyeTsqaI+GAL4u4vGYmrq GxT2yJ1v3Udagz3lONK+hsSmKX96w4wjvyOFzkdVhUaJN9cqcvtkviCxlhGMjegy+u 72yB5REEvSo2KrIuDLdoN4eOb7X5lMLEbwIiH0po= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/rguenth/heads/vect-force-slp)] Avoid bogus SLP outer loop vectorization X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/users/rguenth/heads/vect-force-slp X-Git-Oldrev: 0faad9e4dfa5015c9535e4f2a40400914c5b4674 X-Git-Newrev: 4652b8bdf79f6ba3a86e085b7ce13d23057c57f6 Message-Id: <20240513142809.AC125387091D@sourceware.org> Date: Mon, 13 May 2024 14:28:09 +0000 (GMT) List-Id: https://gcc.gnu.org/g:4652b8bdf79f6ba3a86e085b7ce13d23057c57f6 commit 4652b8bdf79f6ba3a86e085b7ce13d23057c57f6 Author: Richard Biener Date: Wed Mar 6 15:13:05 2024 +0100 Avoid bogus SLP outer loop vectorization This fixes the check for multiple types which go wrong I think because of bogus pointer IV increments when there are multiple copies of vector stmts in the inner loop. * tree-vect-stmts.cc (vectorizable_load): Avoid outer loop SLP vectorization with multi-copy vector stmts in the inner loop. (vectorizable_store): Likewise. Diff: --- gcc/tree-vect-stmts.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 414c1fce38db..840ff8a3406a 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -8195,7 +8195,9 @@ vectorizable_store (vec_info *vinfo, gcc_assert (ncopies >= 1); /* FORNOW. This restriction should be relaxed. */ - if (loop && nested_in_vect_loop_p (loop, stmt_info) && ncopies > 1) + if (loop + && nested_in_vect_loop_p (loop, stmt_info) + && (ncopies > 1 || (slp && SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, @@ -9941,7 +9943,8 @@ vectorizable_load (vec_info *vinfo, gcc_assert (ncopies >= 1); /* FORNOW. This restriction should be relaxed. */ - if (nested_in_vect_loop && ncopies > 1) + if (nested_in_vect_loop + && (ncopies > 1 || (slp && SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,