This is the patch I'm going to push to the trunk. On Wed, May 12, 2021 at 3:29 PM Hongtao Liu <crazy...@gmail.com> wrote: > > ping > > On Fri, Apr 30, 2021 at 12:42 PM Hongtao Liu <crazy...@gmail.com> wrote: > > > > Hi: > > This patch is to fix ice which was introduced by my > > r11-5696-g35c4c67e6c534ef3d6ba7a7752ab7e0fbc91755b. > > Bootstrapped and regtested on x86_64-linux-gnu{-m32,}. > > Ok for trunk and backport to GCC11? > > > > 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. > > > > Add test > > --- > > gcc/config/i386/i386-expand.c | 5 +++-- > > gcc/testsuite/gcc.target/i386/pr100310.c | 12 ++++++++++++ > > 2 files changed, 15 insertions(+), 2 deletions(-) > > create mode 100644 gcc/testsuite/gcc.target/i386/pr100310.c > > > > diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c > > index 516440eb5c1..b2bb2b1e3a1 100644 > > --- a/gcc/config/i386/i386-expand.c > > +++ b/gcc/config/i386/i386-expand.c > > @@ -10862,11 +10862,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 <immintrin.h> > > + > > +double *p; > > +volatile __m512d x; > > +volatile __mmask8 m; > > + > > +void foo() > > +{ > > + x = _mm512_mask_expandloadu_pd (x, 255, p); > > +} > > -- > > 2.18.1 > > > > > > -- > > BR, > > Hongtao > > > > -- > BR, > Hongtao
-- BR, Hongtao
From 274325ebab87bd56484a6a55cfeb358dc5189263 Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao....@intel.com> Date: Wed, 28 Apr 2021 14:52:59 +0800 Subject: [PATCH 1/2] [i386] 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. Add test --- gcc/config/i386/i386-expand.c | 5 +++-- gcc/testsuite/gcc.target/i386/pr100310.c | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr100310.c 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 <immintrin.h> + +double *p; +volatile __m512d x; +volatile __mmask8 m; + +void foo() +{ + x = _mm512_mask_expandloadu_pd (x, 255, p); +} -- 2.18.1