From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2078) id 318563857824; Tue, 22 Jun 2021 01:35:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 318563857824 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: hongtao Liu To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-1705] Fix ICE for vpexpand*. X-Act-Checkin: gcc X-Git-Author: liuhongt X-Git-Refname: refs/heads/master X-Git-Oldrev: 2f080224cfa9de0e215324c6ac242d6ee3f27172 X-Git-Newrev: b6efffa552cee6a20a58c91e5f41466c5715d73d Message-Id: <20210622013536.318563857824@sourceware.org> Date: Tue, 22 Jun 2021 01:35:36 +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: Tue, 22 Jun 2021 01:35:36 -0000 https://gcc.gnu.org/g:b6efffa552cee6a20a58c91e5f41466c5715d73d commit r12-1705-gb6efffa552cee6a20a58c91e5f41466c5715d73d Author: liuhongt Date: Wed Apr 28 14:52:59 2021 +0800 Fix ICE for vpexpand*. gcc/ChangeLog PR target/100310 * config/i386/i386-expand.c (ix86_expand_special_args_builtin): Keep constm1_operand only if it satisfies insn's operand predicate. gcc/testsuite/ChangeLog PR target/100310 * gcc.target/i386/pr100310.c: New test. Diff: --- gcc/config/i386/i386-expand.c | 5 +++-- gcc/testsuite/gcc.target/i386/pr100310.c | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c index 8f4e4e4d884..cc2eaeed8df 100644 --- a/gcc/config/i386/i386-expand.c +++ b/gcc/config/i386/i386-expand.c @@ -10969,11 +10969,12 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, op = fixup_modeless_constant (op, mode); - /* NB: 3-operands load implied it's a mask load, + /* NB: 3-operands load implied it's a mask load or v{p}expand*, and that mask operand shoud be at the end. Keep all-ones mask which would be simplified by the expander. */ if (nargs == 3 && i == 2 && klass == load - && constm1_operand (op, mode)) + && constm1_operand (op, mode) + && insn_p->operand[i].predicate (op, mode)) ; else if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode) op = copy_to_mode_reg (mode, op); diff --git a/gcc/testsuite/gcc.target/i386/pr100310.c b/gcc/testsuite/gcc.target/i386/pr100310.c new file mode 100644 index 00000000000..54ace18531b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr100310.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -O2" } */ +#include + +double *p; +volatile __m512d x; +volatile __mmask8 m; + +void foo() +{ + x = _mm512_mask_expandloadu_pd (x, 255, p); +}