re PR rtl-optimization/92176 (LRA problem with reloads for subreg operands)
2019-12-06 Andreas Krebbel <krebbel@linux.ibm.com> Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92176 * lra.c (simplify_subreg_regno): Don't permit unconditional changing mode for LRA too. 2019-12-06 Andreas Krebbel <krebbel@linux.ibm.com> Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92176 * gcc.target/s390/pr92176.c: New test. Co-Authored-By: Vladimir Makarov <vmakarov@redhat.com> From-SVN: r279061
This commit is contained in:
parent
3ad4a03ac6
commit
1a880ef211
@ -1,3 +1,10 @@
|
||||
2019-12-06 Andreas Krebbel <krebbel@linux.ibm.com>
|
||||
Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/92176
|
||||
* lra.c (simplify_subreg_regno): Don't permit unconditional
|
||||
changing mode for LRA too.
|
||||
|
||||
2019-12-06 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* target.h (TCTX_ALLOCATION, TCTX_DEALLOCATION, TCTX_EXCEPTIONS)
|
||||
|
@ -3951,9 +3951,7 @@ simplify_subreg_regno (unsigned int xregno, machine_mode xmode,
|
||||
/* Give the backend a chance to disallow the mode change. */
|
||||
if (GET_MODE_CLASS (xmode) != MODE_COMPLEX_INT
|
||||
&& GET_MODE_CLASS (xmode) != MODE_COMPLEX_FLOAT
|
||||
&& !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode)
|
||||
/* We can use mode change in LRA for some transformations. */
|
||||
&& ! lra_in_progress)
|
||||
&& !REG_CAN_CHANGE_MODE_P (xregno, xmode, ymode))
|
||||
return -1;
|
||||
|
||||
/* We shouldn't simplify stack-related registers. */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2019-12-06 Andreas Krebbel <krebbel@linux.ibm.com>
|
||||
Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/92176
|
||||
* gcc.target/s390/pr92176.c: New test.
|
||||
|
||||
2019-12-06 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
* gcc.dg/Wstringop-overflow-23.c: Use the correct argument type.
|
||||
|
33
gcc/testsuite/gcc.target/s390/pr92176.c
Normal file
33
gcc/testsuite/gcc.target/s390/pr92176.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -march=z13 -mzarch" } */
|
||||
|
||||
int a = 5, b, c, d, g, h, k, l, m, o;
|
||||
static int e[7];
|
||||
int *volatile i = &d;
|
||||
long long j;
|
||||
|
||||
short p(int f, int dummy) {
|
||||
k = 0 != (*e = m);
|
||||
j = 0;
|
||||
for (; j < 59; j = j + 1)
|
||||
*i |= b;
|
||||
g = 1;
|
||||
for (; g <= 4; g++) {
|
||||
o = 0;
|
||||
for (; o <= 4; o++)
|
||||
i = (int * volatile)(long)l;
|
||||
}
|
||||
return 42;
|
||||
}
|
||||
|
||||
void
|
||||
q() {
|
||||
char *n = (char*)&b;
|
||||
|
||||
(*n = a) == p(e[6], c);
|
||||
for (; h;)
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not {(?n)^\tvsteb\t.+,0$} } } */
|
Loading…
Reference in New Issue
Block a user