[PATCH][AVX512] Fix ICE for vpexpand*.

Hongtao Liu crazylht@gmail.com
Fri Apr 30 04:42:05 GMT 2021


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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-i386-Fix-ICE-for-vpexpand.patch
Type: text/x-patch
Size: 2006 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210430/896c1fa8/attachment.bin>


More information about the Gcc-patches mailing list