diff --git a/.gitignore b/.gitignore index 2edcf1a..35cd7c7 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/gcc.spec b/gcc.spec index 256fe5f..b59a8f6 100644 --- a/gcc.spec +++ b/gcc.spec @@ -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 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 6.1.1-2 - update from the 6 branch - PRs ada/70759, ada/70786, ada/70900, ada/70969, c++/70540, debug/70935, diff --git a/gcc6-pr71559.patch b/gcc6-pr71559.patch new file mode 100644 index 0000000..b724cdf --- /dev/null +++ b/gcc6-pr71559.patch @@ -0,0 +1,150 @@ +2016-06-20 Jakub Jelinek + + 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" diff --git a/sources b/sources index 5c1b140..12615f1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -edc50b4c777289cd46e6837a72cbeba8 gcc-6.1.1-20160510.tar.bz2 +562bb5da131238d50fd769ee74891437 gcc-6.1.1-20160621.tar.bz2