diff mbox

[testsuite] : Move pr45830.c to gcc.dg/torture and make it pass for AVR

Message ID 4EDF553A.5040404@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Dec. 7, 2011, 11:59 a.m. UTC
In principle, test case pr45830.c works for target avr, but there is an issue
with the -ftree-switch-conversion optimization activated at higher optimization
levels: It transforms code size into .data usage and thus exceeds AVRs' RAM
size because of big CSWTCH lookup tables located in RAM.

The patch moves the test case from gcc.c-torture/execute/ to more modern
gcc.dg/torture and adds magic dg-comments as needed.  Patch lightly tested with
my avr-tools.

Ok for trunk?

Johann

	PR tree-optimization/45830
	* gcc.c-torture/execute/pr45830.c: Move file from here to...
	* gcc.dg/torture/pr45830.c: ...here.  Add dg-do and
	dg-additional-options magic.

Comments

Georg-Johann Lay Dec. 12, 2011, 6:54 p.m. UTC | #1
http://gcc.gnu.org/ml/gcc-patches/2011-12/msg00474.html

Georg-Johann Lay wrote:
> In principle, test case pr45830.c works for target avr, but there is an issue
> with the -ftree-switch-conversion optimization activated at higher optimization
> levels: It transforms code size into .data usage and thus exceeds AVRs' RAM
> size because of big CSWTCH lookup tables located in RAM.
> 
> The patch moves the test case from gcc.c-torture/execute/ to more modern
> gcc.dg/torture and adds magic dg-comments as needed.  Patch lightly tested with
> my avr-tools.
> 
> Ok for trunk?
> 
> Johann
> 
> 	PR tree-optimization/45830
> 	* gcc.c-torture/execute/pr45830.c: Move file from here to...
> 	* gcc.dg/torture/pr45830.c: ...here.  Add dg-do and
> 	dg-additional-options magic.
>
Mike Stump Dec. 12, 2011, 7:44 p.m. UTC | #2
On Dec 7, 2011, at 3:59 AM, Georg-Johann Lay wrote:
> In principle, test case pr45830.c works for target avr, but there is an issue
> with the -ftree-switch-conversion optimization activated at higher optimization
> levels: It transforms code size into .data usage and thus exceeds AVRs' RAM
> size because of big CSWTCH lookup tables located in RAM.

> Ok for trunk?

Ok.
diff mbox

Patch

Index: gcc.c-torture/execute/pr45830.c
===================================================================
--- gcc.c-torture/execute/pr45830.c	(revision 182043)
+++ gcc.c-torture/execute/pr45830.c	(working copy)
@@ -1,97 +0,0 @@ 
-/* PR tree-optimization/45830 */
-
-extern void abort (void);
-
-long long va, vb, vc, vd, ve;
-
-__attribute__((noinline)) int
-foo (int x)
-{
-  long long a, b, c, d, e;
-  switch (x)
-    {
-    case 0:
-    case 3:
-    case 1:
-    case 2:
-    case 4:
-      a = 1;
-      b = 129;
-      c = -12;
-      d = -4;
-      e = 128;
-      break;
-    case 23:
-    case 26:
-    case 19:
-    case 65:
-    case 5:
-      a = 2;
-      b = 138;
-      c = 115;
-      d = 128;
-      e = -16;
-      break;
-    case 21:
-    case 20:
-    case 22:
-    case 38:
-    case 27:
-    case 66:
-    case 45:
-    case 47:
-      a = 3;
-      b = 6;
-      c = 127;
-      d = 25;
-      e = 257;
-      break;
-    default:
-      a = 0;
-      b = 18;
-      c = 0;
-      d = 64;
-      e = 32768L;
-      break;
-    }
-  va = a;
-  vb = b;
-  vc = c;
-  vd = d;
-  ve = e;
-}
-
-int
-bar (int x)
-{
-  if (x < 0)
-    return 3;
-  if (x < 5)
-    return 0;
-  if (x == 5 || x == 19 || x == 23 | x == 26 || x == 65)
-    return 1;
-  if ((x >= 20 && x <= 22) || x == 27 || x == 38
-      || x == 45 || x == 47 || x == 66)
-    return 2;
-  return 3;
-}
-
-long long expected[] =
-{ 1, 129, -12, -4, 128, 2, 138, 115, 128, -16,
-  3, 6, 127, 25, 257, 0, 18, 0, 64, 32768L };
-
-int
-main (void)
-{
-  int i, v;
-  for (i = -4; i < 70; i++)
-    {
-      foo (i);
-      v = bar (i);
-      if (va != expected[5 * v] || vb != expected[5 * v + 1]
-	  || vc != expected[5 * v + 2] || vd != expected[5 * v + 3]
-	  || ve != expected[5 * v + 4])
-	abort ();
-    }
-  return 0;
-}
Index: gcc.dg/torture/pr45830.c
===================================================================
--- gcc.dg/torture/pr45830.c	(revision 182043)
+++ gcc.dg/torture/pr45830.c	(working copy)
@@ -1,4 +1,6 @@ 
 /* PR tree-optimization/45830 */
+/* { dg-do run } */
+/* { dg-additional-options "-fno-tree-switch-conversion" { target avr-*-* } } */
 
 extern void abort (void);