Patchwork Add a testcase for reload PR 47166

login
register
mail settings
Submitter Richard Sandiford
Date March 14, 2011, 10:25 a.m.
Message ID <g4vczm3sol.fsf@linaro.org>
Download mbox | patch
Permalink /patch/86717/
State New
Headers show

Comments

Richard Sandiford - March 14, 2011, 10:25 a.m.
A reload patch that I posted in January:

    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00548.html

turned out to be related to PR 47166, so Bernd committed a combined fix:

    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.htmlhttp://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.html

Is it OK to commit the testcase from the first patch to 4.5 and 4.6?

Thanks,
Richard


gcc/testsuite/
	PR rtl-optimization/47166
	* gcc.c-torture/execute/postmod-1.c: New test.
Richard Guenther - March 14, 2011, 11:34 a.m.
On Mon, Mar 14, 2011 at 11:25 AM, Richard Sandiford
<richard.sandiford@linaro.org> wrote:
> A reload patch that I posted in January:
>
>    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00548.html
>
> turned out to be related to PR 47166, so Bernd committed a combined fix:
>
>    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.htmlhttp://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.html
>
> Is it OK to commit the testcase from the first patch to 4.5 and 4.6?

Sure.

Thanks,
Richard.

> Thanks,
> Richard
>
>
> gcc/testsuite/
>        PR rtl-optimization/47166
>        * gcc.c-torture/execute/postmod-1.c: New test.
>
> Index: gcc/testsuite/gcc.c-torture/execute/postmod-1.c
> ===================================================================
> --- /dev/null   2010-12-14 12:47:12.274544604 +0000
> +++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c     2011-01-10 13:52:05.000000000 +0000
> @@ -0,0 +1,62 @@
> +#define DECLARE_ARRAY(A) array##A[0x10]
> +#define DECLARE_COUNTER(A) counter##A = 0
> +#define DECLARE_POINTER(A) *pointer##A = array##A + x
> +/* Create a loop that allows post-modification of pointerA, followed by
> +   a use of the post-modified address.  */
> +#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
> +#define AFTER(A) counter##A += pointer##A[x]
> +
> +/* Set up the arrays so that one iteration of the loop sets the counter
> +   to 3.0f.  */
> +#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
> +
> +/* Check that the loop worked correctly for all values.  */
> +#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
> +
> +/* Having 6 copies triggered the bug for ARM and Thumb.  */
> +#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
> +
> +/* Each addendA should be allocated a register.  */
> +#define INIT_VOLATILE(A) addend##A = vol
> +#define ADD_VOLATILE(A) vol += addend##A
> +
> +/* Having 5 copies triggered the bug for ARM and Thumb.  */
> +#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
> +
> +float MANY (DECLARE_ARRAY);
> +float MANY (DECLARE_COUNTER);
> +
> +volatile int stop = 1;
> +volatile int vol;
> +
> +void __attribute__((noinline))
> +foo (int x)
> +{
> +  float MANY (DECLARE_POINTER);
> +  int i;
> +
> +  do
> +    {
> +      MANY (BEFORE);
> +      MANY (AFTER);
> +      /* Create an inner loop that should ensure the code above
> +        has registers free for reload inheritance.  */
> +      {
> +       int MANY2 (INIT_VOLATILE);
> +       for (i = 0; i < 10; i++)
> +         MANY2 (ADD_VOLATILE);
> +      }
> +    }
> +  while (!stop);
> +}
> +
> +int
> +main (void)
> +{
> +  int exit_code = 0;
> +
> +  MANY (INIT_ARRAY);
> +  foo (1);
> +  MANY (CHECK_ARRAY);
> +  return exit_code;
> +}
>
Jakub Jelinek - March 14, 2011, 5:36 p.m.
On Mon, Mar 14, 2011 at 12:34:16PM +0100, Richard Guenther wrote:
> On Mon, Mar 14, 2011 at 11:25 AM, Richard Sandiford
> <richard.sandiford@linaro.org> wrote:
> > A reload patch that I posted in January:
> >
> >    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00548.html
> >
> > turned out to be related to PR 47166, so Bernd committed a combined fix:
> >
> >    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.htmlhttp://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.html
> >
> > Is it OK to commit the testcase from the first patch to 4.5 and 4.6?
> 
> Sure.

Please commit also to 4.6 branch, you've just committed it to 4.5 and 4.7.

> > gcc/testsuite/
> >        PR rtl-optimization/47166
> >        * gcc.c-torture/execute/postmod-1.c: New test.

	Jakub
Richard Sandiford - March 15, 2011, 9:43 a.m.
Jakub Jelinek <jakub@redhat.com> writes:
> On Mon, Mar 14, 2011 at 12:34:16PM +0100, Richard Guenther wrote:
>> On Mon, Mar 14, 2011 at 11:25 AM, Richard Sandiford
>> <richard.sandiford@linaro.org> wrote:
>> > A reload patch that I posted in January:
>> >
>> >    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00548.html
>> >
>> > turned out to be related to PR 47166, so Bernd committed a combined fix:
>> >
>> >    http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.htmlhttp://gcc.gnu.org/ml/gcc-patches/2011-01/msg01620.html
>> >
>> > Is it OK to commit the testcase from the first patch to 4.5 and 4.6?
>> 
>> Sure.
>
> Please commit also to 4.6 branch, you've just committed it to 4.5 and 4.7.

Doh, bad timing.  Now done.

Richard

Patch

Index: gcc/testsuite/gcc.c-torture/execute/postmod-1.c
===================================================================
--- /dev/null	2010-12-14 12:47:12.274544604 +0000
+++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c	2011-01-10 13:52:05.000000000 +0000
@@ -0,0 +1,62 @@ 
+#define DECLARE_ARRAY(A) array##A[0x10]
+#define DECLARE_COUNTER(A) counter##A = 0
+#define DECLARE_POINTER(A) *pointer##A = array##A + x
+/* Create a loop that allows post-modification of pointerA, followed by
+   a use of the post-modified address.  */
+#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
+#define AFTER(A) counter##A += pointer##A[x]
+
+/* Set up the arrays so that one iteration of the loop sets the counter
+   to 3.0f.  */
+#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
+
+/* Check that the loop worked correctly for all values.  */
+#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
+
+/* Having 6 copies triggered the bug for ARM and Thumb.  */
+#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
+
+/* Each addendA should be allocated a register.  */
+#define INIT_VOLATILE(A) addend##A = vol
+#define ADD_VOLATILE(A) vol += addend##A
+
+/* Having 5 copies triggered the bug for ARM and Thumb.  */
+#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
+
+float MANY (DECLARE_ARRAY);
+float MANY (DECLARE_COUNTER);
+
+volatile int stop = 1;
+volatile int vol;
+
+void __attribute__((noinline))
+foo (int x)
+{
+  float MANY (DECLARE_POINTER);
+  int i;
+
+  do
+    {
+      MANY (BEFORE);
+      MANY (AFTER);
+      /* Create an inner loop that should ensure the code above
+	 has registers free for reload inheritance.  */
+      {
+	int MANY2 (INIT_VOLATILE);
+	for (i = 0; i < 10; i++)
+	  MANY2 (ADD_VOLATILE);
+      }
+    }
+  while (!stop);
+}
+
+int
+main (void)
+{
+  int exit_code = 0;
+
+  MANY (INIT_ARRAY);
+  foo (1);
+  MANY (CHECK_ARRAY);
+  return exit_code;
+}