aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-03-07 09:11:30 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-03-07 09:11:30 +0100
commit760f82dbb7595a30206b04445240effad725d82f (patch)
tree97a0e738406c51b6c4449ea8f71aacbe41127aac /gcc
parentcd5c0aeeae00f5e093715127fe2fb6b6cb98a260 (diff)
downloadgcc-760f82dbb7595a30206b04445240effad725d82f.zip
gcc-760f82dbb7595a30206b04445240effad725d82f.tar.gz
gcc-760f82dbb7595a30206b04445240effad725d82f.tar.bz2
re PR rtl-optimization/79901 (ICE in prepare_cmp_insn, at optabs.c:3904)
PR rtl-optimization/79901 * config/i386/sse.md (*avx512bw_<code><mode>3<mask_name>): Renamed to ... (*avx512f_<code><mode>3<mask_name>): ... this. (<code><mode>3 with maxmin code iterator): Use VI8_AVX2_AVX512F iterator instead of VI8_AVX2_AVX512BW. * gcc.target/i386/pr79901.c: New test. From-SVN: r245947
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/sse.md10
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79901.c22
4 files changed, 37 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index efeee1a..227b48a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,13 @@
2017-03-07 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/79901
+ * config/i386/sse.md (*avx512bw_<code><mode>3<mask_name>): Renamed to
+ ...
+ (*avx512f_<code><mode>3<mask_name>): ... this.
+ (<code><mode>3 with maxmin code iterator): Use VI8_AVX2_AVX512F
+ iterator instead of VI8_AVX2_AVX512BW.
+
+ PR rtl-optimization/79901
* expr.c (expand_expr_real_2): For vector MIN/MAX, if there is no
min/max expander, expand it using expand_vec_cond_expr.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index ac63235..5cca4f1d4 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -10841,7 +10841,7 @@
"TARGET_AVX512F"
"ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
-(define_insn "*avx512bw_<code><mode>3<mask_name>"
+(define_insn "*avx512f_<code><mode>3<mask_name>"
[(set (match_operand:VI48_AVX512VL 0 "register_operand" "=v")
(maxmin:VI48_AVX512VL
(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v")
@@ -10865,10 +10865,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_expand "<code><mode>3"
- [(set (match_operand:VI8_AVX2_AVX512BW 0 "register_operand")
- (maxmin:VI8_AVX2_AVX512BW
- (match_operand:VI8_AVX2_AVX512BW 1 "register_operand")
- (match_operand:VI8_AVX2_AVX512BW 2 "register_operand")))]
+ [(set (match_operand:VI8_AVX2_AVX512F 0 "register_operand")
+ (maxmin:VI8_AVX2_AVX512F
+ (match_operand:VI8_AVX2_AVX512F 1 "register_operand")
+ (match_operand:VI8_AVX2_AVX512F 2 "register_operand")))]
"TARGET_SSE4_2"
{
if (TARGET_AVX512F
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9c8b87e..b927b5a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2017-03-07 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/79901
+ * gcc.target/i386/pr79901.c: New test.
+
PR sanitizer/79897
* c-c++-common/ubsan/pr79897.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr79901.c b/gcc/testsuite/gcc.target/i386/pr79901.c
new file mode 100644
index 0000000..6fdcf76
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr79901.c
@@ -0,0 +1,22 @@
+/* PR rtl-optimization/79901 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx512f -fno-ssa-phiopt" } */
+
+unsigned int
+foo (const unsigned long long x)
+{
+ if (x < 0)
+ return 0;
+ else if ( x > ~0U)
+ return ~0U;
+ else
+ return (unsigned int) x;
+}
+
+void
+bar (unsigned x, unsigned int *y, unsigned int z)
+{
+ unsigned i;
+ for (i = 0; i < x; i++)
+ y[i] = foo (y[i] * (unsigned long long) z);
+}