From b26fed3a7ac8694fc6534b346e06376563c2bc9c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 30 May 2017 09:39:37 +0200 Subject: [PATCH] backport: re PR target/78227 (ICE: unrecognizable insn: in extract_insn, at recog.c:2311 with -mavx512bw and vector comare) Backported from mainline 2016-11-07 Jakub Jelinek PR target/78227 * config/i386/i386.c (ix86_expand_sse_cmp): Force dest into cmp_mode argument even for -O0 if cmp_mode != mode and maskcmp. * gcc.target/i386/pr78227-1.c: New test. * gcc.target/i386/pr78227-2.c: New test. From-SVN: r248622 --- gcc/ChangeLog | 6 +++++ gcc/config/i386/i386.c | 1 + gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/gcc.target/i386/pr78227-1.c | 30 +++++++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr78227-2.c | 30 +++++++++++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr78227-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr78227-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2642468ce02..7772c3d7749a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-11-07 Jakub Jelinek + + PR target/78227 + * config/i386/i386.c (ix86_expand_sse_cmp): Force dest into + cmp_mode argument even for -O0 if cmp_mode != mode and maskcmp. + 2016-10-29 Jakub Jelinek PR rtl-optimization/77919 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 03465c1bd798..79fb328b6d8c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -21535,6 +21535,7 @@ ix86_expand_sse_cmp (rtx dest, enum rtx_code code, rtx cmp_op0, rtx cmp_op1, cmp_op1 = force_reg (cmp_ops_mode, cmp_op1); if (optimize + || (maskcmp && cmp_mode != mode) || reg_overlap_mentioned_p (dest, op_true) || reg_overlap_mentioned_p (dest, op_false)) dest = gen_reg_rtx (maskcmp ? cmp_mode : mode); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9dd5bc29cd09..74f7bfdf55d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-11-07 Jakub Jelinek + + PR target/78227 + * gcc.target/i386/pr78227-1.c: New test. + * gcc.target/i386/pr78227-2.c: New test. + 2016-10-31 Jakub Jelinek PR c++/78089 diff --git a/gcc/testsuite/gcc.target/i386/pr78227-1.c b/gcc/testsuite/gcc.target/i386/pr78227-1.c new file mode 100644 index 000000000000..9dc97dd738f4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78227-1.c @@ -0,0 +1,30 @@ +/* PR target/78227 */ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -O0 -Wno-psabi" } */ + +typedef int V __attribute__((vector_size (64))); +typedef long long int W __attribute__((vector_size (64))); + +V +foo1 (V v) +{ + return v > 0; +} + +V +bar1 (V v) +{ + return v != 0; +} + +W +foo2 (W w) +{ + return w > 0; +} + +W +bar2 (W w) +{ + return w != 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr78227-2.c b/gcc/testsuite/gcc.target/i386/pr78227-2.c new file mode 100644 index 000000000000..c557c8f12b44 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78227-2.c @@ -0,0 +1,30 @@ +/* PR target/78227 */ +/* { dg-do compile } */ +/* { dg-options "-mavx512bw -O0 -Wno-psabi" } */ + +typedef signed char V __attribute__((vector_size (64))); +typedef short int W __attribute__((vector_size (64))); + +V +foo1 (V v) +{ + return v > 0; +} + +V +bar1 (V v) +{ + return v != 0; +} + +W +foo2 (W w) +{ + return w > 0; +} + +W +bar2 (W w) +{ + return w != 0; +} -- 2.47.2