From 44087d555cb9baf64a5a7dde3f46653a971b8e89 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Fri, 11 Nov 2005 23:19:26 +0000 Subject: [PATCH] re PR middle-end/24750 (global-alloc (reload) trips over own confusion for unexpected addressing modes) PR middle-end/24750 * gcc.dg/torture/pr24750-1.c, gcc.target/cris/torture/pr24750-2.c: New tests. From-SVN: r106806 --- gcc/testsuite/ChangeLog | 6 ++ gcc/testsuite/gcc.dg/torture/pr24750-1.c | 72 +++++++++++++++++++++++ gcc/testsuite/gcc.target/cris/torture/pr24750-2.c | 20 +++++++ 3 files changed, 98 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr24750-1.c create mode 100644 gcc/testsuite/gcc.target/cris/torture/pr24750-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 59e5d45..71698c4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-11-12 Hans-Peter Nilsson + + PR middle-end/24750 + * gcc.dg/torture/pr24750-1.c, gcc.target/cris/torture/pr24750-2.c: + New tests. + 2005-11-11 Andreas Tobler * lib/target-libpath.exp (get_shlib_extension): New proc. diff --git a/gcc/testsuite/gcc.dg/torture/pr24750-1.c b/gcc/testsuite/gcc.dg/torture/pr24750-1.c new file mode 100644 index 0000000..6f84f3e --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr24750-1.c @@ -0,0 +1,72 @@ +extern int unknown; +extern int n0; +extern short *s0; +extern int n1; +extern short *s1; +extern short *s2; +extern int *n2; +extern int *n3; +extern int n4; +extern short *n5; +extern int *n6; +extern int n7; +extern char *unc; + +void +f (short *sp) +{ + int j = 0; + int i = 0; + int n8 = 0; + int n9 = 0; + short *s3 = sp; + short s4 = (short) unknown; + short s5 = (short) unknown; + char *c0 = unc; + int n10 = 0; + int n11 = 0; + int u0 = unknown; + int k = 0; + + for (n8 = 1; n8 <= n7; n8++) + { + for (i = 1; i <= n0; i++) + c0[i] = 0; + for (i = 1; i <= u0; i++) { } + for (i = sp[0]; i != -32767; i = sp[i]) + if (s4 == u0) + for (j = 1; j <= u0; j++) + if (!c0[s3[j]]) + break; + } + for (n9 = 1; n9 <= n0; n9++) s1[unknown + n9] = n9; + for (i = 1; i <= n1; i++) + for (j = 1; j <= s4; j++) + s3[j] = s1[s3[j]]; + for (n8 = 1; n8 <= n7; n8++) + for (i = 1; i <= s5; i++) + s3[i] = s1[s3[i]]; + for (n9 = 1; n9 <= n0; n9++) sp[s1[n9]] = unknown; + for (n10 = 2; n10 < n4; n10++) { } + for (k = 1; k <= unknown; k++) + { + s4 = s0[n5[u0]]; + for (i = 1; i <= s4; i++) { } + for (j = 1; j <= s4; j++) + if (n2[1] != 0) + if (i == unknown) + unknown = n3[unknown]; + n6[u0] = n10; + } + for (k = n7; k >= n11; k--) + if (n2[k] == -32767) + break; + free (c0); + + for (i = 1; i <= n7; i++) + { + for (j = 1; j <= s4; j++) { } + for (n8 = s2[unknown]; n8 != -32767; n8 = s2[n8]) { } + for (j = 1; j <= s5; j++) { } + } +} diff --git a/gcc/testsuite/gcc.target/cris/torture/pr24750-2.c b/gcc/testsuite/gcc.target/cris/torture/pr24750-2.c new file mode 100644 index 0000000..281fb47 --- /dev/null +++ b/gcc/testsuite/gcc.target/cris/torture/pr24750-2.c @@ -0,0 +1,20 @@ +/* As the invalid insn in this test got as far as to the target output + code and was "near enough" to output invalid assembly-code, we need + to pass it through the assembler as well. + { dg-do assemble } */ + +int +f (short *a, char *y) +{ + __asm__ ("" : : : +#ifndef __PIC__ + "r0", +#endif + "r1", "r2", "r3", "r4", "r5", "r6", "r7", + /* Register R8 is frame-pointer, and we don't have a means + to not clobber it for the test-runs that don't eliminate + it. But that's ok; we have enough general-register + pressure to repeat the bug without that. */ + "r9", "r10", "r11", "r12", "r13"); + return y[*a]; +} -- 2.7.4