This commit is contained in:
Jakub Jelinek 2016-06-21 10:06:24 +02:00
parent b66b3a4e1c
commit fd1cb09e79
4 changed files with 186 additions and 4 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@
/gcc-6.0.0-20160406.tar.bz2
/gcc-6.1.1-20160427.tar.bz2
/gcc-6.1.1-20160510.tar.bz2
/gcc-6.1.1-20160621.tar.bz2

View File

@ -1,9 +1,9 @@
%global DATE 20160510
%global SVNREV 236095
%global DATE 20160621
%global SVNREV 237634
%global gcc_version 6.1.1
# Note, gcc_release must be integer, if you want to add suffixes to
# %{release}, append them after %{gcc_release} on Release: line.
%global gcc_release 2
%global gcc_release 3
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
# Hardening slows the compiler way too much.
@ -206,6 +206,7 @@ Patch10: gcc6-no-add-needed.patch
Patch11: gcc6-libgo-p224.patch
Patch12: gcc6-aarch64-async-unw-tables.patch
Patch13: gcc6-libsanitize-aarch64-va42.patch
Patch14: gcc6-pr71559.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@ -772,6 +773,7 @@ package or when debugging this package.
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%patch12 -p0 -b .aarch64-async-unw-tables~
%patch13 -p0 -b .libsanitize-aarch64-va42~
%patch14 -p0 -b .pr71559~
%if 0%{?_enable_debug_packages}
mkdir dwz-wrapper
@ -3100,6 +3102,35 @@ fi
%doc rpm.doc/changelogs/libcc1/ChangeLog*
%changelog
* Tue Jun 21 2016 Jakub Jelinek <jakub@redhat.com> 6.1.1-3
- update from the 6 branch
- PRs ada/71317, ada/71358, bootstrap/71071, c++/60095, c++/69515,
c++/69872, c++/70466, c++/70498, c++/70572, c++/70584, c++/70735,
c++/70847, c++/70972, c++/71100, c++/71105, c++/71147, c++/71166,
c++/71173, c++/71184, c++/71210, c++/71227, c++/71257, c++/71306,
c++/71330, c++/71349, c++/71372, c++/71393, c++/71442, c++/71448,
c++/71516, c++/71528, c/68657, c/71171, c/71381, debug/71057,
fortran/56226, fortran/60751, fortran/66461, fortran/69603,
fortran/69659, fortran/70855, fortran/70856, fortran/71047,
fortran/71156, fortran/71204, hsa/70857, ipa/70646, ipa/70760,
libffi/65567, libgcc/70720, libgfortran/68115, libstdc++/69703,
libstdc++/70609, libstdc++/70762, libstdc++/71004, libstdc++/71005,
libstdc++/71036, libstdc++/71037, libstdc++/71038, libstdc++/71049,
libstdc++/71545, middle-end/70877, middle-end/70931, middle-end/70941,
middle-end/71002, middle-end/71279, middle-end/71371,
middle-end/71373, middle-end/71387, middle-end/71494,
middle-end/71529, middle-end/71581, sanitizer/71160, sanitizer/71498,
target/60751, target/67310, target/70809, target/70830, target/70860,
target/70915, target/70947, target/70957, target/70963, target/71056,
target/71103, target/71145, target/71161, target/71186, target/71201,
target/71379, target/71389, target/71554, tree-optimization/69067,
tree-optimization/69068, tree-optimization/70876,
tree-optimization/70884, tree-optimization/71006,
tree-optimization/71031, tree-optimization/71259,
tree-optimization/71405, tree-optimization/71505,
tree-optimization/71588
- fix AVX512F floating point vector comparison handling (PR target/71559)
* Tue May 10 2016 Jakub Jelinek <jakub@redhat.com> 6.1.1-2
- update from the 6 branch
- PRs ada/70759, ada/70786, ada/70900, ada/70969, c++/70540, debug/70935,

150
gcc6-pr71559.patch Normal file
View File

