Compare commits
1 Commits
imports/c8
...
c8-beta
Author | SHA1 | Date | |
---|---|---|---|
|
d199cee511 |
@ -1,5 +1,5 @@
|
|||||||
7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz
|
7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz
|
||||||
8bb88a8a2cc72b6e4563e0e5e19f53ff09d72ee1 SOURCES/gcc-11.2.1-20210728.tar.xz
|
54f8e112180f2cad6cf9459aab4681c7f157aca9 SOURCES/gcc-11.2.1-20220127.tar.xz
|
||||||
db38c7b67f8eea9f2e5b8a48d219165b2fdab11f SOURCES/gmp-6.1.0.tar.bz2
|
db38c7b67f8eea9f2e5b8a48d219165b2fdab11f SOURCES/gmp-6.1.0.tar.bz2
|
||||||
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
||||||
b8be66396c726fdc36ebb0f692ed8a8cca3bcc66 SOURCES/mpc-1.0.3.tar.gz
|
b8be66396c726fdc36ebb0f692ed8a8cca3bcc66 SOURCES/mpc-1.0.3.tar.gz
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,5 @@
|
|||||||
SOURCES/doxygen-1.8.0.src.tar.gz
|
SOURCES/doxygen-1.8.0.src.tar.gz
|
||||||
SOURCES/gcc-11.2.1-20210728.tar.xz
|
SOURCES/gcc-11.2.1-20220127.tar.xz
|
||||||
SOURCES/gmp-6.1.0.tar.bz2
|
SOURCES/gmp-6.1.0.tar.bz2
|
||||||
SOURCES/isl-0.18.tar.bz2
|
SOURCES/isl-0.18.tar.bz2
|
||||||
SOURCES/mpc-1.0.3.tar.gz
|
SOURCES/mpc-1.0.3.tar.gz
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
From 8a7f364afd86a4c4c2c747ae9cb4216fe992acc8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 25 Aug 2021 12:36:42 -0400
|
||||||
|
Subject: [PATCH 01/17] basic_string::reserve(n) semantics are not available in
|
||||||
|
DTS
|
||||||
|
|
||||||
|
Various tests were added upstream 2020-08-06 as part of:
|
||||||
|
"libstdc++: Implement P0966 std::string::reserve should not shrink"
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=140cf935cd118f7208b7c3826a8b9d50936242f0
|
||||||
|
|
||||||
|
std::string and std::wstring are instantiated in the system libstdc++.so
|
||||||
|
via explicit instantiation definitions, so the new basic_string::reserve(n)
|
||||||
|
semantics are not available in DTS.
|
||||||
|
|
||||||
|
Update/disable the pertinent parts of the tests to reflect the behavior
|
||||||
|
when run against the system libstdc++.so.
|
||||||
|
---
|
||||||
|
.../testsuite/21_strings/basic_string/capacity/char/1.cc | 6 ------
|
||||||
|
.../21_strings/basic_string/capacity/char/18654.cc | 2 +-
|
||||||
|
.../testsuite/21_strings/basic_string/capacity/wchar_t/1.cc | 6 ------
|
||||||
|
.../21_strings/basic_string/capacity/wchar_t/18654.cc | 2 +-
|
||||||
|
4 files changed, 2 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
|
||||||
|
index eea69771f..64187718d 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
|
||||||
|
@@ -41,12 +41,6 @@ void test01()
|
||||||
|
sz01 = str01.capacity();
|
||||||
|
VERIFY( sz01 < sz02 );
|
||||||
|
|
||||||
|
- // P0966: reserve should not shrink
|
||||||
|
- str01.reserve(100);
|
||||||
|
- sz01 = str01.capacity();
|
||||||
|
- str01.reserve(sz01 - 1);
|
||||||
|
- VERIFY( str01.capacity() == sz01 );
|
||||||
|
-
|
||||||
|
sz01 = str01.size() + 5;
|
||||||
|
str01.resize(sz01);
|
||||||
|
sz02 = str01.size();
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
|
||||||
|
index 02ce78ea6..3a7352123 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
|
||||||
|
@@ -51,7 +51,7 @@ void test01()
|
||||||
|
VERIFY( cap >= 3 * i );
|
||||||
|
|
||||||
|
str.reserve(2 * i);
|
||||||
|
- VERIFY( str.capacity() == cap );
|
||||||
|
+ VERIFY( str.capacity() == 2 * i );
|
||||||
|
|
||||||
|
#if __cplusplus <= 201703L
|
||||||
|
str.reserve();
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
|
||||||
|
index f01a27e8c..70915a94d 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
|
||||||
|
@@ -41,12 +41,6 @@ void test01()
|
||||||
|
sz01 = str01.capacity();
|
||||||
|
VERIFY( sz01 < sz02 );
|
||||||
|
|
||||||
|
- // P0966: reserve should not shrink
|
||||||
|
- str01.reserve(100);
|
||||||
|
- sz01 = str01.capacity();
|
||||||
|
- str01.reserve(sz01 - 1);
|
||||||
|
- VERIFY( str01.capacity() == sz01 );
|
||||||
|
-
|
||||||
|
sz01 = str01.size() + 5;
|
||||||
|
str01.resize(sz01);
|
||||||
|
sz02 = str01.size();
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
|
||||||
|
index 267fd198b..c9711a294 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
|
||||||
|
@@ -51,7 +51,7 @@ void test01()
|
||||||
|
VERIFY( cap >= 3 * i );
|
||||||
|
|
||||||
|
str.reserve(2 * i);
|
||||||
|
- VERIFY( str.capacity() == cap );
|
||||||
|
+ VERIFY( str.capacity() == 2 * i );
|
||||||
|
|
||||||
|
#if __cplusplus <= 201703L
|
||||||
|
str.reserve();
|
||||||
|
--
|
||||||
|
2.31.1
|
@ -0,0 +1,46 @@
|
|||||||
|
From d7fae9f17479c44dae68483d457fc3fbb58c4b83 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 25 Aug 2021 15:57:36 -0400
|
||||||
|
Subject: [PATCH 04/17] operator>>(istream&, char(&)[N]) eofbit fixes are not
|
||||||
|
available in DTS
|
||||||
|
|
||||||
|
The upstream commit on 2020-08--6:
|
||||||
|
Do not set eofbit eagerly in operator>>(istream&, char(&)[N])
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4e39f563c0cd25401f689c2093cb8c13692156ef
|
||||||
|
altered the behaviour of std::istream symbols defined in libstdc++.so,
|
||||||
|
but with DTS you get the old definitions from the system libstdc++.so
|
||||||
|
|
||||||
|
Hence this patch tweaks the new tests to avoid failing when run against
|
||||||
|
the system libstdc++.so
|
||||||
|
---
|
||||||
|
.../21_strings/basic_string/inserters_extractors/char/13.cc | 1 -
|
||||||
|
.../21_strings/basic_string/inserters_extractors/wchar_t/13.cc | 1 -
|
||||||
|
2 files changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc
|
||||||
|
index a25d8a93d..7d85e6ead 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc
|
||||||
|
@@ -29,7 +29,6 @@ test01()
|
||||||
|
std::string buf;
|
||||||
|
in.width(4);
|
||||||
|
in >> buf;
|
||||||
|
- VERIFY( !in.eof() ); // should stop after reading 4 chars
|
||||||
|
VERIFY( buf == str );
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc
|
||||||
|
index f15294a44..fa5fe3d4a 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc
|
||||||
|
@@ -29,7 +29,6 @@ test01()
|
||||||
|
std::wstring buf;
|
||||||
|
in.width(4);
|
||||||
|
in >> buf;
|
||||||
|
- VERIFY( !in.eof() ); // should stop after reading 4 chars
|
||||||
|
VERIFY( buf == str );
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,53 @@
|
|||||||
|
From 3ede89bd19328c26bcd881b873cf4a766ae0da3a Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 25 Aug 2021 17:04:02 -0400
|
||||||
|
Subject: [PATCH 05/17] Disable tests for PR libstdc++/79820 and PR
|
||||||
|
libstdc++/81751 under DTS
|
||||||
|
|
||||||
|
Upstream commit 2017-08-09
|
||||||
|
PR libstdc++/81751 don't call fflush(NULL)
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=04d07b61cb80fd97e98eb39451ff6a8675a63d90
|
||||||
|
added these test cases as part of verifying the behavior of sys_open (that
|
||||||
|
it resets errno and doesn't call fflush on NULL).
|
||||||
|
|
||||||
|
These symbols are in the system stdlib when run from DTS and thus aren't
|
||||||
|
fixed by the above change:
|
||||||
|
|
||||||
|
1521: 000000000007c430 104 FUNC GLOBAL DEFAULT 12 std::__basic_file<char>::sys_open(int, std::_Ios_Openmode)@@GLIBCXX_3.4
|
||||||
|
2895: 000000000007c730 95 FUNC GLOBAL DEFAULT 12 std::__basic_file<char>::sys_open(_IO_FILE*, std::_Ios_Openmode)@@GLIBCXX_3.4
|
||||||
|
|
||||||
|
This patch disables the non-fixed assertions.
|
||||||
|
---
|
||||||
|
libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc | 2 --
|
||||||
|
libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc | 1 -
|
||||||
|
2 files changed, 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
|
||||||
|
index 278b99169..e2a8e3b3d 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
|
||||||
|
@@ -26,9 +26,7 @@ void
|
||||||
|
test01()
|
||||||
|
{
|
||||||
|
FILE* f = std::fopen("79820.txt", "w");
|
||||||
|
- errno = 127;
|
||||||
|
__gnu_cxx::stdio_filebuf<char> b(f, std::ios::out, BUFSIZ);
|
||||||
|
- VERIFY(errno == 127); // PR libstdc++/79820
|
||||||
|
b.close();
|
||||||
|
std::fclose(f);
|
||||||
|
}
|
||||||
|
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
|
||||||
|
index 21aa06f78..6a231d7cf 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
|
||||||
|
@@ -31,7 +31,6 @@ test01()
|
||||||
|
FILE* in1 = std::fopen("81751.txt", "r");
|
||||||
|
__gnu_cxx::stdio_filebuf<char> buf1(in1, std::ios::in, BUFSIZ);
|
||||||
|
int c = buf1.sgetc();
|
||||||
|
- VERIFY( c == std::char_traits<char>::eof() ); // PR libstdc++/81751
|
||||||
|
|
||||||
|
std::fflush(out);
|
||||||
|
FILE* in2 = std::fopen("81751.txt", "r");
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,118 @@
|
|||||||
|
From 59388ee3dac5c737086ed1f83f552a44481a2213 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Tue, 31 Aug 2021 16:08:57 -0400
|
||||||
|
Subject: [PATCH 06/17] Don't assume has_facet<codecvt_c16> when run against
|
||||||
|
system libstdc++
|
||||||
|
|
||||||
|
Upstream commit 2019-02-19:
|
||||||
|
P0482R5 char8_t: Standard library support
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=c124af936b6b225eb548ccdd7f01400511d784dc
|
||||||
|
added new locale facets for char8_t.
|
||||||
|
|
||||||
|
has_facet<codecvt_c16> returns false, as it is using the std::locale the system libstdc++:
|
||||||
|
|
||||||
|
$ eu-readelf -s char16_t-char8_t.exe |c++filt |grep UNDEF|grep locale
|
||||||
|
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::classic()@GLIBCXX_3.4 (2)
|
||||||
|
8: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::locale(std::locale const&)@GLIBCXX_3.4 (2)
|
||||||
|
13: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::id::_M_id() const@GLIBCXX_3.4 (2)
|
||||||
|
22: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::~locale()@GLIBCXX_3.4 (2)
|
||||||
|
64: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::classic()@@GLIBCXX_3.4
|
||||||
|
76: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::locale(std::locale const&)@@GLIBCXX_3.4
|
||||||
|
89: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::id::_M_id() const@@GLIBCXX_3.4
|
||||||
|
108: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::~locale()@@GLIBCXX_3.4
|
||||||
|
|
||||||
|
Hence this patch tweaks tests so that they bail out if run against an older std::locale.
|
||||||
|
---
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc | 3 ++-
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc | 3 ++-
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc | 3 ++-
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc | 3 ++-
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc | 2 ++
|
||||||
|
libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc | 2 ++
|
||||||
|
6 files changed, 12 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc
|
||||||
|
index 71a23bef4..d4aa519a2 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc
|
||||||
|
@@ -31,7 +31,8 @@ test01()
|
||||||
|
using namespace std;
|
||||||
|
typedef codecvt<char16_t, char8_t, mbstate_t> codecvt_c16;
|
||||||
|
locale loc_c = locale::classic();
|
||||||
|
- VERIFY(has_facet<codecvt_c16>(loc_c));
|
||||||
|
+ if (!has_facet<codecvt_c16>(loc_c))
|
||||||
|
+ return;
|
||||||
|
const codecvt_c16* const cvt = &use_facet<codecvt_c16>(loc_c);
|
||||||
|
|
||||||
|
VERIFY(!cvt->always_noconv());
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
|
||||||
|
index 7b5ce126d..05c77b2b1 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
|
||||||
|
@@ -29,7 +29,8 @@ test01()
|
||||||
|
using namespace std;
|
||||||
|
typedef codecvt<char16_t, char, mbstate_t> codecvt_c16;
|
||||||
|
locale loc_c = locale::classic();
|
||||||
|
- VERIFY(has_facet<codecvt_c16>(loc_c));
|
||||||
|
+ if (!has_facet<codecvt_c16>(loc_c))
|
||||||
|
+ return;
|
||||||
|
const codecvt_c16* const cvt = &use_facet<codecvt_c16>(loc_c);
|
||||||
|
|
||||||
|
VERIFY(!cvt->always_noconv());
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
|
||||||
|
index f30ae22e9..281969e9b 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
|
||||||
|
@@ -33,7 +33,8 @@ test01()
|
||||||
|
using namespace std;
|
||||||
|
typedef codecvt<char32_t, char8_t, mbstate_t> codecvt_c32;
|
||||||
|
locale loc_c = locale::classic();
|
||||||
|
- VERIFY(has_facet<codecvt_c32>(loc_c));
|
||||||
|
+ if (!has_facet<codecvt_c32>(loc_c))
|
||||||
|
+ return;
|
||||||
|
const codecvt_c32* const cvt = &use_facet<codecvt_c32>(loc_c);
|
||||||
|
|
||||||
|
VERIFY(!cvt->always_noconv());
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
|
||||||
|
index 558ba9145..82980b702 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
|
||||||
|
@@ -31,7 +31,8 @@ test01()
|
||||||
|
using namespace std;
|
||||||
|
typedef codecvt<char32_t, char, mbstate_t> codecvt_c32;
|
||||||
|
locale loc_c = locale::classic();
|
||||||
|
- VERIFY(has_facet<codecvt_c32>(loc_c));
|
||||||
|
+ if (!has_facet<codecvt_c32>(loc_c))
|
||||||
|
+ return;
|
||||||
|
const codecvt_c32* const cvt = &use_facet<codecvt_c32>(loc_c);
|
||||||
|
|
||||||
|
VERIFY(!cvt->always_noconv());
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc
|
||||||
|
index 5eab05ba2..d6f663ce6 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc
|
||||||
|
@@ -34,6 +34,8 @@ void test(const C* from)
|
||||||
|
std::mbstate_t state{};
|
||||||
|
char8_t buf[16] = { };
|
||||||
|
using test_type = std::codecvt<C, char8_t, std::mbstate_t>;
|
||||||
|
+ if (!std::has_facet<test_type>(std::locale::classic()))
|
||||||
|
+ return;
|
||||||
|
const test_type& cvt = std::use_facet<test_type>(std::locale::classic());
|
||||||
|
auto from_end = from + len;
|
||||||
|
auto from_next = from;
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc b/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc
|
||||||
|
index b1b3cff31..167bc0ca3 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc
|
||||||
|
@@ -32,6 +32,8 @@ void test(const C* from)
|
||||||
|
std::mbstate_t state{};
|
||||||
|
char buf[16] = { };
|
||||||
|
using test_type = std::codecvt<C, char, std::mbstate_t>;
|
||||||
|
+ if (!std::has_facet<test_type>(std::locale::classic()))
|
||||||
|
+ return;
|
||||||
|
const test_type& cvt = std::use_facet<test_type>(std::locale::classic());
|
||||||
|
auto from_end = from + len;
|
||||||
|
auto from_next = from;
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
42
SOURCES/0008-testsuite-build-plugins-with-std-c-11.patch
Normal file
42
SOURCES/0008-testsuite-build-plugins-with-std-c-11.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From 16694079a3f415f5e5683b0afe6978810ac259b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Tue, 31 Aug 2021 17:01:05 -0400
|
||||||
|
Subject: [PATCH 08/17] testsuite: build plugins with -std=c++11
|
||||||
|
|
||||||
|
Various testsuite plugins fail when built within DTS with e.g.:
|
||||||
|
cc1: error: cannot load plugin ./diagnostic_plugin_test_paths.so: /builddir/build/BUILD/gcc-11.1.1-20210623/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./diagnostic_plugin_test_paths.so)
|
||||||
|
|
||||||
|
These turn out to C++14's sized deletion
|
||||||
|
(see https://en.cppreference.com/w/cpp/memory/new/operator_delete):
|
||||||
|
|
||||||
|
14: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF _ZdlPvm@CXXABI_1.3.9 (4)
|
||||||
|
48: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF _ZdlPvm@CXXABI_1.3.9
|
||||||
|
14: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF operator delete(void*, unsigned long)@CXXABI_1.3.9 (4)
|
||||||
|
48: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF operator delete(void*, unsigned long)@CXXABI_1.3.9
|
||||||
|
|
||||||
|
Looks like plugin.exp is building the test plugins against the
|
||||||
|
freshly-built libstdc++, and then trying to dynamically load them
|
||||||
|
against the system libstdc++.
|
||||||
|
|
||||||
|
This patch forces the use of -std=c++11 when building these test plugins,
|
||||||
|
to sidestep the problem.
|
||||||
|
---
|
||||||
|
gcc/testsuite/lib/plugin-support.exp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/gcc/testsuite/lib/plugin-support.exp b/gcc/testsuite/lib/plugin-support.exp
|
||||||
|
index 6d651901e..9943dbb37 100644
|
||||||
|
--- a/gcc/testsuite/lib/plugin-support.exp
|
||||||
|
+++ b/gcc/testsuite/lib/plugin-support.exp
|
||||||
|
@@ -103,7 +103,7 @@ proc plugin-test-execute { plugin_src plugin_tests } {
|
||||||
|
}
|
||||||
|
set optstr [concat $optstr "-DIN_GCC -fPIC -shared -fno-rtti -undefined dynamic_lookup"]
|
||||||
|
} else {
|
||||||
|
- set plug_cflags $PLUGINCFLAGS
|
||||||
|
+ set plug_cflags "$PLUGINCFLAGS -std=c++11"
|
||||||
|
set optstr "$includes $extra_flags -DIN_GCC -fPIC -shared -fno-rtti"
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 87e2a4f28b444f376ebe15f38e2743eb952ff355 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 1 Sep 2021 11:02:53 -0400
|
||||||
|
Subject: [PATCH 09/17] Fix 22_locale/locale/cons/unicode.cc when run under DTS
|
||||||
|
|
||||||
|
Various has_facet calls return false in DTS, as DTS is using the
|
||||||
|
std::locale from the system libstdc++.
|
||||||
|
|
||||||
|
Hence this patch tweaks tests to remove the VERIFY from the result of
|
||||||
|
the call, so that they do not fail if run against an older
|
||||||
|
std::locale.
|
||||||
|
|
||||||
|
These VERIFY tests were added upstream 2015-01-16 in
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=bb93f35da1612940266f5d159b6cc5a3e54fca14
|
||||||
|
---
|
||||||
|
libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
|
||||||
|
index 15c621099..328145094 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
|
||||||
|
@@ -70,8 +70,8 @@ void test01()
|
||||||
|
VERIFY( has_facet<w_codecvt>(loc13) );
|
||||||
|
#endif
|
||||||
|
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
|
||||||
|
- VERIFY( has_facet<u16_codecvt>(loc13) );
|
||||||
|
- VERIFY( has_facet<u32_codecvt>(loc13) );
|
||||||
|
+ (void)( has_facet<u16_codecvt>(loc13) );
|
||||||
|
+ (void)( has_facet<u32_codecvt>(loc13) );
|
||||||
|
#ifdef _GLIBCXX_USE_CHAR8_T
|
||||||
|
VERIFY( has_facet<u16u8_codecvt>(loc13) );
|
||||||
|
VERIFY( has_facet<u32u8_codecvt>(loc13) );
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From d1555ffdd9b4fa6f3ceaa166bbfee0b3b9973ecf Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 1 Sep 2021 11:24:34 -0400
|
||||||
|
Subject: [PATCH 10/17] Don't verify exception handling in basic_filebuf::close
|
||||||
|
in DTS [PR81256]
|
||||||
|
|
||||||
|
27_io/basic_filebuf/close/81256.cc was added upstream 2018-05-14 in
|
||||||
|
PR libstdc++/81256 fix exception handling in basic_filebuf::close
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e77497ab777d3dfa19224648d658220807ab7419
|
||||||
|
|
||||||
|
When run under DTS,
|
||||||
|
std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::close
|
||||||
|
comes from the system libstdc++, and hence the test fails.
|
||||||
|
---
|
||||||
|
libstdc++-v3/testsuite/27_io/basic_filebuf/close/81256.cc | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc
|
||||||
|
@@ -80,7 +80,6 @@ test01()
|
||||||
|
caught = true;
|
||||||
|
}
|
||||||
|
VERIFY( conv.exceptions_thrown == 1 );
|
||||||
|
- VERIFY( caught );
|
||||||
|
}
|
||||||
|
VERIFY( conv.exceptions_thrown == 1 );
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,117 @@
|
|||||||
|
From b6989e3a4acda2d75612f3f3847dbea4245ff536 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Wed, 1 Sep 2021 15:39:45 -0400
|
||||||
|
Subject: [PATCH 11/17] Add dts.exp and use it to fix
|
||||||
|
22_locale/messages/13631.cc
|
||||||
|
|
||||||
|
This test was added upstream 2014-12-03:
|
||||||
|
"re PR libstdc++/13631 (Problems in messages)"
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=d31008d7a0d53b431f176aad8dda5498de823122
|
||||||
|
|
||||||
|
as part of a fix that is present in the system libstdc++.so in
|
||||||
|
GCC 5 onwards.
|
||||||
|
|
||||||
|
When run in DTS against such a system library, this test will fail.
|
||||||
|
This patch introduces a dts.exp which detects the version of the
|
||||||
|
underlying system libstdc++.so and exposes it to tests via
|
||||||
|
-D__CXXSTDLIB_SO_VERSION__=, so that we can ifdef specific tests
|
||||||
|
away, conditionally on the base GCC.
|
||||||
|
---
|
||||||
|
.../testsuite/22_locale/messages/13631.cc | 7 +++++
|
||||||
|
libstdc++-v3/testsuite/lib/dts.exp | 31 +++++++++++++++++++
|
||||||
|
libstdc++-v3/testsuite/lib/libstdc++.exp | 6 ++++
|
||||||
|
3 files changed, 44 insertions(+)
|
||||||
|
create mode 100644 libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/messages/13631.cc b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
index b8ae3d4f1..5b20df382 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
@@ -50,7 +50,10 @@ void test01()
|
||||||
|
msgs_facet.close(fake_msgs);
|
||||||
|
msgs_facet.close(msgs);
|
||||||
|
|
||||||
|
+ // Fixed upstream in GCC 5
|
||||||
|
+#if __CXXSTDLIB_SO_VERSION__ >= 501000
|
||||||
|
VERIFY( translation1 == translation2 );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void test02()
|
||||||
|
@@ -72,8 +75,12 @@ void test02()
|
||||||
|
std::wstring translation1 = msgs_facet.get(msgs, 0, 0, msgid);
|
||||||
|
|
||||||
|
// Without a real translation this test doesn't mean anything:
|
||||||
|
+
|
||||||
|
+ // Fixed upstream in GCC 5
|
||||||
|
+#if __CXXSTDLIB_SO_VERSION__ >= 501000
|
||||||
|
VERIFY( !translation1.empty() );
|
||||||
|
VERIFY( translation1 != msgid );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
// Opening another catalog was enough to show the problem, even a fake
|
||||||
|
// catalog.
|
||||||
|
diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..76ece66d3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+# For DTS testing, generate a number expressing the
|
||||||
|
+# system version of libstdc++.so
|
||||||
|
+#
|
||||||
|
+# Generate a version number equivalent to
|
||||||
|
+# #define GCC_VERSION (__GNUC__ * 10000 \
|
||||||
|
+# + __GNUC_MINOR__ * 100 \
|
||||||
|
+# + __GNUC_PATCHLEVEL__)
|
||||||
|
+#
|
||||||
|
+# For example, given an underlying version of gcc 4.8.5
|
||||||
|
+# this function will return 408050.
|
||||||
|
+
|
||||||
|
+proc get_dts_base_version { } {
|
||||||
|
+
|
||||||
|
+ # Invoke gcc in the PATH to get at the underlying GCC version
|
||||||
|
+ # in dotted form (e.g. "4.8.5").
|
||||||
|
+ set dotted_version [exec gcc -dumpversion]
|
||||||
|
+ verbose "dotted_version: '$dotted_version'" 2
|
||||||
|
+
|
||||||
|
+ # Extract major, minor, patchlevel
|
||||||
|
+ regexp {([0-9]+)\.([0-9]+)\.([0-9]+)} \
|
||||||
|
+ $dotted_version \
|
||||||
|
+ _ major minor patchlevel
|
||||||
|
+ verbose "major: '$major'" 2
|
||||||
|
+ verbose "minor: '$minor'" 2
|
||||||
|
+ verbose "patchlevel: '$patchlevel'" 2
|
||||||
|
+
|
||||||
|
+ set base_gcc_version [expr (($major * 10000) + ($minor * 100) + $patchlevel)]
|
||||||
|
+ verbose "base_gcc_version: '$base_gcc_version'" 2
|
||||||
|
+
|
||||||
|
+ return $base_gcc_version
|
||||||
|
+}
|
||||||
|
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
index 7f9580db8..5e4b32f76 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
@@ -58,6 +58,7 @@ load_gcc_lib timeout.exp
|
||||||
|
load_gcc_lib timeout-dg.exp
|
||||||
|
load_gcc_lib wrapper.exp
|
||||||
|
load_gcc_lib target-utils.exp
|
||||||
|
+load_lib dts.exp
|
||||||
|
|
||||||
|
# Useful for debugging. Pass the name of a variable and the verbosity
|
||||||
|
# threshold (number of -v's on the command line).
|
||||||
|
@@ -323,6 +324,11 @@ proc libstdc++_init { testfile } {
|
||||||
|
set ccflags "$cxxflags -DLOCALEDIR=\".\""
|
||||||
|
set cxxflags "$cxxflags -DLOCALEDIR=\".\""
|
||||||
|
|
||||||
|
+ # For DTS testing, expose the system version of libstdc++.so as
|
||||||
|
+ # a preprocessor define.
|
||||||
|
+ set base_gcc_version [get_dts_base_version]
|
||||||
|
+ set cxxflags "$cxxflags -D__CXXSTDLIB_SO_VERSION__=$base_gcc_version"
|
||||||
|
+
|
||||||
|
# If a PCH file is available, use it. We must delay performing
|
||||||
|
# this check until $cxx and such have been initialized because we
|
||||||
|
# perform a test compilation. (Ideally, gcc --print-file-name would
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
28
SOURCES/0012-dts.exp-use-usr-bin-gcc.patch
Normal file
28
SOURCES/0012-dts.exp-use-usr-bin-gcc.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From c3910bb945aba02e0c06dec041da9f1f148b0df1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 11:40:42 -0400
|
||||||
|
Subject: [PATCH 12/17] dts.exp: use /usr/bin/gcc
|
||||||
|
|
||||||
|
---
|
||||||
|
libstdc++-v3/testsuite/lib/dts.exp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
index 76ece66d3..dc5cf3e95 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
+++ b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
@@ -11,9 +11,9 @@
|
||||||
|
|
||||||
|
proc get_dts_base_version { } {
|
||||||
|
|
||||||
|
- # Invoke gcc in the PATH to get at the underlying GCC version
|
||||||
|
+ # Invoke /usr/bin/gcc to get at the underlying GCC version
|
||||||
|
# in dotted form (e.g. "4.8.5").
|
||||||
|
- set dotted_version [exec gcc -dumpversion]
|
||||||
|
+ set dotted_version [exec /usr/bin/gcc -dumpversion]
|
||||||
|
verbose "dotted_version: '$dotted_version'" 2
|
||||||
|
|
||||||
|
# Extract major, minor, patchlevel
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,86 @@
|
|||||||
|
From c922a56d4461c9e4ca2af07ecccb3626b99a35ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 11:44:37 -0400
|
||||||
|
Subject: [PATCH 13/17] Rename __CXXSTDLIB_SO_VERSION__ to
|
||||||
|
__LIBSTDCXX_SO_VERSION and only use major version
|
||||||
|
|
||||||
|
---
|
||||||
|
.../testsuite/22_locale/messages/13631.cc | 4 ++--
|
||||||
|
libstdc++-v3/testsuite/lib/dts.exp | 18 +++++-------------
|
||||||
|
libstdc++-v3/testsuite/lib/libstdc++.exp | 4 ++--
|
||||||
|
3 files changed, 9 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/22_locale/messages/13631.cc b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
index 5b20df382..f4c5eb7a2 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
|
||||||
|
@@ -51,7 +51,7 @@ void test01()
|
||||||
|
msgs_facet.close(msgs);
|
||||||
|
|
||||||
|
// Fixed upstream in GCC 5
|
||||||
|
-#if __CXXSTDLIB_SO_VERSION__ >= 501000
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 5
|
||||||
|
VERIFY( translation1 == translation2 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@@ -77,7 +77,7 @@ void test02()
|
||||||
|
// Without a real translation this test doesn't mean anything:
|
||||||
|
|
||||||
|
// Fixed upstream in GCC 5
|
||||||
|
-#if __CXXSTDLIB_SO_VERSION__ >= 501000
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 5
|
||||||
|
VERIFY( !translation1.empty() );
|
||||||
|
VERIFY( translation1 != msgid );
|
||||||
|
#endif
|
||||||
|
diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
index dc5cf3e95..60f94bd6d 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
+++ b/libstdc++-v3/testsuite/lib/dts.exp
|
||||||
|
@@ -1,15 +1,10 @@
|
||||||
|
-# For DTS testing, generate a number expressing the
|
||||||
|
-# system version of libstdc++.so
|
||||||
|
-#
|
||||||
|
-# Generate a version number equivalent to
|
||||||
|
-# #define GCC_VERSION (__GNUC__ * 10000 \
|
||||||
|
-# + __GNUC_MINOR__ * 100 \
|
||||||
|
-# + __GNUC_PATCHLEVEL__)
|
||||||
|
+# For DTS testing, get the major version of the
|
||||||
|
+# system libstdc++.so
|
||||||
|
#
|
||||||
|
# For example, given an underlying version of gcc 4.8.5
|
||||||
|
-# this function will return 408050.
|
||||||
|
+# this function will return 4
|
||||||
|
|
||||||
|
-proc get_dts_base_version { } {
|
||||||
|
+proc get_dts_base_major_version { } {
|
||||||
|
|
||||||
|
# Invoke /usr/bin/gcc to get at the underlying GCC version
|
||||||
|
# in dotted form (e.g. "4.8.5").
|
||||||
|
@@ -24,8 +19,5 @@ proc get_dts_base_version { } {
|
||||||
|
verbose "minor: '$minor'" 2
|
||||||
|
verbose "patchlevel: '$patchlevel'" 2
|
||||||
|
|
||||||
|
- set base_gcc_version [expr (($major * 10000) + ($minor * 100) + $patchlevel)]
|
||||||
|
- verbose "base_gcc_version: '$base_gcc_version'" 2
|
||||||
|
-
|
||||||
|
- return $base_gcc_version
|
||||||
|
+ return $major
|
||||||
|
}
|
||||||
|
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
index 5e4b32f76..297485b19 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
|
||||||
|
@@ -326,8 +326,8 @@ proc libstdc++_init { testfile } {
|
||||||
|
|
||||||
|
# For DTS testing, expose the system version of libstdc++.so as
|
||||||
|
# a preprocessor define.
|
||||||
|
- set base_gcc_version [get_dts_base_version]
|
||||||
|
- set cxxflags "$cxxflags -D__CXXSTDLIB_SO_VERSION__=$base_gcc_version"
|
||||||
|
+ set base_gcc_version [get_dts_base_major_version]
|
||||||
|
+ set cxxflags "$cxxflags -D__LIBSTDCXX_SO_VERSION=$base_gcc_version"
|
||||||
|
|
||||||
|
# If a PCH file is available, use it. We must delay performing
|
||||||
|
# this check until $cxx and such have been initialized because we
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,84 @@
|
|||||||
|
From fa770c25013df537c41d0929c4202b0a774a6a75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 15:27:59 -0400
|
||||||
|
Subject: [PATCH 14/17] Conditionalize tests for PR libstdc++/98466 on
|
||||||
|
__LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
|
||||||
|
The tests:
|
||||||
|
23_containers/deque/debug/98466.cc
|
||||||
|
23_containers/unordered_map/debug/98466.cc
|
||||||
|
were added upstream 2021-01-01 as part of:
|
||||||
|
libstdc++: Implement N3644 for _GLIBCXX_DEBUG iterators
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=05a30af3f237984b4dcf1dbbc17fdac583c46506
|
||||||
|
but fail when run in DTS against a system libstdc++.so
|
||||||
|
from an older GCC.
|
||||||
|
|
||||||
|
In particular, they use the older implementation of _M_can_compare from
|
||||||
|
the dynamic library:
|
||||||
|
|
||||||
|
$ eu-readelf -s 98466.exe | grep can_compare | c++filt
|
||||||
|
11: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF __gnu_debug::_Safe_iterator_base::_M_can_compare(__gnu_debug::_Safe_iterator_base const&) const@GLIBCXX_3.4 (4)
|
||||||
|
157: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF __gnu_debug::_Safe_iterator_base::_M_can_compare(__gnu_debug::_Safe_iterator_base const&) const@@GLIBCXX_3.4
|
||||||
|
---
|
||||||
|
.../testsuite/23_containers/deque/debug/98466.cc | 6 ++++++
|
||||||
|
.../23_containers/unordered_map/debug/98466.cc | 12 ++++++++++++
|
||||||
|
2 files changed, 18 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc
|
||||||
|
index c2d793374..e92d719bf 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc
|
||||||
|
@@ -26,11 +26,17 @@ void test01()
|
||||||
|
{
|
||||||
|
typedef typename __gnu_debug::deque<int>::iterator It;
|
||||||
|
It it = It();
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( it == it );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
typedef typename __gnu_debug::deque<int>::const_iterator Cit;
|
||||||
|
Cit cit = Cit();
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( cit == cit );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc
|
||||||
|
index cc22b9ff8..3a1b6cd32 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc
|
||||||
|
@@ -25,16 +25,28 @@
|
||||||
|
void test01()
|
||||||
|
{
|
||||||
|
__gnu_debug::unordered_map<int, int>::iterator it{};
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( it == it );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
__gnu_debug::unordered_map<int, int>::const_iterator cit{};
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( cit == cit );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
__gnu_debug::unordered_map<int, int>::local_iterator lit{};
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( lit == lit );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
__gnu_debug::unordered_map<int, int>::const_local_iterator clit{};
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( clit == clit );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 992665eab6c48d6a4819f42509346d24b277485d Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 16:17:29 -0400
|
||||||
|
Subject: [PATCH 15/17] Conditionalize test for PR libstdc++/87135 on
|
||||||
|
__LIBSTDCXX_SO_VERSION >= 9
|
||||||
|
|
||||||
|
This VERIFY was added upstream 2018-09-18 as part of:
|
||||||
|
re PR libstdc++/87135 ([C++17] unordered containers violate iterator validity requirements)
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=a521e62615e439aea7502a52fd0f8a21eaa6304f
|
||||||
|
|
||||||
|
but fails when run in DTS against a system libstdc++.so from an older GCC.
|
||||||
|
|
||||||
|
In particular, rehash from the header is using
|
||||||
|
std::__detail::_Prime_rehash_policy::_M_next_bkt
|
||||||
|
from the system .so:
|
||||||
|
|
||||||
|
12: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const@GLIBCXX_3.4.18 (5)
|
||||||
|
225: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const@@GLIBCXX_3.4.18
|
||||||
|
---
|
||||||
|
.../23_containers/unordered_map/modifiers/reserve.cc | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
|
||||||
|
index 58c8924b9..4c79ec2e6 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
|
||||||
|
@@ -46,7 +46,11 @@ void test01()
|
||||||
|
|
||||||
|
// As long as we insert less than the reserved number of elements we
|
||||||
|
// shouldn't experiment any rehash.
|
||||||
|
+
|
||||||
|
+ // Fixed upstream in GCC 9
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 9
|
||||||
|
VERIFY( m.bucket_count() == bkts );
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
VERIFY( m.load_factor() <= m.max_load_factor() );
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,102 @@
|
|||||||
|
From db8f53df0be1daeda3159c1413549ff40696c710 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 17:02:33 -0400
|
||||||
|
Subject: [PATCH 16/17] Conditionalize test for hashtable bucket sizes on
|
||||||
|
__LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
|
||||||
|
These tests were added upstream 2020-01-20 as part of:
|
||||||
|
libstdc++: Do not over-size hashtable buckets on range insertion
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=6dcf042368012e2d7ce1626ee5d378bf3ad0ccfc
|
||||||
|
|
||||||
|
but fail when run in DTS against a system libstdc++.so from an older GCC.
|
||||||
|
|
||||||
|
In particular, _M_insert_unique_node from the header is using the older
|
||||||
|
implementation of
|
||||||
|
std::__detail::_Prime_rehash_policy::_M_need_rehash
|
||||||
|
from the dynamic library.
|
||||||
|
|
||||||
|
23: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const@GLIBCXX_3.4.18 (5)
|
||||||
|
412: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const@@GLIBCXX_3.4.18
|
||||||
|
---
|
||||||
|
.../23_containers/unordered_set/cons/bucket_hint.cc | 10 ++++++++++
|
||||||
|
.../23_containers/unordered_set/modifiers/insert.cc | 9 +++++++++
|
||||||
|
2 files changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc
|
||||||
|
index a3b014a3a..af231e54e 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc
|
||||||
|
@@ -29,7 +29,11 @@ void test01()
|
||||||
|
a.reserve(2);
|
||||||
|
|
||||||
|
std::unordered_set<int> b({ 0, 1, 0, 1, 0, 1, 0, 1 }, a.bucket_count());
|
||||||
|
+
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( b.bucket_count() == a.bucket_count() );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void test02()
|
||||||
|
@@ -40,7 +44,10 @@ void test02()
|
||||||
|
std::vector<int> v { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
|
||||||
|
|
||||||
|
std::unordered_set<int> b(v.begin(), v.end(), a.bucket_count());
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( b.bucket_count() == a.bucket_count() );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void test03()
|
||||||
|
@@ -51,7 +58,10 @@ void test03()
|
||||||
|
std::forward_list<int> fl { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
|
||||||
|
|
||||||
|
std::unordered_set<int> b(fl.begin(), fl.end(), a.bucket_count());
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( b.bucket_count() == a.bucket_count() );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
|
||||||
|
index 015c2f872..aae8298ae 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
|
||||||
|
@@ -30,7 +30,10 @@ void test01()
|
||||||
|
|
||||||
|
auto bkt_count = a.bucket_count();
|
||||||
|
a.insert({ 0, 1, 0, 1, 0, 1, 0, 1 });
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( a.bucket_count() == bkt_count );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void test02()
|
||||||
|
@@ -42,7 +45,10 @@ void test02()
|
||||||
|
|
||||||
|
auto bkt_count = a.bucket_count();
|
||||||
|
a.insert(v.begin(), v.end());
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( a.bucket_count() == bkt_count );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void test03()
|
||||||
|
@@ -54,7 +60,10 @@ void test03()
|
||||||
|
|
||||||
|
auto bkt_count = a.bucket_count();
|
||||||
|
a.insert(fl.begin(), fl.end());
|
||||||
|
+ // Fixed upstream in GCC 11
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 11
|
||||||
|
VERIFY( a.bucket_count() == bkt_count );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 102adc148612b50a4e3f12a88871ddc47bfb469e Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Malcolm <dmalcolm@redhat.com>
|
||||||
|
Date: Thu, 2 Sep 2021 17:17:50 -0400
|
||||||
|
Subject: [PATCH 17/17] Conditionalize test for PR libstdc++/71181 on
|
||||||
|
__LIBSTDCXX_SO_VERSION >= 7
|
||||||
|
|
||||||
|
This test was added upstream 2016-06-20 as part of:
|
||||||
|
re PR libstdc++/71181 (Reserving in unordered_map doesn't reserve enough)
|
||||||
|
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=29dbb034cb3199167a9d0aaed040733c72326eed
|
||||||
|
|
||||||
|
but fails when run in DTS against a system libstdc++.so from an older GCC.
|
||||||
|
---
|
||||||
|
.../testsuite/23_containers/unordered_set/hash_policy/71181.cc | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc
|
||||||
|
index 324d735b8..b2dcd0137 100644
|
||||||
|
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc
|
||||||
|
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc
|
||||||
|
@@ -39,7 +39,10 @@ template<typename _USet>
|
||||||
|
|
||||||
|
us.insert(nb_insert);
|
||||||
|
|
||||||
|
+ // Fixed upstream in GCC 7
|
||||||
|
+#if __LIBSTDCXX_SO_VERSION >= 7
|
||||||
|
VERIFY( us.bucket_count() == bkts );
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
1721
SOURCES/gcc11-Wbidi-chars.patch
Normal file
1721
SOURCES/gcc11-Wbidi-chars.patch
Normal file
File diff suppressed because it is too large
Load Diff
32
SOURCES/gcc11-dejagnu-multiline.patch
Normal file
32
SOURCES/gcc11-dejagnu-multiline.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
commit 14c7757e9b751781360737f53b71f851fc356d3d
|
||||||
|
Author: Jeff Law <jeffreyalaw@gmail.com>
|
||||||
|
Date: Fri Oct 29 11:30:15 2021 -0400
|
||||||
|
|
||||||
|
Avoid overly-greedy match in dejagnu regexp.
|
||||||
|
|
||||||
|
Occasionally I've been seeing failures with the multi-line diagnostics. It's never been clear what's causing the spurious failures, though I have long suspected a greedy regexp match.
|
||||||
|
|
||||||
|
It happened again yesterday with a local change that in no way should affect diagnostics, so I finally went searching and found that sure enough the multi-line diagnostics had a ".*" in their regexp. According to the comments, the .* is primarily to catch any dg directives that may appear -- ie it should eat to EOL, but not multiple lines. But a .* can indeed match a newline and cause it to eat multiple lines.
|
||||||
|
|
||||||
|
The fix is simple. [^\r\n]* will eat to EOL, but not further.
|
||||||
|
|
||||||
|
Regression tested on x86_64 and on our internal target.
|
||||||
|
|
||||||
|
gcc/testsuite
|
||||||
|
|
||||||
|
* lib/multiline.exp (_build_multiline_regex): Use a better
|
||||||
|
regexp than .* to match up to EOL.
|
||||||
|
|
||||||
|
diff --git a/gcc/testsuite/lib/multiline.exp b/gcc/testsuite/lib/multiline.exp
|
||||||
|
index 0e151b6d222..86387f8209b 100644
|
||||||
|
--- a/gcc/testsuite/lib/multiline.exp
|
||||||
|
+++ b/gcc/testsuite/lib/multiline.exp
|
||||||
|
@@ -331,7 +331,7 @@ proc _build_multiline_regex { multiline index } {
|
||||||
|
# Support arbitrary followup text on each non-empty line,
|
||||||
|
# to deal with comments containing containing DejaGnu
|
||||||
|
# directives.
|
||||||
|
- append rexp ".*"
|
||||||
|
+ append rexp "\[^\\n\\r\]*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
append rexp "\n"
|
83
SOURCES/gcc11-dg-ice-fixes.patch
Normal file
83
SOURCES/gcc11-dg-ice-fixes.patch
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
|
||||||
|
index 8c3884bdc00..141f089d4f8 100644
|
||||||
|
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
|
||||||
|
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
/* Test OpenACC 'kernels' construct decomposition. */
|
||||||
|
|
||||||
|
/* { dg-additional-options "-fopt-info-omp-all" } */
|
||||||
|
-/* { dg-additional-options "-fchecking --param=openacc-kernels=decompose" } */
|
||||||
|
+/* { dg-additional-options "-fno-report-bug -fchecking --param=openacc-kernels=decompose" } */
|
||||||
|
/* { dg-ice "TODO" }
|
||||||
|
{ dg-prune-output "during GIMPLE pass: omplower" } */
|
||||||
|
|
||||||
|
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
|
||||||
|
index 8bf60a9a509..a07e0a42116 100644
|
||||||
|
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
|
||||||
|
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
/* Test OpenACC 'kernels' construct decomposition. */
|
||||||
|
|
||||||
|
-/* { dg-additional-options "-fchecking --param=openacc-kernels=decompose" } */
|
||||||
|
+/* { dg-additional-options "-fno-report-bug -fchecking --param=openacc-kernels=decompose" } */
|
||||||
|
/* { dg-ice "TODO" }
|
||||||
|
{ dg-prune-output "during GIMPLE pass: omplower" } */
|
||||||
|
|
||||||
|
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
|
||||||
|
index eae0d8c377b..ed37f95e865 100644
|
||||||
|
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
|
||||||
|
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
// PR c++/52830
|
||||||
|
// { dg-do compile { target c++11 } }
|
||||||
|
-// { dg-additional-options "-fchecking" }
|
||||||
|
+// { dg-additional-options "-fchecking -fno-report-bug" }
|
||||||
|
// { dg-ice "comptypes" }
|
||||||
|
|
||||||
|
template<bool b> struct eif { typedef void type; };
|
||||||
|
diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-88982.C b/gcc/testsuite/g++.dg/cpp0x/vt-88982.C
|
||||||
|
index 7a868233d73..45307a63483 100644
|
||||||
|
--- a/gcc/testsuite/g++.dg/cpp0x/vt-88982.C
|
||||||
|
+++ b/gcc/testsuite/g++.dg/cpp0x/vt-88982.C
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
// PR c++/88982
|
||||||
|
// { dg-do compile { target c++11 } }
|
||||||
|
-// { dg-additional-options "-fchecking" }
|
||||||
|
+// { dg-additional-options "-fchecking -fno-report-bug" }
|
||||||
|
// { dg-ice "tsubst_pack_expansion" }
|
||||||
|
|
||||||
|
template<typename...Ts> struct A {
|
||||||
|
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn61.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn61.C
|
||||||
|
index bed5ea0cfc0..cb235bf891a 100644
|
||||||
|
--- a/gcc/testsuite/g++.dg/cpp1y/auto-fn61.C
|
||||||
|
+++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn61.C
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
// PR c++/88003
|
||||||
|
// { dg-do compile { target c++14 } }
|
||||||
|
-// { dg-additional-options "-fchecking" }
|
||||||
|
+// { dg-additional-options "-fchecking -fno-report-bug" }
|
||||||
|
// { dg-ice "poplevel_class" }
|
||||||
|
|
||||||
|
auto test() {
|
||||||
|
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
|
||||||
|
index 0cdb400d21c..8f17cca31dd 100644
|
||||||
|
--- a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
|
||||||
|
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda26.C
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
// PR c++/87765
|
||||||
|
// { dg-do compile { target c++17 } }
|
||||||
|
-// { dg-additional-options "-fchecking" }
|
||||||
|
+// { dg-additional-options "-fchecking -fno-report-bug" }
|
||||||
|
// { dg-ice "cxx_eval_constant_expression" }
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
|
||||||
|
index 0777b612b63..53abbe2db83 100644
|
||||||
|
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
|
||||||
|
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* { dg-additional-options "--param=openacc-kernels=decompose" } */
|
||||||
|
+/* { dg-additional-options "--param=openacc-kernels=decompose -fno-report-bug" } */
|
||||||
|
/* Hopefully, this is the same issue as '../../../gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c'.
|
||||||
|
{ dg-ice "TODO" }
|
||||||
|
TODO { dg-prune-output "during GIMPLE pass: omplower" }
|
57
SOURCES/gcc11-libgcc-link.patch
Normal file
57
SOURCES/gcc11-libgcc-link.patch
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
libgcc: Honor LDFLAGS_FOR_TARGET when linking libgcc_s
|
||||||
|
|
||||||
|
When building gcc with some specific LDFLAGS_FOR_TARGET, e.g.
|
||||||
|
LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now
|
||||||
|
those flags propagate info linking of target shared libraries,
|
||||||
|
e.g. lib{ubsan,tsan,stdc++,quadmath,objc,lsan,itm,gphobos,gdruntime,gomp,go,gfortran,atomic,asan}.so.*
|
||||||
|
but there is one important exception, libgcc_s.so.* linking ignores it.
|
||||||
|
|
||||||
|
The following patch fixes that.
|
||||||
|
|
||||||
|
Bootstrapped/regtested on x86_64-linux with LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now
|
||||||
|
and verified that libgcc_s.so.* is BIND_NOW when it previously wasn't, and
|
||||||
|
without any LDFLAGS_FOR_TARGET on x86_64-linux and i686-linux.
|
||||||
|
There on x86_64-linux I've verified that the libgcc_s.so.1 linking command
|
||||||
|
line for -m64 is identical except for whitespace to one without the patch,
|
||||||
|
and for -m32 multilib $(LDFLAGS) actually do supply there an extra -m32
|
||||||
|
that also repeats later in the @multilib_flags@, which should be harmless.
|
||||||
|
|
||||||
|
2021-08-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* config/t-slibgcc (SHLIB_LINK): Add $(LDFLAGS).
|
||||||
|
* config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
|
||||||
|
* config/t-slibgcc-vms (SHLIB_LINK): Likewise.
|
||||||
|
|
||||||
|
--- libgcc/config/t-slibgcc
|
||||||
|
+++ libgcc/config/t-slibgcc
|
||||||
|
@@ -32,7 +32,7 @@ SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||||
|
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||||
|
|
||||||
|
SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||||
|
- $(SHLIB_LDFLAGS) \
|
||||||
|
+ $(SHLIB_LDFLAGS) $(LDFLAGS) \
|
||||||
|
-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
|
||||||
|
$(SHLIB_OBJS) $(SHLIB_LC) && \
|
||||||
|
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
|
||||||
|
--- libgcc/config/t-slibgcc-darwin
|
||||||
|
+++ libgcc/config/t-slibgcc-darwin
|
||||||
|
@@ -15,7 +15,7 @@ SHLIB_LC = -lc
|
||||||
|
# Note that this version is used for the loader, not the linker; the linker
|
||||||
|
# uses the stub versions named by the versioned members of $(INSTALL_FILES).
|
||||||
|
|
||||||
|
-SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
|
||||||
|
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
|
||||||
|
-install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \
|
||||||
|
-single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \
|
||||||
|
-Wl,-exported_symbols_list,$(SHLIB_MAP) \
|
||||||
|
--- libgcc/config/t-slibgcc-vms
|
||||||
|
+++ libgcc/config/t-slibgcc-vms
|
||||||
|
@@ -22,7 +22,7 @@ SHLIB_LINK = \
|
||||||
|
objdump --syms $(SHLIB_OBJS) | \
|
||||||
|
$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt ; \
|
||||||
|
echo "case_sensitive=NO" >> SYMVEC_$$$$.opt; \
|
||||||
|
- $(CC) $(LIBGCC2_CFLAGS) -nodefaultlibs \
|
||||||
|
+ $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -nodefaultlibs \
|
||||||
|
-shared --for-linker=/noinform -o $(SHLIB_NAME) $(SHLIB_OBJS) \
|
||||||
|
--for-linker=SYMVEC_$$$$.opt \
|
||||||
|
--for-linker=gsmatch=equal,$(shlib_version)
|
@ -165,9 +165,9 @@
|
|||||||
__at_thread_exit(__at_thread_exit_elt*);
|
__at_thread_exit(__at_thread_exit_elt*);
|
||||||
--- libstdc++-v3/src/c++11/system_error.cc.libstdc++-compat~ 2021-05-12 09:34:49.000000000 -0400
|
--- libstdc++-v3/src/c++11/system_error.cc.libstdc++-compat~ 2021-05-12 09:34:49.000000000 -0400
|
||||||
+++ libstdc++-v3/src/c++11/system_error.cc 2021-05-17 12:05:15.766954365 -0400
|
+++ libstdc++-v3/src/c++11/system_error.cc 2021-05-17 12:05:15.766954365 -0400
|
||||||
@@ -346,7 +346,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
@@ -372,7 +372,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
const error_category&
|
const error_category&
|
||||||
_V2::generic_category() noexcept { return generic_category_instance; }
|
_V2::generic_category() noexcept { return generic_category_instance.obj; }
|
||||||
|
|
||||||
+#ifndef _GLIBCXX_NONSHARED_CXX11
|
+#ifndef _GLIBCXX_NONSHARED_CXX11
|
||||||
system_error::~system_error() noexcept = default;
|
system_error::~system_error() noexcept = default;
|
||||||
@ -175,7 +175,7 @@
|
|||||||
|
|
||||||
error_condition
|
error_condition
|
||||||
error_category::default_error_condition(int __i) const noexcept
|
error_category::default_error_condition(int __i) const noexcept
|
||||||
@@ -361,9 +363,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
@@ -387,9 +389,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
error_category::equivalent(const error_code& __code, int __i) const noexcept
|
error_category::equivalent(const error_code& __code, int __i) const noexcept
|
||||||
{ return *this == __code.category() && __code.value() == __i; }
|
{ return *this == __code.category() && __code.value() == __i; }
|
||||||
|
|
||||||
@ -13463,8 +13463,8 @@
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 12133 "configure"
|
-#line 12179 "configure"
|
||||||
+#line 12135 "configure"
|
+#line 12181 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@ -13472,8 +13472,8 @@
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 12239 "configure"
|
-#line 12285 "configure"
|
||||||
+#line 12241 "configure"
|
+#line 12287 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@ -13481,8 +13481,8 @@
|
|||||||
# Fake what AC_TRY_COMPILE does.
|
# Fake what AC_TRY_COMPILE does.
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 15921 "configure"
|
-#line 15967 "configure"
|
||||||
+#line 15923 "configure"
|
+#line 15969 "configure"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
typedef bool atomic_type;
|
typedef bool atomic_type;
|
||||||
@ -13490,8 +13490,8 @@
|
|||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 15956 "configure"
|
-#line 16002 "configure"
|
||||||
+#line 15958 "configure"
|
+#line 16004 "configure"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
typedef short atomic_type;
|
typedef short atomic_type;
|
||||||
@ -13499,8 +13499,8 @@
|
|||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 15991 "configure"
|
-#line 16037 "configure"
|
||||||
+#line 15993 "configure"
|
+#line 16039 "configure"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
// NB: _Atomic_word not necessarily int.
|
// NB: _Atomic_word not necessarily int.
|
||||||
@ -13508,8 +13508,8 @@
|
|||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 16027 "configure"
|
-#line 16073 "configure"
|
||||||
+#line 16029 "configure"
|
+#line 16075 "configure"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
typedef long long atomic_type;
|
typedef long long atomic_type;
|
||||||
@ -13517,8 +13517,8 @@
|
|||||||
# unnecessary for this test.
|
# unnecessary for this test.
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 16180 "configure"
|
-#line 16226 "configure"
|
||||||
+#line 16182 "configure"
|
+#line 16228 "configure"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
_Decimal32 d1;
|
_Decimal32 d1;
|
||||||
@ -13526,8 +13526,8 @@
|
|||||||
# unnecessary for this test.
|
# unnecessary for this test.
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 16222 "configure"
|
-#line 16268 "configure"
|
||||||
+#line 16224 "configure"
|
+#line 16270 "configure"
|
||||||
template<typename T1, typename T2>
|
template<typename T1, typename T2>
|
||||||
struct same
|
struct same
|
||||||
{ typedef T2 type; };
|
{ typedef T2 type; };
|
||||||
@ -13535,8 +13535,8 @@
|
|||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
|
|
||||||
cat > conftest.$ac_ext << EOF
|
cat > conftest.$ac_ext << EOF
|
||||||
-#line 16256 "configure"
|
-#line 16302 "configure"
|
||||||
+#line 16258 "configure"
|
+#line 16304 "configure"
|
||||||
template<typename T1, typename T2>
|
template<typename T1, typename T2>
|
||||||
struct same
|
struct same
|
||||||
{ typedef T2 type; };
|
{ typedef T2 type; };
|
||||||
|
457
SOURCES/gcc11-mtune-alderlake.patch
Normal file
457
SOURCES/gcc11-mtune-alderlake.patch
Normal file
@ -0,0 +1,457 @@
|
|||||||
|
From 54ccc52ba3f842cd94718967465a6015a752ca47 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Cui,Lili" <lili.cui@intel.com>
|
||||||
|
Date: Thu, 4 Nov 2021 10:38:56 +0800
|
||||||
|
Subject: [PATCH] x86: Update -mtune=alderlake
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Update mtune for alderlake, Alder Lake Intel Hybrid Technology will not support
|
||||||
|
Intel® AVX-512. ISA features such as Intel® AVX, AVX-VNNI, Intel® AVX2, and
|
||||||
|
UMONITOR/UMWAIT/TPAUSE are supported.
|
||||||
|
|
||||||
|
gcc/ChangeLog
|
||||||
|
|
||||||
|
* config/i386/i386-options.c (m_CORE_AVX2): Remove Alderlake
|
||||||
|
from m_CORE_AVX2.
|
||||||
|
(processor_cost_table): Use alderlake_cost for Alderlake.
|
||||||
|
* config/i386/i386.c (ix86_sched_init_global): Handle Alderlake.
|
||||||
|
* config/i386/x86-tune-costs.h (struct processor_costs): Add alderlake
|
||||||
|
cost.
|
||||||
|
* config/i386/x86-tune-sched.c (ix86_issue_rate): Change Alderlake
|
||||||
|
issue rate to 4.
|
||||||
|
(ix86_adjust_cost): Handle Alderlake.
|
||||||
|
* config/i386/x86-tune.def (X86_TUNE_SCHEDULE): Enable for Alderlake.
|
||||||
|
(X86_TUNE_PARTIAL_REG_DEPENDENCY): Likewise.
|
||||||
|
(X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY): Likewise.
|
||||||
|
(X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY): Likewise.
|
||||||
|
(X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
|
||||||
|
(X86_TUNE_MEMORY_MISMATCH_STALL): Likewise.
|
||||||
|
(X86_TUNE_USE_LEAVE): Likewise.
|
||||||
|
(X86_TUNE_PUSH_MEMORY): Likewise.
|
||||||
|
(X86_TUNE_USE_INCDEC): Likewise.
|
||||||
|
(X86_TUNE_INTEGER_DFMODE_MOVES): Likewise.
|
||||||
|
(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Likewise.
|
||||||
|
(X86_TUNE_USE_SAHF): Likewise.
|
||||||
|
(X86_TUNE_USE_BT): Likewise.
|
||||||
|
(X86_TUNE_AVOID_FALSE_DEP_FOR_BMI): Likewise.
|
||||||
|
(X86_TUNE_ONE_IF_CONV_INSN): Likewise.
|
||||||
|
(X86_TUNE_AVOID_MFENCE): Likewise.
|
||||||
|
(X86_TUNE_USE_SIMODE_FIOP): Likewise.
|
||||||
|
(X86_TUNE_EXT_80387_CONSTANTS): Likewise.
|
||||||
|
(X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL): Likewise.
|
||||||
|
(X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL): Likewise.
|
||||||
|
(X86_TUNE_SSE_TYPELESS_STORES): Likewise.
|
||||||
|
(X86_TUNE_SSE_LOAD0_BY_PXOR): Likewise.
|
||||||
|
(X86_TUNE_AVOID_4BYTE_PREFIXES): Likewise.
|
||||||
|
(X86_TUNE_USE_GATHER): Disable for Alderlake.
|
||||||
|
---
|
||||||
|
gcc/config/i386/i386-options.c | 4 +-
|
||||||
|
gcc/config/i386/i386.c | 1 +
|
||||||
|
gcc/config/i386/x86-tune-costs.h | 120 +++++++++++++++++++++++++++++++
|
||||||
|
gcc/config/i386/x86-tune-sched.c | 2 +
|
||||||
|
gcc/config/i386/x86-tune.def | 58 +++++++--------
|
||||||
|
5 files changed, 155 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
|
||||||
|
index e7a3bd4aaea..a8cc0664f11 100644
|
||||||
|
--- a/gcc/config/i386/i386-options.c
|
||||||
|
+++ b/gcc/config/i386/i386-options.c
|
||||||
|
@@ -131,7 +131,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
|
| m_ICELAKE_CLIENT | m_ICELAKE_SERVER | m_CASCADELAKE \
|
||||||
|
| m_TIGERLAKE | m_COOPERLAKE | m_SAPPHIRERAPIDS \
|
||||||
|
| m_ROCKETLAKE)
|
||||||
|
-#define m_CORE_AVX2 (m_HASWELL | m_SKYLAKE | m_ALDERLAKE | m_CORE_AVX512)
|
||||||
|
+#define m_CORE_AVX2 (m_HASWELL | m_SKYLAKE | m_CORE_AVX512)
|
||||||
|
#define m_CORE_ALL (m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2)
|
||||||
|
#define m_GOLDMONT (HOST_WIDE_INT_1U<<PROCESSOR_GOLDMONT)
|
||||||
|
#define m_GOLDMONT_PLUS (HOST_WIDE_INT_1U<<PROCESSOR_GOLDMONT_PLUS)
|
||||||
|
@@ -736,7 +736,7 @@ static const struct processor_costs *processor_cost_table[] =
|
||||||
|
&icelake_cost,
|
||||||
|
&skylake_cost,
|
||||||
|
&icelake_cost,
|
||||||
|
- &icelake_cost,
|
||||||
|
+ &alderlake_cost,
|
||||||
|
&icelake_cost,
|
||||||
|
&intel_cost,
|
||||||
|
&geode_cost,
|
||||||
|
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||||
|
index e94efdf39fb..73c4d5115bb 100644
|
||||||
|
--- a/gcc/config/i386/i386.c
|
||||||
|
+++ b/gcc/config/i386/i386.c
|
||||||
|
@@ -17014,6 +17014,7 @@ ix86_sched_init_global (FILE *, int, int)
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
case PROCESSOR_TREMONT:
|
||||||
|
+ case PROCESSOR_ALDERLAKE:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
/* Do not perform multipass scheduling for pre-reload schedule
|
||||||
|
to save compile time. */
|
||||||
|
diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h
|
||||||
|
index 93644be9cb3..dd5563d2e64 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune-costs.h
|
||||||
|
+++ b/gcc/config/i386/x86-tune-costs.h
|
||||||
|
@@ -2070,6 +2070,126 @@ struct processor_costs icelake_cost = {
|
||||||
|
"16", /* Func alignment. */
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* alderlake_cost should produce code tuned for alderlake family of CPUs. */
|
||||||
|
+static stringop_algs alderlake_memcpy[2] = {
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}},
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}}};
|
||||||
|
+static stringop_algs alderlake_memset[2] = {
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}},
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}}};
|
||||||
|
+static const
|
||||||
|
+struct processor_costs alderlake_cost = {
|
||||||
|
+ {
|
||||||
|
+ /* Start of register allocator costs. integer->integer move cost is 2. */
|
||||||
|
+ 6, /* cost for loading QImode using movzbl */
|
||||||
|
+ {6, 6, 6}, /* cost of loading integer registers
|
||||||
|
+ in QImode, HImode and SImode.
|
||||||
|
+ Relative to reg-reg move (2). */
|
||||||
|
+ {6, 6, 6}, /* cost of storing integer registers */
|
||||||
|
+ 4, /* cost of reg,reg fld/fst */
|
||||||
|
+ {6, 6, 12}, /* cost of loading fp registers
|
||||||
|
+ in SFmode, DFmode and XFmode */
|
||||||
|
+ {6, 6, 12}, /* cost of storing fp registers
|
||||||
|
+ in SFmode, DFmode and XFmode */
|
||||||
|
+ 2, /* cost of moving MMX register */
|
||||||
|
+ {6, 6}, /* cost of loading MMX registers
|
||||||
|
+ in SImode and DImode */
|
||||||
|
+ {6, 6}, /* cost of storing MMX registers
|
||||||
|
+ in SImode and DImode */
|
||||||
|
+ 2, 3, 4, /* cost of moving XMM,YMM,ZMM register */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of loading SSE registers
|
||||||
|
+ in 32,64,128,256 and 512-bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of storing SSE registers
|
||||||
|
+ in 32,64,128,256 and 512-bit */
|
||||||
|
+ 6, 6, /* SSE->integer and integer->SSE moves */
|
||||||
|
+ 6, 6, /* mask->integer and integer->mask moves */
|
||||||
|
+ {6, 6, 6}, /* cost of loading mask register
|
||||||
|
+ in QImode, HImode, SImode. */
|
||||||
|
+ {6, 6, 6}, /* cost if storing mask register
|
||||||
|
+ in QImode, HImode, SImode. */
|
||||||
|
+ 2, /* cost of moving mask register. */
|
||||||
|
+ /* End of register allocator costs. */
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of an add instruction */
|
||||||
|
+ COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
|
||||||
|
+ COSTS_N_INSNS (1), /* variable shift costs */
|
||||||
|
+ COSTS_N_INSNS (1), /* constant shift costs */
|
||||||
|
+ {COSTS_N_INSNS (3), /* cost of starting multiply for QI */
|
||||||
|
+ COSTS_N_INSNS (4), /* HI */
|
||||||
|
+ COSTS_N_INSNS (3), /* SI */
|
||||||
|
+ COSTS_N_INSNS (4), /* DI */
|
||||||
|
+ COSTS_N_INSNS (4)}, /* other */
|
||||||
|
+ 0, /* cost of multiply per each bit set */
|
||||||
|
+ {COSTS_N_INSNS (16), /* cost of a divide/mod for QI */
|
||||||
|
+ COSTS_N_INSNS (22), /* HI */
|
||||||
|
+ COSTS_N_INSNS (30), /* SI */
|
||||||
|
+ COSTS_N_INSNS (74), /* DI */
|
||||||
|
+ COSTS_N_INSNS (74)}, /* other */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of movsx */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of movzx */
|
||||||
|
+ 8, /* "large" insn */
|
||||||
|
+ 17, /* MOVE_RATIO */
|
||||||
|
+ 17, /* CLEAR_RATIO */
|
||||||
|
+ {6, 6, 6}, /* cost of loading integer registers
|
||||||
|
+ in QImode, HImode and SImode.
|
||||||
|
+ Relative to reg-reg move (2). */
|
||||||
|
+ {6, 6, 6}, /* cost of storing integer registers */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of loading SSE register
|
||||||
|
+ in 32bit, 64bit, 128bit, 256bit and 512bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of storing SSE register
|
||||||
|
+ in 32bit, 64bit, 128bit, 256bit and 512bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of unaligned loads. */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of unaligned storess. */
|
||||||
|
+ 2, 3, 4, /* cost of moving XMM,YMM,ZMM register */
|
||||||
|
+ 6, /* cost of moving SSE register to integer. */
|
||||||
|
+ 18, 6, /* Gather load static, per_elt. */
|
||||||
|
+ 18, 6, /* Gather store static, per_elt. */
|
||||||
|
+ 32, /* size of l1 cache. */
|
||||||
|
+ 512, /* size of l2 cache. */
|
||||||
|
+ 64, /* size of prefetch block */
|
||||||
|
+ 6, /* number of parallel prefetches */
|
||||||
|
+ 3, /* Branch cost */
|
||||||
|
+ COSTS_N_INSNS (3), /* cost of FADD and FSUB insns. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMUL instruction. */
|
||||||
|
+ COSTS_N_INSNS (17), /* cost of FDIV instruction. */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of FABS instruction. */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of FCHS instruction. */
|
||||||
|
+ COSTS_N_INSNS (14), /* cost of FSQRT instruction. */
|
||||||
|
+
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */
|
||||||
|
+ COSTS_N_INSNS (3), /* cost of ADDSS/SD SUBSS/SD insns. */
|
||||||
|
+ COSTS_N_INSNS (4), /* cost of MULSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of MULSD instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMA SS instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMA SD instruction. */
|
||||||
|
+ COSTS_N_INSNS (13), /* cost of DIVSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (17), /* cost of DIVSD instruction. */
|
||||||
|
+ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */
|
||||||
|
+ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */
|
||||||
|
+ alderlake_memcpy,
|
||||||
|
+ alderlake_memset,
|
||||||
|
+ COSTS_N_INSNS (4), /* cond_taken_branch_cost. */
|
||||||
|
+ COSTS_N_INSNS (2), /* cond_not_taken_branch_cost. */
|
||||||
|
+ "16:11:8", /* Loop alignment. */
|
||||||
|
+ "16:11:8", /* Jump alignment. */
|
||||||
|
+ "0:0:8", /* Label alignment. */
|
||||||
|
+ "16", /* Func alignment. */
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* BTVER1 has optimized REP instruction for medium sized blocks, but for
|
||||||
|
very small blocks it is better to use loop. For large blocks, libcall can
|
||||||
|
do nontemporary accesses and beat inline considerably. */
|
||||||
|
diff --git a/gcc/config/i386/x86-tune-sched.c b/gcc/config/i386/x86-tune-sched.c
|
||||||
|
index 56ada99a450..0c149a09531 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune-sched.c
|
||||||
|
+++ b/gcc/config/i386/x86-tune-sched.c
|
||||||
|
@@ -72,6 +72,7 @@ ix86_issue_rate (void)
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
case PROCESSOR_TREMONT:
|
||||||
|
+ case PROCESSOR_ALDERLAKE:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
@@ -431,6 +432,7 @@ ix86_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost,
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
case PROCESSOR_TREMONT:
|
||||||
|
+ case PROCESSOR_ALDERLAKE:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
/* Stack engine allows to execute push&pop instructions in parall. */
|
||||||
|
if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)
|
||||||
|
diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
|
||||||
|
index 58e8ead56b4..4ae0b569841 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune.def
|
||||||
|
+++ b/gcc/config/i386/x86-tune.def
|
||||||
|
@@ -42,7 +42,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
DEF_TUNE (X86_TUNE_SCHEDULE, "schedule",
|
||||||
|
m_PENT | m_LAKEMONT | m_PPRO | m_CORE_ALL | m_BONNELL | m_SILVERMONT
|
||||||
|
| m_INTEL | m_KNL | m_KNM | m_K6_GEODE | m_AMD_MULTIPLE | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE |m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_PARTIAL_REG_DEPENDENCY: Enable more register renaming
|
||||||
|
on modern chips. Preffer stores affecting whole integer register
|
||||||
|
@@ -51,7 +51,7 @@ DEF_TUNE (X86_TUNE_SCHEDULE, "schedule",
|
||||||
|
DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, "partial_reg_dependency",
|
||||||
|
m_P4_NOCONA | m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2
|
||||||
|
| m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_INTEL
|
||||||
|
- | m_KNL | m_KNM | m_AMD_MULTIPLE | m_TREMONT
|
||||||
|
+ | m_KNL | m_KNM | m_AMD_MULTIPLE | m_TREMONT | m_ALDERLAKE
|
||||||
|
| m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: This knob promotes all store
|
||||||
|
@@ -62,7 +62,7 @@ DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, "partial_reg_dependency",
|
||||||
|
that can be partly masked by careful scheduling of moves. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, "sse_partial_reg_dependency",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
- | m_BDVER | m_ZNVER | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_BDVER | m_ZNVER | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY: This knob avoids
|
||||||
|
partial write to the destination in scalar SSE conversion from FP
|
||||||
|
@@ -70,14 +70,14 @@ DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, "sse_partial_reg_dependency",
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY,
|
||||||
|
"sse_partial_reg_fp_converts_dependency",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
- | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ | m_BDVER | m_ZNVER | m_ALDERLAKE| m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY: This knob avoids partial
|
||||||
|
write to the destination in scalar SSE conversion from integer to FP. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY,
|
||||||
|
"sse_partial_reg_converts_dependency",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
- | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ | m_BDVER | m_ZNVER | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
|
||||||
|
are resolved on SSE register parts instead of whole registers, so we may
|
||||||
|
@@ -103,14 +103,14 @@ DEF_TUNE (X86_TUNE_MOVX, "movx",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE2 | m_NEHALEM | m_SANDYBRIDGE
|
||||||
|
| m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_KNL | m_KNM | m_INTEL
|
||||||
|
| m_GOLDMONT_PLUS | m_GEODE | m_AMD_MULTIPLE
|
||||||
|
- | m_CORE_AVX2 | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_CORE_AVX2 | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_MEMORY_MISMATCH_STALL: Avoid partial stores that are followed by
|
||||||
|
full sized loads. */
|
||||||
|
DEF_TUNE (X86_TUNE_MEMORY_MISMATCH_STALL, "memory_mismatch_stall",
|
||||||
|
m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL
|
||||||
|
| m_KNL | m_KNM | m_GOLDMONT | m_GOLDMONT_PLUS | m_AMD_MULTIPLE
|
||||||
|
- | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_FUSE_CMP_AND_BRANCH_32: Fuse compare with a subsequent
|
||||||
|
conditional jump instruction for 32 bit TARGET. */
|
||||||
|
@@ -166,14 +166,14 @@ DEF_TUNE (X86_TUNE_EPILOGUE_USING_MOVE, "epilogue_using_move",
|
||||||
|
/* X86_TUNE_USE_LEAVE: Use "leave" instruction in epilogues where it fits. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_LEAVE, "use_leave",
|
||||||
|
m_386 | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE | m_TREMONT
|
||||||
|
- | m_GENERIC)
|
||||||
|
+ | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_PUSH_MEMORY: Enable generation of "push mem" instructions.
|
||||||
|
Some chips, like 486 and Pentium works faster with separate load
|
||||||
|
and push instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_PUSH_MEMORY, "push_memory",
|
||||||
|
m_386 | m_P4_NOCONA | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE
|
||||||
|
- | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SINGLE_PUSH: Enable if single push insn is preferred
|
||||||
|
over esp subtraction. */
|
||||||
|
@@ -243,14 +243,14 @@ DEF_TUNE (X86_TUNE_READ_MODIFY, "read_modify", ~(m_PENT | m_LAKEMONT | m_PPRO))
|
||||||
|
DEF_TUNE (X86_TUNE_USE_INCDEC, "use_incdec",
|
||||||
|
~(m_P4_NOCONA | m_CORE2 | m_NEHALEM | m_SANDYBRIDGE
|
||||||
|
| m_BONNELL | m_SILVERMONT | m_INTEL | m_KNL | m_KNM | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC))
|
||||||
|
+ | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE | m_GENERIC))
|
||||||
|
|
||||||
|
/* X86_TUNE_INTEGER_DFMODE_MOVES: Enable if integer moves are preferred
|
||||||
|
for DFmode copies */
|
||||||
|
DEF_TUNE (X86_TUNE_INTEGER_DFMODE_MOVES, "integer_dfmode_moves",
|
||||||
|
~(m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT
|
||||||
|
| m_KNL | m_KNM | m_INTEL | m_GEODE | m_AMD_MULTIPLE | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC))
|
||||||
|
+ | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE | m_GENERIC))
|
||||||
|
|
||||||
|
/* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag
|
||||||
|
will impact LEA instruction selection. */
|
||||||
|
@@ -298,14 +298,14 @@ DEF_TUNE (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB,
|
||||||
|
DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES,
|
||||||
|
"misaligned_move_string_pro_epilogues",
|
||||||
|
m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_TREMONT
|
||||||
|
- | m_GENERIC)
|
||||||
|
+ | m_ALDERLAKE |m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_SAHF: Controls use of SAHF. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_SAHF, "use_sahf",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT
|
||||||
|
| m_KNL | m_KNM | m_INTEL | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_BDVER
|
||||||
|
| m_BTVER | m_ZNVER | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT
|
||||||
|
- | m_GENERIC)
|
||||||
|
+ | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_CLTD: Controls use of CLTD and CTQO instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_CLTD, "use_cltd",
|
||||||
|
@@ -316,12 +316,12 @@ DEF_TUNE (X86_TUNE_USE_CLTD, "use_cltd",
|
||||||
|
DEF_TUNE (X86_TUNE_USE_BT, "use_bt",
|
||||||
|
m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_KNL | m_KNM | m_INTEL
|
||||||
|
| m_LAKEMONT | m_AMD_MULTIPLE | m_GOLDMONT | m_GOLDMONT_PLUS
|
||||||
|
- | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_FALSE_DEP_FOR_BMI: Avoid false dependency
|
||||||
|
for bit-manipulation instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_FALSE_DEP_FOR_BMI, "avoid_false_dep_for_bmi",
|
||||||
|
- m_SANDYBRIDGE | m_CORE_AVX2 | m_TREMONT | m_GENERIC)
|
||||||
|
+ m_SANDYBRIDGE | m_CORE_AVX2 | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_ADJUST_UNROLL: This enables adjusting the unroll factor based
|
||||||
|
on hardware capabilities. Bdver3 hardware has a loop buffer which makes
|
||||||
|
@@ -333,11 +333,11 @@ DEF_TUNE (X86_TUNE_ADJUST_UNROLL, "adjust_unroll_factor", m_BDVER3 | m_BDVER4)
|
||||||
|
if-converted sequence to one. */
|
||||||
|
DEF_TUNE (X86_TUNE_ONE_IF_CONV_INSN, "one_if_conv_insn",
|
||||||
|
m_SILVERMONT | m_KNL | m_KNM | m_INTEL | m_CORE_ALL | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_MFENCE: Use lock prefixed instructions instead of mfence. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_MFENCE, "avoid_mfence",
|
||||||
|
- m_CORE_ALL | m_BDVER | m_ZNVER | m_TREMONT | m_GENERIC)
|
||||||
|
+ m_CORE_ALL | m_BDVER | m_ZNVER | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_EXPAND_ABS: This enables a new abs pattern by
|
||||||
|
generating instructions for abs (x) = (((signed) x >> (W-1) ^ x) -
|
||||||
|
@@ -361,7 +361,8 @@ DEF_TUNE (X86_TUNE_USE_HIMODE_FIOP, "use_himode_fiop",
|
||||||
|
DEF_TUNE (X86_TUNE_USE_SIMODE_FIOP, "use_simode_fiop",
|
||||||
|
~(m_PENT | m_LAKEMONT | m_PPRO | m_CORE_ALL | m_BONNELL
|
||||||
|
| m_SILVERMONT | m_KNL | m_KNM | m_INTEL | m_AMD_MULTIPLE
|
||||||
|
- | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC))
|
||||||
|
+ | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE
|
||||||
|
+ | m_GENERIC))
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_FFREEP: Use freep instruction instead of fstp. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_FFREEP, "use_ffreep", m_AMD_MULTIPLE)
|
||||||
|
@@ -370,7 +371,7 @@ DEF_TUNE (X86_TUNE_USE_FFREEP, "use_ffreep", m_AMD_MULTIPLE)
|
||||||
|
DEF_TUNE (X86_TUNE_EXT_80387_CONSTANTS, "ext_80387_constants",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT
|
||||||
|
| m_KNL | m_KNM | m_INTEL | m_K6_GEODE | m_ATHLON_K8 | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* SSE instruction selection tuning */
|
||||||
|
@@ -385,15 +386,15 @@ DEF_TUNE (X86_TUNE_GENERAL_REGS_SSE_SPILL, "general_regs_sse_spill",
|
||||||
|
of a sequence loading registers by parts. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL, "sse_unaligned_load_optimal",
|
||||||
|
m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_SILVERMONT | m_KNL | m_KNM
|
||||||
|
- | m_INTEL | m_GOLDMONT | m_GOLDMONT_PLUS
|
||||||
|
- | m_TREMONT | m_AMDFAM10 | m_BDVER | m_BTVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ | m_INTEL | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE
|
||||||
|
+ | m_AMDFAM10 | m_BDVER | m_BTVER | m_ZNVER | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL: Use movups for misaligned stores
|
||||||
|
instead of a sequence loading registers by parts. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL, "sse_unaligned_store_optimal",
|
||||||
|
m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2 | m_SILVERMONT | m_KNL | m_KNM
|
||||||
|
| m_INTEL | m_GOLDMONT | m_GOLDMONT_PLUS
|
||||||
|
- | m_TREMONT | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_ALDERLAKE | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL: Use packed single
|
||||||
|
precision 128bit instructions instead of double where possible. */
|
||||||
|
@@ -402,13 +403,13 @@ DEF_TUNE (X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL, "sse_packed_single_insn_optim
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_TYPELESS_STORES: Always movaps/movups for 128bit stores. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_TYPELESS_STORES, "sse_typeless_stores",
|
||||||
|
- m_AMD_MULTIPLE | m_CORE_ALL | m_TREMONT | m_GENERIC)
|
||||||
|
+ m_AMD_MULTIPLE | m_CORE_ALL | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_LOAD0_BY_PXOR: Always use pxor to load0 as opposed to
|
||||||
|
xorps/xorpd and other variants. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_LOAD0_BY_PXOR, "sse_load0_by_pxor",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BDVER | m_BTVER | m_ZNVER
|
||||||
|
- | m_TREMONT | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_ALDERLAKE | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_INTER_UNIT_MOVES_TO_VEC: Enable moves in from integer
|
||||||
|
to SSE registers. If disabled, the moves will be done by storing
|
||||||
|
@@ -454,11 +455,12 @@ DEF_TUNE (X86_TUNE_SLOW_PSHUFB, "slow_pshufb",
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_4BYTE_PREFIXES: Avoid instructions requiring 4+ bytes of prefixes. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, "avoid_4byte_prefixes",
|
||||||
|
- m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_INTEL)
|
||||||
|
+ m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_ALDERLAKE
|
||||||
|
+ | m_INTEL)
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_GATHER: Use gather instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_GATHER, "use_gather",
|
||||||
|
- ~(m_ZNVER1 | m_ZNVER2 | m_GENERIC))
|
||||||
|
+ ~(m_ZNVER1 | m_ZNVER2 | m_GENERIC | m_ALDERLAKE))
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or
|
||||||
|
smaller FMA chain. */
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
66
SOURCES/gcc11-pr101786.patch
Normal file
66
SOURCES/gcc11-pr101786.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
c++: Optimize constinit thread_local vars [PR101786]
|
||||||
|
|
||||||
|
The paper that introduced constinit mentioned in rationale that constinit
|
||||||
|
can be used on externs as well and that it can be used to avoid the
|
||||||
|
thread_local initialization wrappers, because the standard requires that
|
||||||
|
if constinit is present on any declaration, it is also present on the
|
||||||
|
initialization declaration, even if it is in some other TU etc.
|
||||||
|
|
||||||
|
There is a small problem though, we use the tls wrappers not just if
|
||||||
|
the thread_local variable needs dynamic initialization, but also when
|
||||||
|
it has static initialization, but non-trivial destructor, as the
|
||||||
|
"dynamic initialization" in that case needs to register the destructor.
|
||||||
|
|
||||||
|
So, the following patch optimizes constinit thread_local vars only
|
||||||
|
if we can prove they will not have non-trivial destructors. That includes
|
||||||
|
the case where we have incomplete type where we don't know and need to
|
||||||
|
conservatively assume the type will have non-trivial destructor at the
|
||||||
|
initializing declaration side.
|
||||||
|
|
||||||
|
2021-08-11 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/101786
|
||||||
|
* decl2.c (var_defined_without_dynamic_init): Return true for
|
||||||
|
DECL_DECLARED_CONSTINIT_P with complete type and trivial destructor.
|
||||||
|
|
||||||
|
* g++.dg/cpp2a/constinit16.C: New test.
|
||||||
|
|
||||||
|
--- gcc/cp/decl2.c
|
||||||
|
+++ gcc/cp/decl2.c
|
||||||
|
@@ -3447,6 +3447,12 @@ set_guard (tree guard)
|
||||||
|
static bool
|
||||||
|
var_defined_without_dynamic_init (tree var)
|
||||||
|
{
|
||||||
|
+ /* constinit vars are guaranteed to not have dynamic initializer,
|
||||||
|
+ but still registering the destructor counts as dynamic initialization. */
|
||||||
|
+ if (DECL_DECLARED_CONSTINIT_P (var)
|
||||||
|
+ && COMPLETE_TYPE_P (TREE_TYPE (var))
|
||||||
|
+ && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (var)))
|
||||||
|
+ return true;
|
||||||
|
/* If it's defined in another TU, we can't tell. */
|
||||||
|
if (DECL_EXTERNAL (var))
|
||||||
|
return false;
|
||||||
|
--- gcc/testsuite/g++.dg/cpp2a/constinit16.C
|
||||||
|
+++ gcc/testsuite/g++.dg/cpp2a/constinit16.C
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+// PR c++/101786
|
||||||
|
+// { dg-do compile { target c++20 } }
|
||||||
|
+// { dg-add-options tls }
|
||||||
|
+// { dg-require-alias "" }
|
||||||
|
+// { dg-require-effective-target tls_runtime }
|
||||||
|
+// { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar1" } }
|
||||||
|
+// { dg-final { scan-assembler "_ZTH17mythreadlocalvar2" } }
|
||||||
|
+// { dg-final { scan-assembler-not "_ZTH17mythreadlocalvar3" } }
|
||||||
|
+// { dg-final { scan-assembler "_ZTH17mythreadlocalvar4" } }
|
||||||
|
+
|
||||||
|
+extern thread_local constinit int mythreadlocalvar1;
|
||||||
|
+struct S;
|
||||||
|
+extern thread_local constinit S mythreadlocalvar2;
|
||||||
|
+struct T { int t; };
|
||||||
|
+extern thread_local constinit T mythreadlocalvar3;
|
||||||
|
+struct U { int u; ~U (); };
|
||||||
|
+extern thread_local constinit U mythreadlocalvar4;
|
||||||
|
+int foo () { return mythreadlocalvar1; }
|
||||||
|
+S *bar () { return &mythreadlocalvar2; }
|
||||||
|
+T *baz () { return &mythreadlocalvar3; }
|
||||||
|
+U *qux () { return &mythreadlocalvar4; }
|
197
SOURCES/gcc11-stringify-__VA_OPT__-2.patch
Normal file
197
SOURCES/gcc11-stringify-__VA_OPT__-2.patch
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
libcpp: Fix up #__VA_OPT__ handling [PR103415]
|
||||||
|
|
||||||
|
stringify_arg uses pfile->u_buff to create the string literal.
|
||||||
|
Unfortunately, paste_tokens -> _cpp_lex_direct -> lex_number -> _cpp_unaligned_alloc
|
||||||
|
can in some cases use pfile->u_buff too, which results in losing everything
|
||||||
|
prepared for the string literal until the token pasting.
|
||||||
|
|
||||||
|
The following patch fixes that by not calling paste_token during the
|
||||||
|
construction of the string literal, but doing that before. All the tokens
|
||||||
|
we are processing have been pushed into a token buffer using
|
||||||
|
tokens_buff_add_token so it is fine if we paste some of them in that buffer
|
||||||
|
(successful pasting creates a new token in that buffer), move following
|
||||||
|
tokens if any to make it contiguous, pop (throw away) the extra tokens at
|
||||||
|
the end and then do stringify_arg.
|
||||||
|
|
||||||
|
Also, paste_tokens now copies over PREV_WHITE and PREV_FALLTHROUGH flags
|
||||||
|
from the original lhs token to the replacement token. Copying that way
|
||||||
|
the PREV_WHITE flag is needed for the #__VA_OPT__ handling and copying
|
||||||
|
over PREV_FALLTHROUGH fixes the new Wimplicit-fallthrough-38.c test.
|
||||||
|
|
||||||
|
2021-12-01 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR preprocessor/103415
|
||||||
|
libcpp/
|
||||||
|
* macro.c (stringify_arg): Remove va_opt argument and va_opt handling.
|
||||||
|
(paste_tokens): On successful paste or in PREV_WHITE and
|
||||||
|
PREV_FALLTHROUGH flags from the *plhs token to the new token.
|
||||||
|
(replace_args): Adjust stringify_arg callers. For #__VA_OPT__,
|
||||||
|
perform token pasting in a separate loop before stringify_arg call.
|
||||||
|
gcc/testsuite/
|
||||||
|
* c-c++-common/cpp/va-opt-8.c: New test.
|
||||||
|
* c-c++-common/Wimplicit-fallthrough-38.c: New test.
|
||||||
|
|
||||||
|
--- libcpp/macro.c.jj
|
||||||
|
+++ libcpp/macro.c
|
||||||
|
@@ -295,7 +295,7 @@ static cpp_context *next_context (cpp_re
|
||||||
|
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
||||||
|
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
||||||
|
static const cpp_token *stringify_arg (cpp_reader *, const cpp_token **,
|
||||||
|
- unsigned int, bool);
|
||||||
|
+ unsigned int);
|
||||||
|
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
||||||
|
static bool paste_tokens (cpp_reader *, location_t,
|
||||||
|
const cpp_token **, const cpp_token *);
|
||||||
|
@@ -826,8 +826,7 @@ cpp_quote_string (uchar *dest, const uch
|
||||||
|
/* Convert a token sequence FIRST to FIRST+COUNT-1 to a single string token
|
||||||
|
according to the rules of the ISO C #-operator. */
|
||||||
|
static const cpp_token *
|
||||||
|
-stringify_arg (cpp_reader *pfile, const cpp_token **first, unsigned int count,
|
||||||
|
- bool va_opt)
|
||||||
|
+stringify_arg (cpp_reader *pfile, const cpp_token **first, unsigned int count)
|
||||||
|
{
|
||||||
|
unsigned char *dest;
|
||||||
|
unsigned int i, escape_it, backslash_count = 0;
|
||||||
|
@@ -844,24 +843,6 @@ stringify_arg (cpp_reader *pfile, const
|
||||||
|
{
|
||||||
|
const cpp_token *token = first[i];
|
||||||
|
|
||||||
|
- if (va_opt && (token->flags & PASTE_LEFT))
|
||||||
|
- {
|
||||||
|
- location_t virt_loc = pfile->invocation_location;
|
||||||
|
- const cpp_token *rhs;
|
||||||
|
- do
|
||||||
|
- {
|
||||||
|
- if (i == count)
|
||||||
|
- abort ();
|
||||||
|
- rhs = first[++i];
|
||||||
|
- if (!paste_tokens (pfile, virt_loc, &token, rhs))
|
||||||
|
- {
|
||||||
|
- --i;
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- while (rhs->flags & PASTE_LEFT);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (token->type == CPP_PADDING)
|
||||||
|
{
|
||||||
|
if (source == NULL
|
||||||
|
@@ -995,6 +976,7 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ lhs->flags |= (*plhs)->flags & (PREV_WHITE | PREV_FALLTHROUGH);
|
||||||
|
*plhs = lhs;
|
||||||
|
_cpp_pop_buffer (pfile);
|
||||||
|
return true;
|
||||||
|
@@ -1937,8 +1919,7 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
|
if (src->flags & STRINGIFY_ARG)
|
||||||
|
{
|
||||||
|
if (!arg->stringified)
|
||||||
|
- arg->stringified = stringify_arg (pfile, arg->first, arg->count,
|
||||||
|
- false);
|
||||||
|
+ arg->stringified = stringify_arg (pfile, arg->first, arg->count);
|
||||||
|
}
|
||||||
|
else if ((src->flags & PASTE_LEFT)
|
||||||
|
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
||||||
|
@@ -2065,11 +2046,46 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
|
{
|
||||||
|
unsigned int count
|
||||||
|
= start ? paste_flag - start : tokens_buff_count (buff);
|
||||||
|
- const cpp_token *t
|
||||||
|
- = stringify_arg (pfile,
|
||||||
|
- start ? start + 1
|
||||||
|
- : (const cpp_token **) (buff->base),
|
||||||
|
- count, true);
|
||||||
|
+ const cpp_token **first
|
||||||
|
+ = start ? start + 1
|
||||||
|
+ : (const cpp_token **) (buff->base);
|
||||||
|
+ unsigned int i, j;
|
||||||
|
+
|
||||||
|
+ /* Paste any tokens that need to be pasted before calling
|
||||||
|
+ stringify_arg, because stringify_arg uses pfile->u_buff
|
||||||
|
+ which paste_tokens can use as well. */
|
||||||
|
+ for (i = 0, j = 0; i < count; i++, j++)
|
||||||
|
+ {
|
||||||
|
+ const cpp_token *token = first[i];
|
||||||
|
+
|
||||||
|
+ if (token->flags & PASTE_LEFT)
|
||||||
|
+ {
|
||||||
|
+ location_t virt_loc = pfile->invocation_location;
|
||||||
|
+ const cpp_token *rhs;
|
||||||
|
+ do
|
||||||
|
+ {
|
||||||
|
+ if (i == count)
|
||||||
|
+ abort ();
|
||||||
|
+ rhs = first[++i];
|
||||||
|
+ if (!paste_tokens (pfile, virt_loc, &token, rhs))
|
||||||
|
+ {
|
||||||
|
+ --i;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ while (rhs->flags & PASTE_LEFT);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ first[j] = token;
|
||||||
|
+ }
|
||||||
|
+ if (j != i)
|
||||||
|
+ {
|
||||||
|
+ while (i-- != j)
|
||||||
|
+ tokens_buff_remove_last_token (buff);
|
||||||
|
+ count = j;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ const cpp_token *t = stringify_arg (pfile, first, count);
|
||||||
|
while (count--)
|
||||||
|
tokens_buff_remove_last_token (buff);
|
||||||
|
if (src->flags & PASTE_LEFT)
|
||||||
|
--- gcc/testsuite/c-c++-common/cpp/va-opt-8.c.jj
|
||||||
|
+++ gcc/testsuite/c-c++-common/cpp/va-opt-8.c
|
||||||
|
@@ -0,0 +1,18 @@
|
||||||
|
+/* PR preprocessor/103415 */
|
||||||
|
+/* { dg-do run } */
|
||||||
|
+/* { dg-options "-std=gnu99" { target c } } */
|
||||||
|
+/* { dg-options "-std=c++20" { target c++ } } */
|
||||||
|
+
|
||||||
|
+#define n(x, ...) = #__VA_OPT__(x##3)
|
||||||
|
+#define o(x, ...) #__VA_OPT__(x##__VA_ARGS__##9)
|
||||||
|
+const char *c n(1 2, 4);
|
||||||
|
+const char *d = o(5 6, 7 8);
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ if (__builtin_strcmp (c, "1 23")
|
||||||
|
+ || __builtin_strcmp (d, "5 67 89"))
|
||||||
|
+ __builtin_abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--- gcc/testsuite/c-c++-common/Wimplicit-fallthrough-38.c.jj
|
||||||
|
+++ gcc/testsuite/c-c++-common/Wimplicit-fallthrough-38.c
|
||||||
|
@@ -0,0 +1,24 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-Wimplicit-fallthrough=3" } */
|
||||||
|
+
|
||||||
|
+#define FOO \
|
||||||
|
+int \
|
||||||
|
+foo (int a) \
|
||||||
|
+{ \
|
||||||
|
+ switch (a) \
|
||||||
|
+ { \
|
||||||
|
+ case 1: \
|
||||||
|
+ ++a; \
|
||||||
|
+ /* FALLTHRU */ \
|
||||||
|
+ case 2: \
|
||||||
|
+ ++a; \
|
||||||
|
+ /* FALLTHRU */ \
|
||||||
|
+ ca##se 3: \
|
||||||
|
+ ++a; \
|
||||||
|
+ default: \
|
||||||
|
+ break; \
|
||||||
|
+ } \
|
||||||
|
+ return a; \
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+FOO
|
307
SOURCES/gcc11-stringify-__VA_OPT__.patch
Normal file
307
SOURCES/gcc11-stringify-__VA_OPT__.patch
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
c++: Add C++20 #__VA_OPT__ support
|
||||||
|
|
||||||
|
The following patch implements C++20 # __VA_OPT__ (...) support.
|
||||||
|
Testcases cover what I came up with myself and what LLVM has for #__VA_OPT__
|
||||||
|
in its testsuite and the string literals are identical between the two
|
||||||
|
compilers on the va-opt-5.c testcase.
|
||||||
|
|
||||||
|
2021-08-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
libcpp/
|
||||||
|
* macro.c (vaopt_state): Add m_stringify member.
|
||||||
|
(vaopt_state::vaopt_state): Initialize it.
|
||||||
|
(vaopt_state::update): Overwrite it.
|
||||||
|
(vaopt_state::stringify): New method.
|
||||||
|
(stringify_arg): Replace arg argument with first, count arguments
|
||||||
|
and add va_opt argument. Use first instead of arg->first and
|
||||||
|
count instead of arg->count, for va_opt add paste_tokens handling.
|
||||||
|
(paste_tokens): Fix up len calculation. Don't spell rhs twice,
|
||||||
|
instead use %.*s to supply lhs and rhs spelling lengths. Don't call
|
||||||
|
_cpp_backup_tokens here.
|
||||||
|
(paste_all_tokens): Call it here instead.
|
||||||
|
(replace_args): Adjust stringify_arg caller. For vaopt_state::END
|
||||||
|
if stringify is true handle __VA_OPT__ stringification.
|
||||||
|
(create_iso_definition): Handle # __VA_OPT__ similarly to # macro_arg.
|
||||||
|
gcc/testsuite/
|
||||||
|
* c-c++-common/cpp/va-opt-5.c: New test.
|
||||||
|
* c-c++-common/cpp/va-opt-6.c: New test.
|
||||||
|
|
||||||
|
--- libcpp/macro.c
|
||||||
|
+++ libcpp/macro.c
|
||||||
|
@@ -118,6 +118,7 @@ class vaopt_state {
|
||||||
|
m_arg (arg),
|
||||||
|
m_variadic (is_variadic),
|
||||||
|
m_last_was_paste (false),
|
||||||
|
+ m_stringify (false),
|
||||||
|
m_state (0),
|
||||||
|
m_paste_location (0),
|
||||||
|
m_location (0),
|
||||||
|
@@ -145,6 +146,7 @@ class vaopt_state {
|
||||||
|
}
|
||||||
|
++m_state;
|
||||||
|
m_location = token->src_loc;
|
||||||
|
+ m_stringify = (token->flags & STRINGIFY_ARG) != 0;
|
||||||
|
return BEGIN;
|
||||||
|
}
|
||||||
|
else if (m_state == 1)
|
||||||
|
@@ -234,6 +236,12 @@ class vaopt_state {
|
||||||
|
return m_state == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Return true for # __VA_OPT__. */
|
||||||
|
+ bool stringify () const
|
||||||
|
+ {
|
||||||
|
+ return m_stringify;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
|
||||||
|
/* The cpp_reader. */
|
||||||
|
@@ -247,6 +255,8 @@ class vaopt_state {
|
||||||
|
/* If true, the previous token was ##. This is used to detect when
|
||||||
|
a paste occurs at the end of the sequence. */
|
||||||
|
bool m_last_was_paste;
|
||||||
|
+ /* True for #__VA_OPT__. */
|
||||||
|
+ bool m_stringify;
|
||||||
|
|
||||||
|
/* The state variable:
|
||||||
|
0 means not parsing
|
||||||
|
@@ -284,7 +294,8 @@ static _cpp_buff *collect_args (cpp_read
|
||||||
|
static cpp_context *next_context (cpp_reader *);
|
||||||
|
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
||||||
|
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
||||||
|
-static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
|
||||||
|
+static const cpp_token *stringify_arg (cpp_reader *, const cpp_token **,
|
||||||
|
+ unsigned int, bool);
|
||||||
|
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
||||||
|
static bool paste_tokens (cpp_reader *, location_t,
|
||||||
|
const cpp_token **, const cpp_token *);
|
||||||
|
@@ -812,10 +823,11 @@ cpp_quote_string (uchar *dest, const uch
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* Convert a token sequence ARG to a single string token according to
|
||||||
|
- the rules of the ISO C #-operator. */
|
||||||
|
+/* Convert a token sequence FIRST to FIRST+COUNT-1 to a single string token
|
||||||
|
+ according to the rules of the ISO C #-operator. */
|
||||||
|
static const cpp_token *
|
||||||
|
-stringify_arg (cpp_reader *pfile, macro_arg *arg)
|
||||||
|
+stringify_arg (cpp_reader *pfile, const cpp_token **first, unsigned int count,
|
||||||
|
+ bool va_opt)
|
||||||
|
{
|
||||||
|
unsigned char *dest;
|
||||||
|
unsigned int i, escape_it, backslash_count = 0;
|
||||||
|
@@ -828,9 +840,27 @@ stringify_arg (cpp_reader *pfile, macro_
|
||||||
|
*dest++ = '"';
|
||||||
|
|
||||||
|
/* Loop, reading in the argument's tokens. */
|
||||||
|
- for (i = 0; i < arg->count; i++)
|
||||||
|
+ for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
- const cpp_token *token = arg->first[i];
|
||||||
|
+ const cpp_token *token = first[i];
|
||||||
|
+
|
||||||
|
+ if (va_opt && (token->flags & PASTE_LEFT))
|
||||||
|
+ {
|
||||||
|
+ location_t virt_loc = pfile->invocation_location;
|
||||||
|
+ const cpp_token *rhs;
|
||||||
|
+ do
|
||||||
|
+ {
|
||||||
|
+ if (i == count)
|
||||||
|
+ abort ();
|
||||||
|
+ rhs = first[++i];
|
||||||
|
+ if (!paste_tokens (pfile, virt_loc, &token, rhs))
|
||||||
|
+ {
|
||||||
|
+ --i;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ while (rhs->flags & PASTE_LEFT);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (token->type == CPP_PADDING)
|
||||||
|
{
|
||||||
|
@@ -917,7 +947,7 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
|
cpp_token *lhs;
|
||||||
|
unsigned int len;
|
||||||
|
|
||||||
|
- len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
|
||||||
|
+ len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 2;
|
||||||
|
buf = (unsigned char *) alloca (len);
|
||||||
|
end = lhsend = cpp_spell_token (pfile, *plhs, buf, true);
|
||||||
|
|
||||||
|
@@ -943,8 +973,10 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
|
location_t saved_loc = lhs->src_loc;
|
||||||
|
|
||||||
|
_cpp_pop_buffer (pfile);
|
||||||
|
- _cpp_backup_tokens (pfile, 1);
|
||||||
|
- *lhsend = '\0';
|
||||||
|
+
|
||||||
|
+ unsigned char *rhsstart = lhsend;
|
||||||
|
+ if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
|
||||||
|
+ rhsstart++;
|
||||||
|
|
||||||
|
/* We have to remove the PASTE_LEFT flag from the old lhs, but
|
||||||
|
we want to keep the new location. */
|
||||||
|
@@ -956,8 +988,10 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
|
/* Mandatory error for all apart from assembler. */
|
||||||
|
if (CPP_OPTION (pfile, lang) != CLK_ASM)
|
||||||
|
cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
|
||||||
|
- "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
|
||||||
|
- buf, cpp_token_as_text (pfile, rhs));
|
||||||
|
+ "pasting \"%.*s\" and \"%.*s\" does not give "
|
||||||
|
+ "a valid preprocessing token",
|
||||||
|
+ (int) (lhsend - buf), buf,
|
||||||
|
+ (int) (end - rhsstart), rhsstart);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1033,7 +1067,10 @@ paste_all_tokens (cpp_reader *pfile, con
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
|
||||||
|
- break;
|
||||||
|
+ {
|
||||||
|
+ _cpp_backup_tokens (pfile, 1);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
while (rhs->flags & PASTE_LEFT);
|
||||||
|
|
||||||
|
@@ -1900,7 +1937,8 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
|
if (src->flags & STRINGIFY_ARG)
|
||||||
|
{
|
||||||
|
if (!arg->stringified)
|
||||||
|
- arg->stringified = stringify_arg (pfile, arg);
|
||||||
|
+ arg->stringified = stringify_arg (pfile, arg->first, arg->count,
|
||||||
|
+ false);
|
||||||
|
}
|
||||||
|
else if ((src->flags & PASTE_LEFT)
|
||||||
|
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
||||||
|
@@ -2023,6 +2061,24 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
|
paste_flag = tokens_buff_last_token_ptr (buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (vaopt_tracker.stringify ())
|
||||||
|
+ {
|
||||||
|
+ unsigned int count
|
||||||
|
+ = start ? paste_flag - start : tokens_buff_count (buff);
|
||||||
|
+ const cpp_token *t
|
||||||
|
+ = stringify_arg (pfile,
|
||||||
|
+ start ? start + 1
|
||||||
|
+ : (const cpp_token **) (buff->base),
|
||||||
|
+ count, true);
|
||||||
|
+ while (count--)
|
||||||
|
+ tokens_buff_remove_last_token (buff);
|
||||||
|
+ if (src->flags & PASTE_LEFT)
|
||||||
|
+ copy_paste_flag (pfile, &t, src);
|
||||||
|
+ tokens_buff_add_token (buff, virt_locs,
|
||||||
|
+ t, t->src_loc, t->src_loc,
|
||||||
|
+ NULL, 0);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
if (start && paste_flag == start && (*start)->flags & PASTE_LEFT)
|
||||||
|
/* If __VA_OPT__ expands to nothing (either because __VA_ARGS__
|
||||||
|
is empty or because it is __VA_OPT__() ), drop PASTE_LEFT
|
||||||
|
@@ -3584,7 +3640,10 @@ create_iso_definition (cpp_reader *pfile
|
||||||
|
function-like macros when lexing the subsequent token. */
|
||||||
|
if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
|
||||||
|
{
|
||||||
|
- if (token->type == CPP_MACRO_ARG)
|
||||||
|
+ if (token->type == CPP_MACRO_ARG
|
||||||
|
+ || (macro->variadic
|
||||||
|
+ && token->type == CPP_NAME
|
||||||
|
+ && token->val.node.node == pfile->spec_nodes.n__VA_OPT__))
|
||||||
|
{
|
||||||
|
if (token->flags & PREV_WHITE)
|
||||||
|
token->flags |= SP_PREV_WHITE;
|
||||||
|
--- gcc/testsuite/c-c++-common/cpp/va-opt-5.c
|
||||||
|
+++ gcc/testsuite/c-c++-common/cpp/va-opt-5.c
|
||||||
|
@@ -0,0 +1,67 @@
|
||||||
|
+/* { dg-do run } */
|
||||||
|
+/* { dg-options "-std=gnu99" { target c } } */
|
||||||
|
+/* { dg-options "-std=c++20" { target c++ } } */
|
||||||
|
+
|
||||||
|
+#define lparen (
|
||||||
|
+#define a0 fooa0
|
||||||
|
+#define a1 fooa1 a0
|
||||||
|
+#define a2 fooa2 a1
|
||||||
|
+#define a3 fooa3 a2
|
||||||
|
+#define a() b lparen )
|
||||||
|
+#define b() c lparen )
|
||||||
|
+#define c() d lparen )
|
||||||
|
+#define g h
|
||||||
|
+#define i(j) j
|
||||||
|
+#define f(...) #__VA_OPT__(g i(0))
|
||||||
|
+#define k(x,...) # __VA_OPT__(x) #x #__VA_OPT__(__VA_ARGS__)
|
||||||
|
+#define l(x,...) #__VA_OPT__(a1 x)
|
||||||
|
+#define m(x,...) "a()" #__VA_OPT__(a3 __VA_ARGS__ x ## __VA_ARGS__ ## x ## c a3) "a()"
|
||||||
|
+#define n(x,...) = #__VA_OPT__(a3 __VA_ARGS__ x ## __VA_ARGS__ ## x ## c a3) #x #__VA_OPT__(a0 __VA_ARGS__ x ## __VA_ARGS__ ## x ## c a0) ;
|
||||||
|
+#define o(x, ...) #__VA_OPT__(x##x x##x)
|
||||||
|
+#define p(x, ...) #__VA_OPT__(_Pragma ("foobar"))
|
||||||
|
+#define q(...) #__VA_OPT__(/* foo */x/* bar */)
|
||||||
|
+const char *v1 = f();
|
||||||
|
+const char *v2 = f(123);
|
||||||
|
+const char *v3 = k(1);
|
||||||
|
+const char *v4 = k(1, 2, 3 );
|
||||||
|
+const char *v5 = l(a());
|
||||||
|
+const char *v6 = l(a1 a(), 1);
|
||||||
|
+const char *v7 = m();
|
||||||
|
+const char *v8 = m(,);
|
||||||
|
+const char *v9 = m(,a3);
|
||||||
|
+const char *v10 = m(a3,a(),a0);
|
||||||
|
+const char *v11 n()
|
||||||
|
+const char *v12 n(,)
|
||||||
|
+const char *v13 n(,a0)
|
||||||
|
+const char *v14 n(a0, a(),a0)
|
||||||
|
+const char *v15 = o(, 0);
|
||||||
|
+const char *v16 = p(0);
|
||||||
|
+const char *v17 = p(0, 1);
|
||||||
|
+const char *v18 = q();
|
||||||
|
+const char *v19 = q(1);
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ if (__builtin_strcmp (v1, "")
|
||||||
|
+ || __builtin_strcmp (v2, "g i(0)")
|
||||||
|
+ || __builtin_strcmp (v3, "1")
|
||||||
|
+ || __builtin_strcmp (v4, "112, 3")
|
||||||
|
+ || __builtin_strcmp (v5, "")
|
||||||
|
+ || __builtin_strcmp (v6, "a1 fooa1 fooa0 b ( )")
|
||||||
|
+ || __builtin_strcmp (v7, "a()a()")
|
||||||
|
+ || __builtin_strcmp (v8, "a()a()")
|
||||||
|
+ || __builtin_strcmp (v9, "a()a3 fooa3 fooa2 fooa1 fooa0 a3c a3a()")
|
||||||
|
+ || __builtin_strcmp (v10, "a()a3 b ( ),fooa0 a3a(),a0a3c a3a()")
|
||||||
|
+ || __builtin_strcmp (v11, "")
|
||||||
|
+ || __builtin_strcmp (v12, "")
|
||||||
|
+ || __builtin_strcmp (v13, "a3 fooa0 a0c a3a0 fooa0 a0c a0")
|
||||||
|
+ || __builtin_strcmp (v14, "a3 b ( ),fooa0 a0a(),a0a0c a3a0a0 b ( ),fooa0 a0a(),a0a0c a0")
|
||||||
|
+ || __builtin_strcmp (v15, "")
|
||||||
|
+ || __builtin_strcmp (v16, "")
|
||||||
|
+ || __builtin_strcmp (v17, "_Pragma (\"foobar\")")
|
||||||
|
+ || __builtin_strcmp (v18, "")
|
||||||
|
+ || __builtin_strcmp (v19, "x"))
|
||||||
|
+ __builtin_abort ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--- gcc/testsuite/c-c++-common/cpp/va-opt-6.c
|
||||||
|
+++ gcc/testsuite/c-c++-common/cpp/va-opt-6.c
|
||||||
|
@@ -0,0 +1,17 @@
|
||||||
|
+/* { dg-do preprocess } */
|
||||||
|
+/* { dg-options "-std=gnu99" { target c } } */
|
||||||
|
+/* { dg-options "-std=c++20" { target c++ } } */
|
||||||
|
+
|
||||||
|
+#define a ""
|
||||||
|
+#define b(...) a ## #__VA_OPT__(1) /* { dg-error "pasting \"a\" and \"\"\"\" does not give a valid preprocessing token" } */
|
||||||
|
+#define c(...) a ## #__VA_OPT__(1) /* { dg-error "pasting \"a\" and \"\"1\"\" does not give a valid preprocessing token" } */
|
||||||
|
+#define d(...) #__VA_OPT__(1) ## !
|
||||||
|
+#define e(...) #__VA_OPT__(1) ## !
|
||||||
|
+#define f(...) #__VA_OPT__(. ## !)
|
||||||
|
+#define g(...) #__VA_OPT__(. ## !)
|
||||||
|
+b()
|
||||||
|
+c(1)
|
||||||
|
+d( ) /* { dg-error "pasting \"\"\"\" and \"!\" does not give a valid preprocessing token" } */
|
||||||
|
+e( 1 ) /* { dg-error "pasting \"\"1\"\" and \"!\" does not give a valid preprocessing token" } */
|
||||||
|
+f()
|
||||||
|
+g(0) /* { dg-error "pasting \".\" and \"!\" does not give a valid preprocessing token" } */
|
294
SOURCES/gcc11-tremont1.patch
Normal file
294
SOURCES/gcc11-tremont1.patch
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
From cbd145b132c79c36e990a0eaf10c86159009f18d Mon Sep 17 00:00:00 2001
|
||||||
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||||
|
Date: Wed, 15 Sep 2021 14:15:10 +0800
|
||||||
|
Subject: [PATCH 1/3] x86: Update -mtune=tremont
|
||||||
|
|
||||||
|
Initial -mtune=tremont update
|
||||||
|
|
||||||
|
1. Use Haswell scheduling model.
|
||||||
|
2. Assume that stack engine allows to execute push&pop instructions in
|
||||||
|
parall.
|
||||||
|
3. Prepare for scheduling pass as -mtune=generic.
|
||||||
|
4. Use the same issue rate as -mtune=generic.
|
||||||
|
5. Enable partial_reg_dependency.
|
||||||
|
6. Disable accumulate_outgoing_args
|
||||||
|
7. Enable use_leave
|
||||||
|
8. Enable push_memory
|
||||||
|
9. Disable four_jump_limit
|
||||||
|
10. Disable opt_agu
|
||||||
|
11. Disable avoid_lea_for_addr
|
||||||
|
12. Disable avoid_mem_opnd_for_cmove
|
||||||
|
13. Enable misaligned_move_string_pro_epilogues
|
||||||
|
14. Enable use_cltd
|
||||||
|
16. Enable avoid_false_dep_for_bmi
|
||||||
|
17. Enable avoid_mfence
|
||||||
|
18. Disable expand_abs
|
||||||
|
19. Enable sse_typeless_stores
|
||||||
|
20. Enable sse_load0_by_pxor
|
||||||
|
21. Disable split_mem_opnd_for_fp_converts
|
||||||
|
22. Disable slow_pshufb
|
||||||
|
23. Enable partial_reg_dependency
|
||||||
|
|
||||||
|
This is the first patch to tune for Tremont. With all patches applied,
|
||||||
|
performance impacts on SPEC CPU 2017 are:
|
||||||
|
|
||||||
|
500.perlbench_r 1.81%
|
||||||
|
502.gcc_r 0.57%
|
||||||
|
505.mcf_r 1.16%
|
||||||
|
520.omnetpp_r 0.00%
|
||||||
|
523.xalancbmk_r 0.00%
|
||||||
|
525.x264_r 4.55%
|
||||||
|
531.deepsjeng_r 0.00%
|
||||||
|
541.leela_r 0.39%
|
||||||
|
548.exchange2_r 1.13%
|
||||||
|
557.xz_r 0.00%
|
||||||
|
geomean for intrate 0.95%
|
||||||
|
503.bwaves_r 0.00%
|
||||||
|
507.cactuBSSN_r 6.94%
|
||||||
|
508.namd_r 12.37%
|
||||||
|
510.parest_r 1.01%
|
||||||
|
511.povray_r 3.70%
|
||||||
|
519.lbm_r 36.61%
|
||||||
|
521.wrf_r 8.79%
|
||||||
|
526.blender_r 2.91%
|
||||||
|
527.cam4_r 6.23%
|
||||||
|
538.imagick_r 0.28%
|
||||||
|
544.nab_r 21.99%
|
||||||
|
549.fotonik3d_r 3.63%
|
||||||
|
554.roms_r -1.20%
|
||||||
|
geomean for fprate 7.50%
|
||||||
|
|
||||||
|
gcc/ChangeLog
|
||||||
|
|
||||||
|
* common/config/i386/i386-common.c: Use Haswell scheduling model
|
||||||
|
for Tremont.
|
||||||
|
* config/i386/i386.c (ix86_sched_init_global): Prepare for Tremont
|
||||||
|
scheduling pass.
|
||||||
|
* config/i386/x86-tune-sched.c (ix86_issue_rate): Change Tremont
|
||||||
|
issue rate to 4.
|
||||||
|
(ix86_adjust_cost): Handle Tremont.
|
||||||
|
* config/i386/x86-tune.def (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY):
|
||||||
|
Enable for Tremont.
|
||||||
|
(X86_TUNE_USE_LEAVE): Likewise.
|
||||||
|
(X86_TUNE_PUSH_MEMORY): Likewise.
|
||||||
|
(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Likewise.
|
||||||
|
(X86_TUNE_USE_CLTD): Likewise.
|
||||||
|
(X86_TUNE_AVOID_FALSE_DEP_FOR_BMI): Likewise.
|
||||||
|
(X86_TUNE_AVOID_MFENCE): Likewise.
|
||||||
|
(X86_TUNE_SSE_TYPELESS_STORES): Likewise.
|
||||||
|
(X86_TUNE_SSE_LOAD0_BY_PXOR): Likewise.
|
||||||
|
(X86_TUNE_ACCUMULATE_OUTGOING_ARGS): Disable for Tremont.
|
||||||
|
(X86_TUNE_FOUR_JUMP_LIMIT): Likewise.
|
||||||
|
(X86_TUNE_OPT_AGU): Likewise.
|
||||||
|
(X86_TUNE_AVOID_LEA_FOR_ADDR): Likewise.
|
||||||
|
(X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE): Likewise.
|
||||||
|
(X86_TUNE_EXPAND_ABS): Likewise.
|
||||||
|
(X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS): Likewise.
|
||||||
|
(X86_TUNE_SLOW_PSHUFB): Likewise.
|
||||||
|
---
|
||||||
|
gcc/common/config/i386/i386-common.c | 2 +-
|
||||||
|
gcc/config/i386/i386.c | 1 +
|
||||||
|
gcc/config/i386/x86-tune-sched.c | 2 ++
|
||||||
|
gcc/config/i386/x86-tune.def | 37 ++++++++++++++--------------
|
||||||
|
4 files changed, 23 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gcc/common/config/i386/i386-common.c b/gcc/common/config/i386/i386-common.c
|
||||||
|
index 38dbb9d9263..ef382ec9a22 100644
|
||||||
|
--- a/gcc/common/config/i386/i386-common.c
|
||||||
|
+++ b/gcc/common/config/i386/i386-common.c
|
||||||
|
@@ -1916,7 +1916,7 @@ const pta processor_alias_table[] =
|
||||||
|
M_CPU_TYPE (INTEL_GOLDMONT), P_PROC_SSE4_2},
|
||||||
|
{"goldmont-plus", PROCESSOR_GOLDMONT_PLUS, CPU_GLM, PTA_GOLDMONT_PLUS,
|
||||||
|
M_CPU_TYPE (INTEL_GOLDMONT_PLUS), P_PROC_SSE4_2},
|
||||||
|
- {"tremont", PROCESSOR_TREMONT, CPU_GLM, PTA_TREMONT,
|
||||||
|
+ {"tremont", PROCESSOR_TREMONT, CPU_HASWELL, PTA_TREMONT,
|
||||||
|
M_CPU_TYPE (INTEL_TREMONT), P_PROC_SSE4_2},
|
||||||
|
{"knl", PROCESSOR_KNL, CPU_SLM, PTA_KNL,
|
||||||
|
M_CPU_TYPE (INTEL_KNL), P_PROC_AVX512F},
|
||||||
|
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||||
|
index 42c47d2b12b..fc2a27b5cbf 100644
|
||||||
|
--- a/gcc/config/i386/i386.c
|
||||||
|
+++ b/gcc/config/i386/i386.c
|
||||||
|
@@ -16732,6 +16732,7 @@ ix86_sched_init_global (FILE *, int, int)
|
||||||
|
case PROCESSOR_NEHALEM:
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
+ case PROCESSOR_TREMONT:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
/* Do not perform multipass scheduling for pre-reload schedule
|
||||||
|
to save compile time. */
|
||||||
|
diff --git a/gcc/config/i386/x86-tune-sched.c b/gcc/config/i386/x86-tune-sched.c
|
||||||
|
index 2bcc64b865a..278035eec0b 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune-sched.c
|
||||||
|
+++ b/gcc/config/i386/x86-tune-sched.c
|
||||||
|
@@ -71,6 +71,7 @@ ix86_issue_rate (void)
|
||||||
|
case PROCESSOR_NEHALEM:
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
+ case PROCESSOR_TREMONT:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
@@ -430,6 +431,7 @@ ix86_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost,
|
||||||
|
case PROCESSOR_NEHALEM:
|
||||||
|
case PROCESSOR_SANDYBRIDGE:
|
||||||
|
case PROCESSOR_HASWELL:
|
||||||
|
+ case PROCESSOR_TREMONT:
|
||||||
|
case PROCESSOR_GENERIC:
|
||||||
|
/* Stack engine allows to execute push&pop instructions in parall. */
|
||||||
|
if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)
|
||||||
|
diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
|
||||||
|
index eb057a67750..6bd7087a03f 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune.def
|
||||||
|
+++ b/gcc/config/i386/x86-tune.def
|
||||||
|
@@ -62,7 +62,7 @@ DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, "partial_reg_dependency",
|
||||||
|
that can be partly masked by careful scheduling of moves. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, "sse_partial_reg_dependency",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
- | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ | m_BDVER | m_ZNVER | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
|
||||||
|
are resolved on SSE register parts instead of whole registers, so we may
|
||||||
|
@@ -136,7 +136,7 @@ DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch",
|
||||||
|
|
||||||
|
DEF_TUNE (X86_TUNE_ACCUMULATE_OUTGOING_ARGS, "accumulate_outgoing_args",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_BONNELL | m_SILVERMONT | m_KNL | m_KNM | m_INTEL
|
||||||
|
- | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_ATHLON_K8)
|
||||||
|
+ | m_GOLDMONT | m_GOLDMONT_PLUS | m_ATHLON_K8)
|
||||||
|
|
||||||
|
/* X86_TUNE_PROLOGUE_USING_MOVE: Do not use push/pop in prologues that are
|
||||||
|
considered on critical path. */
|
||||||
|
@@ -150,14 +150,15 @@ DEF_TUNE (X86_TUNE_EPILOGUE_USING_MOVE, "epilogue_using_move",
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_LEAVE: Use "leave" instruction in epilogues where it fits. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_LEAVE, "use_leave",
|
||||||
|
- m_386 | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE | m_GENERIC)
|
||||||
|
+ m_386 | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE | m_TREMONT
|
||||||
|
+ | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_PUSH_MEMORY: Enable generation of "push mem" instructions.
|
||||||
|
Some chips, like 486 and Pentium works faster with separate load
|
||||||
|
and push instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_PUSH_MEMORY, "push_memory",
|
||||||
|
m_386 | m_P4_NOCONA | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE
|
||||||
|
- | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SINGLE_PUSH: Enable if single push insn is preferred
|
||||||
|
over esp subtraction. */
|
||||||
|
@@ -198,8 +199,7 @@ DEF_TUNE (X86_TUNE_PAD_RETURNS, "pad_returns",
|
||||||
|
than 4 branch instructions in the 16 byte window. */
|
||||||
|
DEF_TUNE (X86_TUNE_FOUR_JUMP_LIMIT, "four_jump_limit",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_BONNELL | m_SILVERMONT | m_KNL | m_KNM
|
||||||
|
- | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_INTEL | m_ATHLON_K8
|
||||||
|
- | m_AMDFAM10)
|
||||||
|
+ | m_GOLDMONT | m_GOLDMONT_PLUS | m_INTEL | m_ATHLON_K8 | m_AMDFAM10)
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Integer instruction selection tuning */
|
||||||
|
@@ -240,11 +240,11 @@ DEF_TUNE (X86_TUNE_INTEGER_DFMODE_MOVES, "integer_dfmode_moves",
|
||||||
|
/* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag
|
||||||
|
will impact LEA instruction selection. */
|
||||||
|
DEF_TUNE (X86_TUNE_OPT_AGU, "opt_agu", m_BONNELL | m_SILVERMONT | m_KNL
|
||||||
|
- | m_KNM | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT | m_INTEL)
|
||||||
|
+ | m_KNM | m_GOLDMONT | m_GOLDMONT_PLUS | m_INTEL)
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_LEA_FOR_ADDR: Avoid lea for address computation. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_LEA_FOR_ADDR, "avoid_lea_for_addr",
|
||||||
|
- m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT
|
||||||
|
+ m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS
|
||||||
|
| m_KNL | m_KNM)
|
||||||
|
|
||||||
|
/* X86_TUNE_SLOW_IMUL_IMM32_MEM: Imul of 32-bit constant and memory is
|
||||||
|
@@ -263,7 +263,7 @@ DEF_TUNE (X86_TUNE_SLOW_IMUL_IMM8, "slow_imul_imm8",
|
||||||
|
a conditional move. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE, "avoid_mem_opnd_for_cmove",
|
||||||
|
m_BONNELL | m_SILVERMONT | m_GOLDMONT | m_GOLDMONT_PLUS | m_KNL
|
||||||
|
- | m_KNM | m_TREMONT | m_INTEL)
|
||||||
|
+ | m_KNM | m_INTEL)
|
||||||
|
|
||||||
|
/* X86_TUNE_SINGLE_STRINGOP: Enable use of single string operations, such
|
||||||
|
as MOVS and STOS (without a REP prefix) to move/set sequences of bytes. */
|
||||||
|
@@ -282,7 +282,8 @@ DEF_TUNE (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB,
|
||||||
|
FIXME: This may actualy be a win on more targets than listed here. */
|
||||||
|
DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES,
|
||||||
|
"misaligned_move_string_pro_epilogues",
|
||||||
|
- m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_GENERIC)
|
||||||
|
+ m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_TREMONT
|
||||||
|
+ | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_SAHF: Controls use of SAHF. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_SAHF, "use_sahf",
|
||||||
|
@@ -294,7 +295,7 @@ DEF_TUNE (X86_TUNE_USE_SAHF, "use_sahf",
|
||||||
|
/* X86_TUNE_USE_CLTD: Controls use of CLTD and CTQO instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_CLTD, "use_cltd",
|
||||||
|
~(m_PENT | m_LAKEMONT | m_BONNELL | m_SILVERMONT | m_KNL | m_KNM | m_INTEL
|
||||||
|
- | m_K6 | m_GOLDMONT | m_GOLDMONT_PLUS | m_TREMONT))
|
||||||
|
+ | m_K6 | m_GOLDMONT | m_GOLDMONT_PLUS))
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_BT: Enable use of BT (bit test) instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_USE_BT, "use_bt",
|
||||||
|
@@ -305,7 +306,7 @@ DEF_TUNE (X86_TUNE_USE_BT, "use_bt",
|
||||||
|
/* X86_TUNE_AVOID_FALSE_DEP_FOR_BMI: Avoid false dependency
|
||||||
|
for bit-manipulation instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_FALSE_DEP_FOR_BMI, "avoid_false_dep_for_bmi",
|
||||||
|
- m_SANDYBRIDGE | m_CORE_AVX2 | m_GENERIC)
|
||||||
|
+ m_SANDYBRIDGE | m_CORE_AVX2 | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_ADJUST_UNROLL: This enables adjusting the unroll factor based
|
||||||
|
on hardware capabilities. Bdver3 hardware has a loop buffer which makes
|
||||||
|
@@ -321,14 +322,14 @@ DEF_TUNE (X86_TUNE_ONE_IF_CONV_INSN, "one_if_conv_insn",
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_MFENCE: Use lock prefixed instructions instead of mfence. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_MFENCE, "avoid_mfence",
|
||||||
|
- m_CORE_ALL | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+ m_CORE_ALL | m_BDVER | m_ZNVER | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_EXPAND_ABS: This enables a new abs pattern by
|
||||||
|
generating instructions for abs (x) = (((signed) x >> (W-1) ^ x) -
|
||||||
|
(signed) x >> (W-1)) instead of cmove or SSE max/abs instructions. */
|
||||||
|
DEF_TUNE (X86_TUNE_EXPAND_ABS, "expand_abs",
|
||||||
|
m_CORE_ALL | m_SILVERMONT | m_KNL | m_KNM | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT )
|
||||||
|
+ | m_GOLDMONT_PLUS)
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* 387 instruction selection tuning */
|
||||||
|
@@ -386,13 +387,13 @@ DEF_TUNE (X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL, "sse_packed_single_insn_optim
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_TYPELESS_STORES: Always movaps/movups for 128bit stores. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_TYPELESS_STORES, "sse_typeless_stores",
|
||||||
|
- m_AMD_MULTIPLE | m_CORE_ALL | m_GENERIC)
|
||||||
|
+ m_AMD_MULTIPLE | m_CORE_ALL | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_SSE_LOAD0_BY_PXOR: Always use pxor to load0 as opposed to
|
||||||
|
xorps/xorpd and other variants. */
|
||||||
|
DEF_TUNE (X86_TUNE_SSE_LOAD0_BY_PXOR, "sse_load0_by_pxor",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BDVER | m_BTVER | m_ZNVER
|
||||||
|
- | m_GENERIC)
|
||||||
|
+ | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
/* X86_TUNE_INTER_UNIT_MOVES_TO_VEC: Enable moves in from integer
|
||||||
|
to SSE registers. If disabled, the moves will be done by storing
|
||||||
|
@@ -419,7 +420,7 @@ DEF_TUNE (X86_TUNE_INTER_UNIT_CONVERSIONS, "inter_unit_conversions",
|
||||||
|
fp converts to destination register. */
|
||||||
|
DEF_TUNE (X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS, "split_mem_opnd_for_fp_converts",
|
||||||
|
m_SILVERMONT | m_KNL | m_KNM | m_GOLDMONT | m_GOLDMONT_PLUS
|
||||||
|
- | m_TREMONT | m_INTEL)
|
||||||
|
+ | m_INTEL)
|
||||||
|
|
||||||
|
/* X86_TUNE_USE_VECTOR_FP_CONVERTS: Prefer vector packed SSE conversion
|
||||||
|
from FP to FP. This form of instructions avoids partial write to the
|
||||||
|
@@ -434,7 +435,7 @@ DEF_TUNE (X86_TUNE_USE_VECTOR_CONVERTS, "use_vector_converts", m_AMDFAM10)
|
||||||
|
/* X86_TUNE_SLOW_SHUFB: Indicates tunings with slow pshufb instruction. */
|
||||||
|
DEF_TUNE (X86_TUNE_SLOW_PSHUFB, "slow_pshufb",
|
||||||
|
m_BONNELL | m_SILVERMONT | m_KNL | m_KNM | m_GOLDMONT
|
||||||
|
- | m_GOLDMONT_PLUS | m_TREMONT | m_INTEL)
|
||||||
|
+ | m_GOLDMONT_PLUS | m_INTEL)
|
||||||
|
|
||||||
|
/* X86_TUNE_AVOID_4BYTE_PREFIXES: Avoid instructions requiring 4+ bytes of prefixes. */
|
||||||
|
DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, "avoid_4byte_prefixes",
|
||||||
|
--
|
||||||
|
2.18.2
|
||||||
|
|
196
SOURCES/gcc11-tremont2.patch
Normal file
196
SOURCES/gcc11-tremont2.patch
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
From 80c2ed8228817fb6438120997227811a746272ba Mon Sep 17 00:00:00 2001
|
||||||
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||||
|
Date: Wed, 15 Sep 2021 14:17:08 +0800
|
||||||
|
Subject: [PATCH 2/3] x86: Update memcpy/memset inline strategies for
|
||||||
|
-mtune=tremont
|
||||||
|
|
||||||
|
Simply memcpy and memset inline strategies to avoid branches for
|
||||||
|
-mtune=tremont:
|
||||||
|
|
||||||
|
1. Create Tremont cost model from generic cost model.
|
||||||
|
2. With MOVE_RATIO and CLEAR_RATIO == 17, GCC will use integer/vector
|
||||||
|
load and store for up to 16 * 16 (256) bytes when the data size is
|
||||||
|
fixed and known.
|
||||||
|
3. Inline only if data size is known to be <= 256.
|
||||||
|
a. Use "rep movsb/stosb" with simple code sequence if the data size
|
||||||
|
is a constant.
|
||||||
|
b. Use loop if data size is not a constant.
|
||||||
|
4. Use memcpy/memset libray function if data size is unknown or > 256.
|
||||||
|
|
||||||
|
* config/i386/i386-options.c (processor_cost_table): Use
|
||||||
|
tremont_cost for Tremont.
|
||||||
|
* config/i386/x86-tune-costs.h (tremont_memcpy): New.
|
||||||
|
(tremont_memset): Likewise.
|
||||||
|
(tremont_cost): Likewise.
|
||||||
|
* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
|
||||||
|
Enable for Tremont.
|
||||||
|
---
|
||||||
|
gcc/config/i386/i386-options.c | 2 +-
|
||||||
|
gcc/config/i386/x86-tune-costs.h | 124 +++++++++++++++++++++++++++++++
|
||||||
|
gcc/config/i386/x86-tune.def | 2 +-
|
||||||
|
3 files changed, 126 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
|
||||||
|
index 19632b5fd6b..4b77d62926f 100644
|
||||||
|
--- a/gcc/config/i386/i386-options.c
|
||||||
|
+++ b/gcc/config/i386/i386-options.c
|
||||||
|
@@ -719,7 +719,7 @@ static const struct processor_costs *processor_cost_table[] =
|
||||||
|
&slm_cost,
|
||||||
|
&slm_cost,
|
||||||
|
&slm_cost,
|
||||||
|
- &slm_cost,
|
||||||
|
+ &tremont_cost,
|
||||||
|
&slm_cost,
|
||||||
|
&slm_cost,
|
||||||
|
&skylake_cost,
|
||||||
|
diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h
|
||||||
|
index ffe810f2bcb..93644be9cb3 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune-costs.h
|
||||||
|
+++ b/gcc/config/i386/x86-tune-costs.h
|
||||||
|
@@ -2734,6 +2734,130 @@ struct processor_costs slm_cost = {
|
||||||
|
"16", /* Func alignment. */
|
||||||
|
};
|
||||||
|
|
||||||
|
+static stringop_algs tremont_memcpy[2] = {
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}},
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}}};
|
||||||
|
+static stringop_algs tremont_memset[2] = {
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}},
|
||||||
|
+ {libcall,
|
||||||
|
+ {{256, rep_prefix_1_byte, true},
|
||||||
|
+ {256, loop, false},
|
||||||
|
+ {-1, libcall, false}}}};
|
||||||
|
+static const
|
||||||
|
+struct processor_costs tremont_cost = {
|
||||||
|
+ {
|
||||||
|
+ /* Start of register allocator costs. integer->integer move cost is 2. */
|
||||||
|
+ 6, /* cost for loading QImode using movzbl */
|
||||||
|
+ {6, 6, 6}, /* cost of loading integer registers
|
||||||
|
+ in QImode, HImode and SImode.
|
||||||
|
+ Relative to reg-reg move (2). */
|
||||||
|
+ {6, 6, 6}, /* cost of storing integer registers */
|
||||||
|
+ 4, /* cost of reg,reg fld/fst */
|
||||||
|
+ {6, 6, 12}, /* cost of loading fp registers
|
||||||
|
+ in SFmode, DFmode and XFmode */
|
||||||
|
+ {6, 6, 12}, /* cost of storing fp registers
|
||||||
|
+ in SFmode, DFmode and XFmode */
|
||||||
|
+ 2, /* cost of moving MMX register */
|
||||||
|
+ {6, 6}, /* cost of loading MMX registers
|
||||||
|
+ in SImode and DImode */
|
||||||
|
+ {6, 6}, /* cost of storing MMX registers
|
||||||
|
+ in SImode and DImode */
|
||||||
|
+ 2, 3, 4, /* cost of moving XMM,YMM,ZMM register */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of loading SSE registers
|
||||||
|
+ in 32,64,128,256 and 512-bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of storing SSE registers
|
||||||
|
+ in 32,64,128,256 and 512-bit */
|
||||||
|
+ 6, 6, /* SSE->integer and integer->SSE moves */
|
||||||
|
+ 6, 6, /* mask->integer and integer->mask moves */
|
||||||
|
+ {6, 6, 6}, /* cost of loading mask register
|
||||||
|
+ in QImode, HImode, SImode. */
|
||||||
|
+ {6, 6, 6}, /* cost if storing mask register
|
||||||
|
+ in QImode, HImode, SImode. */
|
||||||
|
+ 2, /* cost of moving mask register. */
|
||||||
|
+ /* End of register allocator costs. */
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of an add instruction */
|
||||||
|
+ /* Setting cost to 2 makes our current implementation of synth_mult result in
|
||||||
|
+ use of unnecessary temporary registers causing regression on several
|
||||||
|
+ SPECfp benchmarks. */
|
||||||
|
+ COSTS_N_INSNS (1) + 1, /* cost of a lea instruction */
|
||||||
|
+ COSTS_N_INSNS (1), /* variable shift costs */
|
||||||
|
+ COSTS_N_INSNS (1), /* constant shift costs */
|
||||||
|
+ {COSTS_N_INSNS (3), /* cost of starting multiply for QI */
|
||||||
|
+ COSTS_N_INSNS (4), /* HI */
|
||||||
|
+ COSTS_N_INSNS (3), /* SI */
|
||||||
|
+ COSTS_N_INSNS (4), /* DI */
|
||||||
|
+ COSTS_N_INSNS (4)}, /* other */
|
||||||
|
+ 0, /* cost of multiply per each bit set */
|
||||||
|
+ {COSTS_N_INSNS (16), /* cost of a divide/mod for QI */
|
||||||
|
+ COSTS_N_INSNS (22), /* HI */
|
||||||
|
+ COSTS_N_INSNS (30), /* SI */
|
||||||
|
+ COSTS_N_INSNS (74), /* DI */
|
||||||
|
+ COSTS_N_INSNS (74)}, /* other */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of movsx */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of movzx */
|
||||||
|
+ 8, /* "large" insn */
|
||||||
|
+ 17, /* MOVE_RATIO */
|
||||||
|
+ 17, /* CLEAR_RATIO */
|
||||||
|
+ {6, 6, 6}, /* cost of loading integer registers
|
||||||
|
+ in QImode, HImode and SImode.
|
||||||
|
+ Relative to reg-reg move (2). */
|
||||||
|
+ {6, 6, 6}, /* cost of storing integer registers */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of loading SSE register
|
||||||
|
+ in 32bit, 64bit, 128bit, 256bit and 512bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of storing SSE register
|
||||||
|
+ in 32bit, 64bit, 128bit, 256bit and 512bit */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of unaligned loads. */
|
||||||
|
+ {6, 6, 6, 10, 15}, /* cost of unaligned storess. */
|
||||||
|
+ 2, 3, 4, /* cost of moving XMM,YMM,ZMM register */
|
||||||
|
+ 6, /* cost of moving SSE register to integer. */
|
||||||
|
+ 18, 6, /* Gather load static, per_elt. */
|
||||||
|
+ 18, 6, /* Gather store static, per_elt. */
|
||||||
|
+ 32, /* size of l1 cache. */
|
||||||
|
+ 512, /* size of l2 cache. */
|
||||||
|
+ 64, /* size of prefetch block */
|
||||||
|
+ 6, /* number of parallel prefetches */
|
||||||
|
+ /* Benchmarks shows large regressions on K8 sixtrack benchmark when this
|
||||||
|
+ value is increased to perhaps more appropriate value of 5. */
|
||||||
|
+ 3, /* Branch cost */
|
||||||
|
+ COSTS_N_INSNS (3), /* cost of FADD and FSUB insns. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMUL instruction. */
|
||||||
|
+ COSTS_N_INSNS (17), /* cost of FDIV instruction. */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of FABS instruction. */
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of FCHS instruction. */
|
||||||
|
+ COSTS_N_INSNS (14), /* cost of FSQRT instruction. */
|
||||||
|
+
|
||||||
|
+ COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */
|
||||||
|
+ COSTS_N_INSNS (3), /* cost of ADDSS/SD SUBSS/SD insns. */
|
||||||
|
+ COSTS_N_INSNS (4), /* cost of MULSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of MULSD instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMA SS instruction. */
|
||||||
|
+ COSTS_N_INSNS (5), /* cost of FMA SD instruction. */
|
||||||
|
+ COSTS_N_INSNS (13), /* cost of DIVSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (17), /* cost of DIVSD instruction. */
|
||||||
|
+ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */
|
||||||
|
+ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */
|
||||||
|
+ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */
|
||||||
|
+ tremont_memcpy,
|
||||||
|
+ tremont_memset,
|
||||||
|
+ COSTS_N_INSNS (4), /* cond_taken_branch_cost. */
|
||||||
|
+ COSTS_N_INSNS (2), /* cond_not_taken_branch_cost. */
|
||||||
|
+ "16:11:8", /* Loop alignment. */
|
||||||
|
+ "16:11:8", /* Jump alignment. */
|
||||||
|
+ "0:0:8", /* Label alignment. */
|
||||||
|
+ "16", /* Func alignment. */
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static stringop_algs intel_memcpy[2] = {
|
||||||
|
{libcall, {{11, loop, false}, {-1, rep_prefix_4_byte, false}}},
|
||||||
|
{libcall, {{32, loop, false}, {64, rep_prefix_4_byte, false},
|
||||||
|
diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
|
||||||
|
index 6bd7087a03f..636e0c788bf 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune.def
|
||||||
|
+++ b/gcc/config/i386/x86-tune.def
|
||||||
|
@@ -273,7 +273,7 @@ DEF_TUNE (X86_TUNE_SINGLE_STRINGOP, "single_stringop", m_386 | m_P4_NOCONA)
|
||||||
|
move/set sequences of bytes with known size. */
|
||||||
|
DEF_TUNE (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB,
|
||||||
|
"prefer_known_rep_movsb_stosb",
|
||||||
|
- m_SKYLAKE | m_ALDERLAKE | m_CORE_AVX512)
|
||||||
|
+ m_SKYLAKE | m_ALDERLAKE | m_TREMONT | m_CORE_AVX512)
|
||||||
|
|
||||||
|
/* X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES: Enable generation of
|
||||||
|
compact prologues and epilogues by issuing a misaligned moves. This
|
||||||
|
--
|
||||||
|
2.18.2
|
||||||
|
|
185
SOURCES/gcc11-tremont3.patch
Normal file
185
SOURCES/gcc11-tremont3.patch
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
From c4c7244349999f91ef2a7cd2108eee0372490be9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||||
|
Date: Wed, 15 Sep 2021 14:18:21 +0800
|
||||||
|
Subject: [PATCH 3/3] x86: Add TARGET_SSE_PARTIAL_REG_[FP_]CONVERTS_DEPENDENCY
|
||||||
|
|
||||||
|
1. Replace TARGET_SSE_PARTIAL_REG_DEPENDENCY with
|
||||||
|
TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY in SSE FP to FP splitters.
|
||||||
|
2. Replace TARGET_SSE_PARTIAL_REG_DEPENDENCY with
|
||||||
|
TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY in SSE INT to FP splitters.
|
||||||
|
|
||||||
|
gcc/
|
||||||
|
|
||||||
|
* config/i386/i386.h (TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY):
|
||||||
|
New.
|
||||||
|
(TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
|
||||||
|
* config/i386/i386.md (SSE FP to FP splitters): Replace
|
||||||
|
TARGET_SSE_PARTIAL_REG_DEPENDENCY with
|
||||||
|
TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY.
|
||||||
|
(SSE INT to FP splitter): Replace TARGET_SSE_PARTIAL_REG_DEPENDENCY
|
||||||
|
with TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY.
|
||||||
|
* config/i386/x86-tune.def
|
||||||
|
(X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY): New.
|
||||||
|
(X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
|
||||||
|
|
||||||
|
gcc/testsuite/
|
||||||
|
|
||||||
|
* gcc.target/i386/sse-covert-1.c: Likewise.
|
||||||
|
* gcc.target/i386/sse-fp-covert-1.c: Likewise.
|
||||||
|
* gcc.target/i386/sse-int-covert-1.c: Likewise.
|
||||||
|
---
|
||||||
|
gcc/config/i386/i386.h | 4 ++++
|
||||||
|
gcc/config/i386/i386.md | 9 ++++++---
|
||||||
|
gcc/config/i386/x86-tune.def | 15 +++++++++++++++
|
||||||
|
gcc/testsuite/gcc.target/i386/sse-covert-1.c | 19 +++++++++++++++++++
|
||||||
|
.../gcc.target/i386/sse-fp-covert-1.c | 15 +++++++++++++++
|
||||||
|
.../gcc.target/i386/sse-int-covert-1.c | 14 ++++++++++++++
|
||||||
|
6 files changed, 73 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gcc.target/i386/sse-covert-1.c
|
||||||
|
create mode 100644 gcc/testsuite/gcc.target/i386/sse-fp-covert-1.c
|
||||||
|
create mode 100644 gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
|
||||||
|
|
||||||
|
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
|
||||||
|
index 73e118900f7..5b992195df7 100644
|
||||||
|
--- a/gcc/config/i386/i386.h
|
||||||
|
+++ b/gcc/config/i386/i386.h
|
||||||
|
@@ -553,6 +553,10 @@ extern unsigned char ix86_tune_features[X86_TUNE_LAST];
|
||||||
|
ix86_tune_features[X86_TUNE_PARTIAL_REG_DEPENDENCY]
|
||||||
|
#define TARGET_SSE_PARTIAL_REG_DEPENDENCY \
|
||||||
|
ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY]
|
||||||
|
+#define TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY \
|
||||||
|
+ ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY]
|
||||||
|
+#define TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY \
|
||||||
|
+ ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY]
|
||||||
|
#define TARGET_SSE_UNALIGNED_LOAD_OPTIMAL \
|
||||||
|
ix86_tune_features[X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL]
|
||||||
|
#define TARGET_SSE_UNALIGNED_STORE_OPTIMAL \
|
||||||
|
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
|
||||||
|
index 97325e38676..053bec1c1e1 100644
|
||||||
|
--- a/gcc/config/i386/i386.md
|
||||||
|
+++ b/gcc/config/i386/i386.md
|
||||||
|
@@ -4378,7 +4378,8 @@
|
||||||
|
(float_extend:DF
|
||||||
|
(match_operand:SF 1 "nonimmediate_operand")))]
|
||||||
|
"!TARGET_AVX
|
||||||
|
- && TARGET_SSE_PARTIAL_REG_DEPENDENCY && epilogue_completed
|
||||||
|
+ && TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY
|
||||||
|
+ && epilogue_completed
|
||||||
|
&& optimize_function_for_speed_p (cfun)
|
||||||
|
&& (!REG_P (operands[1])
|
||||||
|
|| (!TARGET_AVX && REGNO (operands[0]) != REGNO (operands[1])))
|
||||||
|
@@ -4540,7 +4541,8 @@
|
||||||
|
(float_truncate:SF
|
||||||
|
(match_operand:DF 1 "nonimmediate_operand")))]
|
||||||
|
"!TARGET_AVX
|
||||||
|
- && TARGET_SSE_PARTIAL_REG_DEPENDENCY && epilogue_completed
|
||||||
|
+ && TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY
|
||||||
|
+ && epilogue_completed
|
||||||
|
&& optimize_function_for_speed_p (cfun)
|
||||||
|
&& (!REG_P (operands[1])
|
||||||
|
|| (!TARGET_AVX && REGNO (operands[0]) != REGNO (operands[1])))
|
||||||
|
@@ -5053,7 +5055,8 @@
|
||||||
|
[(set (match_operand:MODEF 0 "sse_reg_operand")
|
||||||
|
(float:MODEF (match_operand:SWI48 1 "nonimmediate_operand")))]
|
||||||
|
"!TARGET_AVX
|
||||||
|
- && TARGET_SSE_PARTIAL_REG_DEPENDENCY && epilogue_completed
|
||||||
|
+ && TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY
|
||||||
|
+ && epilogue_completed
|
||||||
|
&& optimize_function_for_speed_p (cfun)
|
||||||
|
&& (!EXT_REX_SSE_REG_P (operands[0])
|
||||||
|
|| TARGET_AVX512VL)"
|
||||||
|
diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
|
||||||
|
index 636e0c788bf..b5166fb1316 100644
|
||||||
|
--- a/gcc/config/i386/x86-tune.def
|
||||||
|
+++ b/gcc/config/i386/x86-tune.def
|
||||||
|
@@ -64,6 +64,21 @@ DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, "sse_partial_reg_dependency",
|
||||||
|
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
| m_BDVER | m_ZNVER | m_TREMONT | m_GENERIC)
|
||||||
|
|
||||||
|
+/* X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY: This knob avoids
|
||||||
|
+ partial write to the destination in scalar SSE conversion from FP
|
||||||
|
+ to FP. */
|
||||||
|
+DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY,
|
||||||
|
+ "sse_partial_reg_fp_converts_dependency",
|
||||||
|
+ m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
+ | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+
|
||||||
|
+/* X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY: This knob avoids partial
|
||||||
|
+ write to the destination in scalar SSE conversion from integer to FP. */
|
||||||
|
+DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY,
|
||||||
|
+ "sse_partial_reg_converts_dependency",
|
||||||
|
+ m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10
|
||||||
|
+ | m_BDVER | m_ZNVER | m_GENERIC)
|
||||||
|
+
|
||||||
|
/* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
|
||||||
|
are resolved on SSE register parts instead of whole registers, so we may
|
||||||
|
maintain just lower part of scalar values in proper format leaving the
|
||||||
|
diff --git a/gcc/testsuite/gcc.target/i386/sse-covert-1.c b/gcc/testsuite/gcc.target/i386/sse-covert-1.c
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..c30af694505
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gcc.target/i386/sse-covert-1.c
|
||||||
|
@@ -0,0 +1,19 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O2 -march=x86-64 -mfpmath=sse -mtune-ctrl=^sse_partial_reg_fp_converts_dependency,^sse_partial_reg_converts_dependency" } */
|
||||||
|
+
|
||||||
|
+extern float f;
|
||||||
|
+extern double d;
|
||||||
|
+extern int i;
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (void)
|
||||||
|
+{
|
||||||
|
+ d = f;
|
||||||
|
+ f = i;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* { dg-final { scan-assembler "cvtss2sd" } } */
|
||||||
|
+/* { dg-final { scan-assembler "cvtsi2ssl" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "cvtps2pd" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "cvtdq2ps" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "pxor" } } */
|
||||||
|
diff --git a/gcc/testsuite/gcc.target/i386/sse-fp-covert-1.c b/gcc/testsuite/gcc.target/i386/sse-fp-covert-1.c
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..b6567e60e3e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gcc.target/i386/sse-fp-covert-1.c
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O2 -march=x86-64 -mfpmath=sse -mtune-ctrl=^sse_partial_reg_fp_converts_dependency" } */
|
||||||
|
+
|
||||||
|
+extern float f;
|
||||||
|
+extern double d;
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (void)
|
||||||
|
+{
|
||||||
|
+ d = f;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* { dg-final { scan-assembler "cvtss2sd" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "cvtps2pd" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "pxor" } } */
|
||||||
|
diff --git a/gcc/testsuite/gcc.target/i386/sse-int-covert-1.c b/gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..107f7241def
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
|
||||||
|
@@ -0,0 +1,14 @@
|
||||||
|
+/* { dg-do compile } */
|
||||||
|
+/* { dg-options "-O2 -march=x86-64 -mfpmath=sse -mtune-ctrl=^sse_partial_reg_converts_dependency" } */
|
||||||
|
+
|
||||||
|
+extern float f;
|
||||||
|
+extern int i;
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+foo (void)
|
||||||
|
+{
|
||||||
|
+ f = i;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* { dg-final { scan-assembler "cvtsi2ssl" } } */
|
||||||
|
+/* { dg-final { scan-assembler-not "pxor" } } */
|
||||||
|
--
|
||||||
|
2.18.2
|
||||||
|
|
163
SPECS/gcc.spec
163
SPECS/gcc.spec
@ -2,13 +2,13 @@
|
|||||||
%{?scl:%global __strip %%{_scl_root}/usr/bin/strip}
|
%{?scl:%global __strip %%{_scl_root}/usr/bin/strip}
|
||||||
%{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump}
|
%{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump}
|
||||||
%{?scl:%scl_package gcc}
|
%{?scl:%scl_package gcc}
|
||||||
%global DATE 20210728
|
%global DATE 20220127
|
||||||
%global gitrev 134ab8155c937122663513b76afa8e64ad61fe99
|
%global gitrev 2fa6e5c54e782377faa4c9c1f0e0b16db27f266c
|
||||||
%global gcc_version 11.2.1
|
%global gcc_version 11.2.1
|
||||||
%global gcc_major 11
|
%global gcc_major 11
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %%{release}, append them after %%{gcc_release} on Release: line.
|
# %%{release}, append them after %%{gcc_release} on Release: line.
|
||||||
%global gcc_release 1
|
%global gcc_release 9
|
||||||
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
|
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
|
||||||
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
|
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
|
||||||
%global mpc_version 1.0.3
|
%global mpc_version 1.0.3
|
||||||
@ -18,6 +18,7 @@
|
|||||||
%global doxygen_version 1.8.0
|
%global doxygen_version 1.8.0
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
||||||
|
# Until annobin is fixed (#1519165).
|
||||||
%undefine _annotated_build
|
%undefine _annotated_build
|
||||||
%endif
|
%endif
|
||||||
# Strip will fail on nvptx-none *.a archives and the brp-* scripts will
|
# Strip will fail on nvptx-none *.a archives and the brp-* scripts will
|
||||||
@ -28,7 +29,11 @@
|
|||||||
%if 0%{?__brp_strip_lto:1}
|
%if 0%{?__brp_strip_lto:1}
|
||||||
%global __brp_strip_lto %{__brp_strip_lto} || :
|
%global __brp_strip_lto %{__brp_strip_lto} || :
|
||||||
%endif
|
%endif
|
||||||
|
%if 0%{?fedora} < 32 && 0%{?rhel} < 8
|
||||||
|
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
|
||||||
|
%else
|
||||||
%global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64
|
%global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64
|
||||||
|
%endif
|
||||||
%if 0%{?rhel} > 7
|
%if 0%{?rhel} > 7
|
||||||
%global build_ada 0
|
%global build_ada 0
|
||||||
%global build_objc 0
|
%global build_objc 0
|
||||||
@ -193,7 +198,7 @@ BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man
|
|||||||
#BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 3.1.0, libmpc-devel >= 0.8.1
|
#BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 3.1.0, libmpc-devel >= 0.8.1
|
||||||
#BuildRequires: python3-devel, /usr/bin/python
|
#BuildRequires: python3-devel, /usr/bin/python
|
||||||
BuildRequires: gcc, gcc-c++, make
|
BuildRequires: gcc, gcc-c++, make
|
||||||
%if 0%{?rhel} <= 7
|
%if 0%{?rhel} == 7
|
||||||
BuildRequires: python3
|
BuildRequires: python3
|
||||||
%endif
|
%endif
|
||||||
# For VTA guality testing
|
# For VTA guality testing
|
||||||
@ -333,6 +338,12 @@ Patch9: gcc11-foffload-default.patch
|
|||||||
Patch10: gcc11-Wno-format-security.patch
|
Patch10: gcc11-Wno-format-security.patch
|
||||||
Patch11: gcc11-rh1574936.patch
|
Patch11: gcc11-rh1574936.patch
|
||||||
Patch12: gcc11-d-shared-libphobos.patch
|
Patch12: gcc11-d-shared-libphobos.patch
|
||||||
|
Patch14: gcc11-libgcc-link.patch
|
||||||
|
Patch15: gcc11-pr101786.patch
|
||||||
|
Patch16: gcc11-stringify-__VA_OPT__.patch
|
||||||
|
Patch17: gcc11-stringify-__VA_OPT__-2.patch
|
||||||
|
Patch18: gcc11-Wbidi-chars.patch
|
||||||
|
Patch19: gcc11-dejagnu-multiline.patch
|
||||||
|
|
||||||
Patch100: gcc11-fortran-fdec-duplicates.patch
|
Patch100: gcc11-fortran-fdec-duplicates.patch
|
||||||
Patch101: gcc11-fortran-flogical-as-integer.patch
|
Patch101: gcc11-fortran-flogical-as-integer.patch
|
||||||
@ -345,6 +356,11 @@ Patch107: gcc11-fortran-fdec-promotion.patch
|
|||||||
Patch108: gcc11-fortran-fdec-sequence.patch
|
Patch108: gcc11-fortran-fdec-sequence.patch
|
||||||
Patch109: gcc11-fortran-fdec-add-missing-indexes.patch
|
Patch109: gcc11-fortran-fdec-add-missing-indexes.patch
|
||||||
|
|
||||||
|
Patch200: gcc11-tremont1.patch
|
||||||
|
Patch201: gcc11-tremont2.patch
|
||||||
|
Patch202: gcc11-tremont3.patch
|
||||||
|
Patch203: gcc11-mtune-alderlake.patch
|
||||||
|
|
||||||
Patch1000: gcc11-libstdc++-compat.patch
|
Patch1000: gcc11-libstdc++-compat.patch
|
||||||
Patch1001: gcc11-alt-compat-test.patch
|
Patch1001: gcc11-alt-compat-test.patch
|
||||||
Patch1002: gcc11-libgfortran-compat.patch
|
Patch1002: gcc11-libgfortran-compat.patch
|
||||||
@ -353,6 +369,22 @@ Patch2001: doxygen-1.7.1-config.patch
|
|||||||
Patch2002: doxygen-1.7.5-timestamp.patch
|
Patch2002: doxygen-1.7.5-timestamp.patch
|
||||||
Patch2003: doxygen-1.8.0-rh856725.patch
|
Patch2003: doxygen-1.8.0-rh856725.patch
|
||||||
|
|
||||||
|
Patch3000: 0001-basic_string-reserve-n-semantics-are-not-available-i.patch
|
||||||
|
Patch3001: 0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch
|
||||||
|
Patch3002: 0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch
|
||||||
|
Patch3003: 0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch
|
||||||
|
Patch3004: 0008-testsuite-build-plugins-with-std-c-11.patch
|
||||||
|
Patch3005: 0009-Fix-22_locale-locale-cons-unicode.cc-when-run-under-.patch
|
||||||
|
Patch3006: 0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch
|
||||||
|
Patch3007: 0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch
|
||||||
|
Patch3008: 0012-dts.exp-use-usr-bin-gcc.patch
|
||||||
|
Patch3009: 0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch
|
||||||
|
Patch3010: 0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch
|
||||||
|
Patch3011: 0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch
|
||||||
|
Patch3012: 0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch
|
||||||
|
Patch3013: 0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch
|
||||||
|
Patch3014: gcc11-dg-ice-fixes.patch
|
||||||
|
|
||||||
%if 0%{?rhel} > 7
|
%if 0%{?rhel} > 7
|
||||||
%global nonsharedver 80
|
%global nonsharedver 80
|
||||||
%else
|
%else
|
||||||
@ -681,6 +713,12 @@ to NVidia PTX capable devices if available.
|
|||||||
%patch11 -p0 -b .rh1574936~
|
%patch11 -p0 -b .rh1574936~
|
||||||
%endif
|
%endif
|
||||||
%patch12 -p0 -b .d-shared-libphobos~
|
%patch12 -p0 -b .d-shared-libphobos~
|
||||||
|
%patch14 -p0 -b .libgcc-link~
|
||||||
|
%patch15 -p0 -b .pr101786~
|
||||||
|
%patch16 -p0 -b .stringify-__VA_OPT__~
|
||||||
|
%patch17 -p0 -b .stringify-__VA_OPT__-2~
|
||||||
|
%patch18 -p1 -b .bidi~
|
||||||
|
%patch19 -p1 -b .dejagnu-multiline~
|
||||||
|
|
||||||
%patch100 -p1 -b .fortran-fdec-duplicates~
|
%patch100 -p1 -b .fortran-fdec-duplicates~
|
||||||
%patch101 -p1 -b .fortran-flogical-as-integer~
|
%patch101 -p1 -b .fortran-flogical-as-integer~
|
||||||
@ -693,6 +731,11 @@ to NVidia PTX capable devices if available.
|
|||||||
%patch108 -p1 -b .fortran-fdec-sequence~
|
%patch108 -p1 -b .fortran-fdec-sequence~
|
||||||
%patch109 -p1 -b .fortran-fdec-add-missing-indexes~
|
%patch109 -p1 -b .fortran-fdec-add-missing-indexes~
|
||||||
|
|
||||||
|
%patch200 -p1 -b .tremont1~
|
||||||
|
%patch201 -p1 -b .tremont2~
|
||||||
|
%patch202 -p1 -b .tremont3~
|
||||||
|
%patch203 -p1 -b .alderlake~
|
||||||
|
|
||||||
%patch1000 -p0 -b .libstdc++-compat~
|
%patch1000 -p0 -b .libstdc++-compat~
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
%if 0%{?rhel} < 7
|
%if 0%{?rhel} < 7
|
||||||
@ -713,6 +756,22 @@ cd ..
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# Apply DTS-specific testsuite patches.
|
||||||
|
%patch3000 -p1 -b .dts-test-0~
|
||||||
|
%patch3001 -p1 -b .dts-test-1~
|
||||||
|
%patch3002 -p1 -b .dts-test-2~
|
||||||
|
%patch3003 -p1 -b .dts-test-3~
|
||||||
|
%patch3004 -p1 -b .dts-test-4~
|
||||||
|
%patch3005 -p1 -b .dts-test-5~
|
||||||
|
%patch3006 -p1 -b .dts-test-6~
|
||||||
|
%patch3007 -p1 -b .dts-test-7~
|
||||||
|
%patch3008 -p1 -b .dts-test-8~
|
||||||
|
%patch3009 -p1 -b .dts-test-9~
|
||||||
|
%patch3010 -p1 -b .dts-test-10~
|
||||||
|
%patch3011 -p1 -b .dts-test-11~
|
||||||
|
%patch3012 -p1 -b .dts-test-12~
|
||||||
|
%patch3013 -p1 -b .dts-test-13~
|
||||||
|
%patch3014 -p1 -b .dts-test-14~
|
||||||
|
|
||||||
find gcc/testsuite -name \*.pr96939~ | xargs rm -f
|
find gcc/testsuite -name \*.pr96939~ | xargs rm -f
|
||||||
|
|
||||||
@ -1050,7 +1109,7 @@ CONFIGURE_OPTS="\
|
|||||||
%ifnarch sparc sparcv9 ppc
|
%ifnarch sparc sparcv9 ppc
|
||||||
--build=%{gcc_target_platform} \
|
--build=%{gcc_target_platform} \
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?fedora} >= 35
|
%if 0%{?fedora} >= 35 || 0%{?rhel} >= 9
|
||||||
%ifarch x86_64 %{ix86} ppc64le s390x
|
%ifarch x86_64 %{ix86} ppc64le s390x
|
||||||
--with-build-config=bootstrap-lto --enable-link-serialization=1 \
|
--with-build-config=bootstrap-lto --enable-link-serialization=1 \
|
||||||
%endif
|
%endif
|
||||||
@ -1066,9 +1125,9 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
|
|||||||
$CONFIGURE_OPTS
|
$CONFIGURE_OPTS
|
||||||
|
|
||||||
%ifarch sparc sparcv9 sparc64
|
%ifarch sparc sparcv9 sparc64
|
||||||
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
|
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now bootstrap
|
||||||
%else
|
%else
|
||||||
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
|
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now profiledbootstrap
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?rhel} <= 8
|
%if 0%{?rhel} <= 8
|
||||||
@ -1782,7 +1841,8 @@ ln -sf lib64/libasan_preinit.o libasan_preinit.o
|
|||||||
%endif
|
%endif
|
||||||
%if %{build_libubsan}
|
%if %{build_libubsan}
|
||||||
ln -sf ../lib32/libubsan.a 32/libubsan.a
|
ln -sf ../lib32/libubsan.a 32/libubsan.a
|
||||||
ln -sf lib64/libubsan.a libubsan.a
|
# BZ #2027391
|
||||||
|
mv -f lib64/libubsan.a libubsan.a
|
||||||
%endif
|
%endif
|
||||||
%else
|
%else
|
||||||
%ifarch %{multilib_64_archs}
|
%ifarch %{multilib_64_archs}
|
||||||
@ -2286,6 +2346,7 @@ fi
|
|||||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/hresetintrin.h
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/hresetintrin.h
|
||||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/keylockerintrin.h
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/keylockerintrin.h
|
||||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avxvnniintrin.h
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avxvnniintrin.h
|
||||||
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/mwaitintrin.h
|
||||||
%endif
|
%endif
|
||||||
%ifarch ia64
|
%ifarch ia64
|
||||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ia64intrin.h
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ia64intrin.h
|
||||||
@ -2831,6 +2892,92 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 2 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9.1
|
||||||
|
- avoid overly-greedy match in dejagnu regexp (#2049712)
|
||||||
|
|
||||||
|
* Fri Jan 28 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9
|
||||||
|
- update from releases/gcc-11-branch (#2047286)
|
||||||
|
- PRs fortran/104127, fortran/104212, fortran/104227, target/101529
|
||||||
|
- fix up va-opt-6.c testcase
|
||||||
|
|
||||||
|
* Fri Jan 28 2022 Marek Polacek <polacek@redhat.com> 11.2.1-8
|
||||||
|
- update from releases/gcc-11-branch (#2047286)
|
||||||
|
- PRs ada/103538, analyzer/101962, bootstrap/103688, c++/85846, c++/95009,
|
||||||
|
c++/98394, c++/99911, c++/100493, c++/101715, c++/102229, c++/102933,
|
||||||
|
c++/103012, c++/103198, c++/103480, c++/103703, c++/103714,
|
||||||
|
c++/103758, c++/103783, c++/103831, c++/103912, c++/104055, c/97548,
|
||||||
|
c/101289, c/101537, c/103587, c/103881, d/103604, debug/103838,
|
||||||
|
debug/103874, fortran/67804, fortran/83079, fortran/101329,
|
||||||
|
fortran/101762, fortran/102332, fortran/102717, fortran/102787,
|
||||||
|
fortran/103411, fortran/103412, fortran/103418, fortran/103473,
|
||||||
|
fortran/103505, fortran/103588, fortran/103591, fortran/103606,
|
||||||
|
fortran/103607, fortran/103609, fortran/103610, fortran/103692,
|
||||||
|
fortran/103717, fortran/103718, fortran/103719, fortran/103776,
|
||||||
|
fortran/103777, fortran/103778, fortran/103782, fortran/103789,
|
||||||
|
ipa/101354, jit/103562, libfortran/103634, libstdc++/100017,
|
||||||
|
libstdc++/102994, libstdc++/103453, libstdc++/103501,
|
||||||
|
libstdc++/103549, libstdc++/103877, libstdc++/103919,
|
||||||
|
middle-end/101751, middle-end/102860, middle-end/103813, objc/103639,
|
||||||
|
preprocessor/89971, preprocessor/102432, rtl-optimization/102478,
|
||||||
|
rtl-optimization/103837, rtl-optimization/103860,
|
||||||
|
rtl-optimization/103908, sanitizer/102911, target/102347,
|
||||||
|
target/103465, target/103661, target/104172, target/104188,
|
||||||
|
tree-optimization/101615, tree-optimization/103523,
|
||||||
|
tree-optimization/103603, tree-optimization/103995
|
||||||
|
|
||||||
|
* Wed Jan 5 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.2
|
||||||
|
- fix dg-ice tests (#2037072)
|
||||||
|
|
||||||
|
* Fri Dec 10 2021 Marek Polacek <polacek@redhat.com> 11.2.1-7.1
|
||||||
|
- update Intel Tremont tuning patches (#2014276)
|
||||||
|
- backport Intel Alderlake tuning (#2023553)
|
||||||
|
|
||||||
|
* Tue Dec 7 2021 Marek Polacek <polacek@redhat.com> 11.2.1-7
|
||||||
|
- update from releases/gcc-11-branch (#1996862)
|
||||||
|
- PRs ada/100486, c++/70796, c++/92746, c++/93286, c++/94490, c++/102642,
|
||||||
|
c++/102786, debug/101378, debug/103046, debug/103315, fortran/87711,
|
||||||
|
fortran/87851, fortran/97896, fortran/99061, fortran/99348,
|
||||||
|
fortran/102521, fortran/102685, fortran/102715, fortran/102745,
|
||||||
|
fortran/102816, fortran/102817, fortran/102917, fortran/103137,
|
||||||
|
fortran/103138, fortran/103392, gcov-profile/100520, ipa/102714,
|
||||||
|
ipa/102762, ipa/103052, ipa/103246, ipa/103267, libstdc++/96416,
|
||||||
|
libstdc++/98421, libstdc++/100117, libstdc++/100153, libstdc++/100748,
|
||||||
|
libstdc++/101571, libstdc++/101608, libstdc++/102894,
|
||||||
|
libstdc++/103022, libstdc++/103086, libstdc++/103133,
|
||||||
|
libstdc++/103240, libstdc++/103381, middle-end/64888,
|
||||||
|
middle-end/101480, middle-end/102431, middle-end/102518,
|
||||||
|
middle-end/103059, middle-end/103181, middle-end/103248,
|
||||||
|
middle-end/103384, preprocessor/103130, rtl-optimization/102356,
|
||||||
|
rtl-optimization/102842, target/101985, target/102976, target/102991,
|
||||||
|
target/103205, target/103274, target/103275, testsuite/102690,
|
||||||
|
tree-optimization/100393, tree-optimization/102139,
|
||||||
|
tree-optimization/102505, tree-optimization/102572,
|
||||||
|
tree-optimization/102788, tree-optimization/102789,
|
||||||
|
tree-optimization/102798, tree-optimization/102970,
|
||||||
|
tree-optimization/103192, tree-optimization/103204,
|
||||||
|
tree-optimization/103237, tree-optimization/103255,
|
||||||
|
tree-optimization/103435
|
||||||
|
- fix up #__VA_OPT__ handling (PR preprocessor/103415)
|
||||||
|
|
||||||
|
* Wed Nov 17 2021 Marek Polacek <polacek@redhat.com> 11.2.1-6.3
|
||||||
|
- backport Intel Tremont tuning (#2014276)
|
||||||
|
|
||||||
|
* Wed Nov 17 2021 Marek Polacek <polacek@redhat.com> 11.2.1-6.2
|
||||||
|
- drop -Wbidirectional patch, use newer -Wbidi-chars (#2017820)
|
||||||
|
|
||||||
|
* Fri Oct 29 2021 Marek Polacek <polacek@redhat.com> 11.2.1-6.1
|
||||||
|
- add -Wbidirectional patch (#2017820)
|
||||||
|
|
||||||
|
* Tue Oct 26 2021 Marek Polacek <polacek@redhat.com> 11.2.1-6
|
||||||
|
- update from releases/gcc-11-branch (#1996862)
|
||||||
|
- PRs target/100208, target/100316, target/102761
|
||||||
|
- build target shared libraries with -Wl,-z,relro,-z,now
|
||||||
|
- add mwaitintrin.h on x86 (#2013860)
|
||||||
|
- improve generated code with extern thread_local constinit vars
|
||||||
|
with trivial dtors
|
||||||
|
- add support for C++20 #__VA_OPT__
|
||||||
|
- apply DTS-specific testsuite patches (#1996085)
|
||||||
|
|
||||||
* Tue Aug 17 2021 Marek Polacek <polacek@redhat.com> 11.2.1-1.1
|
* Tue Aug 17 2021 Marek Polacek <polacek@redhat.com> 11.2.1-1.1
|
||||||
- add .hidden for _ZNSt10filesystem9_Dir_base7advanceEbRSt10error_code
|
- add .hidden for _ZNSt10filesystem9_Dir_base7advanceEbRSt10error_code
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user