commit: b15b261d1b08f083920d0af5e3640d8ab620302a Author: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> AuthorDate: Fri Sep 20 23:12:19 2019 +0000 Commit: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> CommitDate: Fri Sep 20 23:12:19 2019 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=b15b261d
8.3.0: backport PR91269 (sparc subreg regression) Bug: https://gcc.gnu.org/PR91269 Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org> 8.3.0/gentoo/31_all_sparc-fpu-subregs-91269.patch | 105 ++++++++++++++++++++++ 8.3.0/gentoo/README.history | 1 + 2 files changed, 106 insertions(+) diff --git a/8.3.0/gentoo/31_all_sparc-fpu-subregs-91269.patch b/8.3.0/gentoo/31_all_sparc-fpu-subregs-91269.patch new file mode 100644 index 0000000..e21d07d --- /dev/null +++ b/8.3.0/gentoo/31_all_sparc-fpu-subregs-91269.patch @@ -0,0 +1,105 @@ +https://gcc.gnu.org/PR91269 + +From bebaf06774baca584c7e9f8410d0e49606a11d60 Mon Sep 17 00:00:00 2001 +From: ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Fri, 20 Sep 2019 09:42:40 +0000 +Subject: [PATCH] PR target/91269 * config/sparc/sparc.h + (HARD_REGNO_CALLER_SAVE_MODE): Define. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@275994 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/config/sparc/sparc.h | 7 ++++ + gcc/testsuite/gcc.dg/pr91269.c | 70 ++++++++++++++++++++++++++++++++++ + +--- a/gcc/config/sparc/sparc.h ++++ b/gcc/config/sparc/sparc.h +@@ -711,6 +711,13 @@ along with GCC; see the file COPYING3. If not see + register window instruction in the prologue. */ + #define HARD_REGNO_RENAME_OK(FROM, TO) ((FROM) != 1) + ++/* Select a register mode required for caller save of hard regno REGNO. ++ Contrary to what is documented, the default is not the smallest suitable ++ mode but the largest suitable mode for the given (REGNO, NREGS) pair and ++ it quickly creates paradoxical subregs that can be problematic. */ ++#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \ ++ ((MODE) == VOIDmode ? choose_hard_reg_mode (REGNO, NREGS, false) : (MODE)) ++ + /* Specify the registers used for certain standard purposes. + The values of these macros are register numbers. */ + +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/pr91269.c +@@ -0,0 +1,70 @@ ++/* PR target/91269 */ ++/* Testcase by Sergei Trofimovich <sly...@inbox.ru> */ ++ ++/* { dg-do assemble } */ ++/* { dg-options "-O2 -Wno-int-conversion" } */ ++/* { dg-additional-options "-fcall-used-g6 -fPIE -mcpu=niagara4" { target sparc*-*-* } } */ ++ ++struct m; ++ ++enum { a = 2 }; ++int b[1]; ++int d[2715]; ++int e, f, h; ++enum { i = 2 } j; ++inline int c(int k) { ++ char *cp; ++ if (k >= 62 && k <= 247) ++ cp = b[k]; ++ if (cp) ++ return 65533; ++ return 2; ++} ++inline int g(int k) { ++ if (k < sizeof(d)) ++ return e; ++ return 0; ++} ++ ++int u(struct m*, char*, char*); ++ ++int l(struct m *k, char n, long o, int *p) { ++ int q, flags = j, r, s, lasttwo = *p; ++ char inptr, outptr; ++ while (inptr) { ++ if (__builtin_expect(h, 0)) ++ break; ++ unsigned ch = inptr; ++ if (lasttwo) { ++ long need = lasttwo >> 3; ++ if (__builtin_expect(need > n, 0)) ++ break; ++ } else if (s == i) { ++ long t = c(ch); ++ if (t != 65533) { ++ int jch = g(ch); ++ if (jch & 8) ++ continue; ++ } ++ } ++ if (ch <= 5) ++ ; ++ else { ++ long t = c(ch); ++ if (t != 65533) ++ ; ++ else { ++ switch (f >> 8) ++ case 79: ++ q = f == 20308 || f == 20350; ++ if (q) ++ if (j) ++ r = u(k, &inptr, &outptr); ++ s = *p; ++ if (r) ++ if (o && flags & a) ++ break; ++ } ++ } ++ } ++} +-- +2.23.0 + diff --git a/8.3.0/gentoo/README.history b/8.3.0/gentoo/README.history index 68b1fd8..3400182 100644 --- a/8.3.0/gentoo/README.history +++ b/8.3.0/gentoo/README.history @@ -1,6 +1,7 @@ 1.2 TODO + 29_all_ia64-bootstrap.patch + 30_all_sparc-PIC-constant-PR91472.patch + + 31_all_sparc-fpu-subregs-91269.patch 1.1 06 Apr 2019 + 26_all_overridable_native.patch