@ -0,0 +1,150 @@
2016-06-20 Jakub Jelinek <jakub@redhat.com>
PR target/71559
* config/i386/i386.c (ix86_fp_cmp_code_to_pcmp_immediate): Fix up
returned values and add UN*/LTGT/*ORDERED cases with values matching
D operand modifier on vcmp for AVX.
* gcc.target/i386/sse2-pr71559.c: New test.
* gcc.target/i386/avx-pr71559.c: New test.
* gcc.target/i386/avx512f-pr71559.c: New test.
--- gcc/config/i386/i386.c.jj 2016-06-20 10:36:29.489994876 +0200
+++ gcc/config/i386/i386.c 2016-06-20 12:07:37.311006144 +0200
@@ -23622,17 +23622,33 @@ ix86_fp_cmp_code_to_pcmp_immediate (enum
switch (code)
{
case EQ:
- return 0x08;
+ return 0x00;
case NE:
return 0x04;
case GT:
- return 0x16;
+ return 0x0e;
case LE:
- return 0x1a;
+ return 0x02;
case GE:
- return 0x15;
+ return 0x0d;
case LT:
- return 0x19;
+ return 0x01;
+ case UNLE:
+ return 0x0a;
+ case UNLT:
+ return 0x09;
+ case UNGE:
+ return 0x05;
+ case UNGT:
+ return 0x06;
+ case UNEQ:
+ return 0x18;
+ case LTGT:
+ return 0x0c;
+ case ORDERED:
+ return 0x07;
+ case UNORDERED:
+ return 0x03;
default:
gcc_unreachable ();
}
--- gcc/testsuite/gcc.target/i386/sse2-pr71559.c.jj 2016-06-20 12:10:27.621795187 +0200
+++ gcc/testsuite/gcc.target/i386/sse2-pr71559.c 2016-06-20 12:14:44.821457893 +0200
@@ -0,0 +1,73 @@
+/* PR target/71559 */
+/* { dg-do run { target sse2 } } */
+/* { dg-options "-O2 -ftree-vectorize -msse2" } */
+
+#ifndef PR71559_TEST
+#include "sse2-check.h"
+#define PR71559_TEST sse2_test
+#endif
+
+#define N 16
+float a[N] = { 5.0f, -3.0f, 1.0f, __builtin_nanf (""), 9.0f, 7.0f, -3.0f, -9.0f,
+ -3.0f, -5.0f, -9.0f, __builtin_nanf (""), 0.5f, -0.5f, 0.0f, 0.0f };
+float b[N] = { -5.0f, 3.0f, 1.0f, 7.0f, 8.0f, 8.0f, -3.0f, __builtin_nanf (""),
+ -4.0f, -4.0f, -9.0f, __builtin_nanf (""), 0.0f, 0.0f, 0.0f, __builtin_nanf ("") };
+int c[N], d[N];
+
+#define FN(name, op) \
+void \
+name (void) \
+{ \
+ int i; \
+ for (i = 0; i < N; i++) \
+ c[i] = (op || d[i] > 37) ? 5 : 32; \
+}
+FN (eq, a[i] == b[i])
+FN (ne, a[i] != b[i])
+FN (gt, a[i] > b[i])
+FN (ge, a[i] >= b[i])
+FN (lt, a[i] < b[i])
+FN (le, a[i] <= b[i])
+FN (unle, !__builtin_isgreater (a[i], b[i]))
+FN (unlt, !__builtin_isgreaterequal (a[i], b[i]))
+FN (unge, !__builtin_isless (a[i], b[i]))
+FN (ungt, !__builtin_islessequal (a[i], b[i]))
+FN (uneq, !__builtin_islessgreater (a[i], b[i]))
+FN (ordered, !__builtin_isunordered (a[i], b[i]))
+FN (unordered, __builtin_isunordered (a[i], b[i]))
+
+#define TEST(name, GT, LT, EQ, UO) \
+ name (); \
+ for (i = 0; i < N; i++) \
+ { \
+ int v; \
+ switch (i % 4) \
+ { \
+ case 0: v = GT ? 5 : 32; break; \
+ case 1: v = LT ? 5 : 32; break; \
+ case 2: v = EQ ? 5 : 32; break; \
+ case 3: v = UO ? 5 : 32; break; \
+ } \
+ if (c[i] != v) \
+ __builtin_abort (); \
+ }
+
+void
+PR71559_TEST (void)
+{
+ int i;
+ asm volatile ("" : : "g" (a), "g" (b), "g" (c), "g" (d) : "memory");
+ TEST (eq, 0, 0, 1, 0)
+ TEST (ne, 1, 1, 0, 1)
+ TEST (gt, 1, 0, 0, 0)
+ TEST (ge, 1, 0, 1, 0)
+ TEST (lt, 0, 1, 0, 0)
+ TEST (le, 0, 1, 1, 0)
+ TEST (unle, 0, 1, 1, 1)
+ TEST (unlt, 0, 1, 0, 1)
+ TEST (unge, 1, 0, 1, 1)
+ TEST (ungt, 1, 0, 0, 1)
+ TEST (uneq, 0, 0, 1, 1)
+ TEST (ordered, 1, 1, 1, 0)
+ TEST (unordered, 0, 0, 0, 1)
+}
--- gcc/testsuite/gcc.target/i386/avx-pr71559.c.jj 2016-06-20 12:10:44.028582301 +0200
+++ gcc/testsuite/gcc.target/i386/avx-pr71559.c 2016-06-20 12:14:32.627616114 +0200
@@ -0,0 +1,8 @@
+/* PR target/71559 */
+/* { dg-do run { target avx } } */
+/* { dg-options "-O2 -ftree-vectorize -mavx" } */
+
+#include "avx-check.h"
+#define PR71559_TEST avx_test
+
+#include "sse2-pr71559.c"
--- gcc/testsuite/gcc.target/i386/avx512f-pr71559.c.jj 2016-06-20 12:11:32.812949299 +0200
+++ gcc/testsuite/gcc.target/i386/avx512f-pr71559.c 2016-06-20 12:14:51.070376810 +0200
@@ -0,0 +1,8 @@
+/* PR target/71559 */
+/* { dg-do run { target avx512f } } */
+/* { dg-options "-O2 -ftree-vectorize -mavx512f" } */
+
+#include "avx512f-check.h"
+#define PR71559_TEST avx512f_test
+
+#include "sse2-pr71559.c"

View File

@ -1 +1 @@
edc50b4c777289cd46e6837a72cbeba8 gcc-6.1.1-20160510.tar.bz2
562bb5da131238d50fd769ee74891437 gcc-6.1.1-20160621.tar.bz2