diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2019-09-21 00:12:19 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2019-09-21 00:12:19 +0100 |
commit | b15b261d1b08f083920d0af5e3640d8ab620302a (patch) | |
tree | 7660170e3d3584281d073a267fd42d770b03fb98 /8.3.0 | |
parent | 9.2.0: packport PR91269 (sparc subreg regression) (diff) | |
download | gcc-patches-b15b261d1b08f083920d0af5e3640d8ab620302a.tar.gz gcc-patches-b15b261d1b08f083920d0af5e3640d8ab620302a.tar.bz2 gcc-patches-b15b261d1b08f083920d0af5e3640d8ab620302a.zip |
8.3.0: backport PR91269 (sparc subreg regression)
Bug: https://gcc.gnu.org/PR91269
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to '8.3.0')
-rw-r--r-- | 8.3.0/gentoo/31_all_sparc-fpu-subregs-91269.patch | 105 | ||||
-rw-r--r-- | 8.3.0/gentoo/README.history | 1 |
2 files changed, 106 insertions, 0 deletions
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 <slyfox@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 |