Message ID | 5A39453D.5080906@foss.arm.com |
---|---|
State | New |
Headers | show |
Series | [arm] PR target/82975: Guard against reg_renumber being NULL in arm.h | expand |
On Tue, Dec 19, 2017 at 04:58:37PM +0000, Kyrill Tkachov wrote: > 2017-12-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com> > > PR target/82975 > * gcc.dg/pr82975.c: New test. The testcase FAILs on x86_64-linux/i686-linux and probably on all non-arm/aarch64 targets. Fixed thusly, committed to trunk as obvious. 2017-12-19 Jakub Jelinek <jakub@redhat.com> PR target/82975 * gcc.dg/pr82975.c: Only add -mtune=cortex-a57 on arm*/aarch64* targets. --- gcc/testsuite/gcc.dg/pr82975.c.jj 2017-12-19 18:07:33.000000000 +0100 +++ gcc/testsuite/gcc.dg/pr82975.c 2017-12-19 22:53:36.383901451 +0100 @@ -1,6 +1,7 @@ /* PR target/82975. */ /* { dg-do compile } */ -/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" } */ +/* { dg-options "-fno-sched-pressure -O2" } */ +/* { dg-additional-options "-mtune=cortex-a57" { target arm*-*-* aarch64*-*-* } } */ typedef __SIZE_TYPE__ size_t; Jakub
On 19/12/17 21:56, Jakub Jelinek wrote: > On Tue, Dec 19, 2017 at 04:58:37PM +0000, Kyrill Tkachov wrote: >> 2017-12-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com> >> >> PR target/82975 >> * gcc.dg/pr82975.c: New test. > The testcase FAILs on x86_64-linux/i686-linux and probably on all > non-arm/aarch64 targets. > > Fixed thusly, committed to trunk as obvious. Thank you for fixing this. I had committed an older version of the testcase accidentally :( My proper testcase did have the target guard. Kyrill > 2017-12-19 Jakub Jelinek <jakub@redhat.com> > > PR target/82975 > * gcc.dg/pr82975.c: Only add -mtune=cortex-a57 on arm*/aarch64* > targets. > > --- gcc/testsuite/gcc.dg/pr82975.c.jj 2017-12-19 18:07:33.000000000 +0100 > +++ gcc/testsuite/gcc.dg/pr82975.c 2017-12-19 22:53:36.383901451 +0100 > @@ -1,6 +1,7 @@ > /* PR target/82975. */ > /* { dg-do compile } */ > -/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" } */ > +/* { dg-options "-fno-sched-pressure -O2" } */ > +/* { dg-additional-options "-mtune=cortex-a57" { target arm*-*-* aarch64*-*-* } } */ > > typedef __SIZE_TYPE__ size_t; > > > Jakub
On 20/12/17 09:22, Kyrill Tkachov wrote: > > On 19/12/17 21:56, Jakub Jelinek wrote: > > On Tue, Dec 19, 2017 at 04:58:37PM +0000, Kyrill Tkachov wrote: > >> 2017-12-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com> > >> > >> PR target/82975 > >> * gcc.dg/pr82975.c: New test. > > The testcase FAILs on x86_64-linux/i686-linux and probably on all > > non-arm/aarch64 targets. > > > > Fixed thusly, committed to trunk as obvious. > > Thank you for fixing this. I had committed an older version of the > testcase accidentally :( > My proper testcase did have the target guard. > In fact, here is the patch I meant to commit. Committed the missing comment change to arm.h. Kyrill > Kyrill > > > 2017-12-19 Jakub Jelinek <jakub@redhat.com> > > > > PR target/82975 > > * gcc.dg/pr82975.c: Only add -mtune=cortex-a57 on arm*/aarch64* > > targets. > > > > --- gcc/testsuite/gcc.dg/pr82975.c.jj 2017-12-19 18:07:33.000000000 > +0100 > > +++ gcc/testsuite/gcc.dg/pr82975.c 2017-12-19 22:53:36.383901451 > +0100 > > @@ -1,6 +1,7 @@ > > /* PR target/82975. */ > > /* { dg-do compile } */ > > -/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" } */ > > +/* { dg-options "-fno-sched-pressure -O2" } */ > > +/* { dg-additional-options "-mtune=cortex-a57" { target arm*-*-* > aarch64*-*-* } } */ > > > > typedef __SIZE_TYPE__ size_t; > > > > > > Jakub > commit d0469b43a85de253444f36702090219521e65f54 Author: Kyrylo Tkachov <kyrylo.tkachov@arm.com> Date: Mon Dec 18 12:06:55 2017 +0000 [arm] PR target/82975: Guard against reg_renumber being NULL in arm.h diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index ac51412..c46fd60 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1615,12 +1615,10 @@ enum arm_auto_incmodes /* These assume that REGNO is a hard or pseudo reg number. They give nonzero only if REGNO is a hard reg of the suitable class - or a pseudo reg currently allocated to a suitable hard reg. - Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in reginfo.c during register - allocation. */ + or a pseudo reg currently allocated to a suitable hard reg. */ #define TEST_REGNO(R, TEST, VALUE) \ - ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE)) + ((R TEST VALUE) \ + || (reg_renumber && ((unsigned) reg_renumber[R] TEST VALUE))) /* Don't allow the pc to be used. */ #define ARM_REGNO_OK_FOR_BASE_P(REGNO) \ diff --git a/gcc/testsuite/gcc.dg/pr82975.c b/gcc/testsuite/gcc.dg/pr82975.c new file mode 100644 index 0000000..f4c15fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82975.c @@ -0,0 +1,20 @@ +/* PR target/82975. */ +/* { dg-do compile } */ +/* { dg-options "-fno-sched-pressure -O2" } */ +/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" { target arm*-*-* } } */ + +typedef __SIZE_TYPE__ size_t; + +struct S1 +{ + char pad1; + char val; + short pad2; +}; + +extern char t[256]; + +void foo (struct S1 a, size_t i) +{ + t[i] = a.val; +}
commit 57beb9c5faf502ef6fb5a40bc0fa54541238b0c1 Author: Kyrylo Tkachov <kyrylo.tkachov@arm.com> Date: Mon Dec 18 12:06:55 2017 +0000 [arm] PR target/82975: Guard against reg_renumber being NULL in arm.h diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 47931e1..90478fc 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1626,7 +1626,8 @@ enum arm_auto_incmodes has been allocated, which happens in reginfo.c during register allocation. */ #define TEST_REGNO(R, TEST, VALUE) \ - ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE)) + ((R TEST VALUE) \ + || (reg_renumber && ((unsigned) reg_renumber[R] TEST VALUE))) /* Don't allow the pc to be used. */ #define ARM_REGNO_OK_FOR_BASE_P(REGNO) \ diff --git a/gcc/testsuite/gcc.dg/pr82975.c b/gcc/testsuite/gcc.dg/pr82975.c new file mode 100644 index 0000000..e6c13bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82975.c @@ -0,0 +1,19 @@ +/* PR target/82975. */ +/* { dg-do compile } */ +/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" } */ + +typedef __SIZE_TYPE__ size_t; + +struct S1 +{ + char pad1; + char val; + short pad2; +}; + +extern char t[256]; + +void foo (struct S1 a, size_t i) +{ + t[i] = a.val; +}