]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/79901 (ICE in prepare_cmp_insn, at optabs.c:3904)
authorJakub Jelinek <jakub@redhat.com>
Tue, 30 May 2017 08:08:24 +0000 (10:08 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 May 2017 08:08:24 +0000 (10:08 +0200)
Backported from mainline
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.

* gcc.target/i386/pr79901.c: New test.

From-SVN: r248655

gcc/ChangeLog
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr79901.c [new file with mode: 0644]

index 6eb34c77a833c702a8681f7afb9a0bd5e35d0857..25502207240df1948a8008bfef13f21e109a11a0 100644 (file)
@@ -3,6 +3,13 @@
        Backported from mainline
        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.
index 23e07749977b1b5ab508b9b92e9249777260ffbf..1c9aa44dd15395bcd55182be4d29d7888c9e4fc9 100644 (file)
   "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")
    (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
index 78fbbe328ae8a80492a958611fde8a279bda9bf2..656f9ca647b959617ddb2f924a374f28532a2214 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2017-03-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/79901
+       * gcc.target/i386/pr79901.c: New test.
+
        2017-03-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/79807
diff --git a/gcc/testsuite/gcc.target/i386/pr79901.c b/gcc/testsuite/gcc.target/i386/pr79901.c
new file mode 100644 (file)
index 0000000..6fdcf76
--- /dev/null
@@ -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);
+}