This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix gcc.dg/tree-ssa/scev-[345].c testcases


The following is an attempt to change those testcases to be less dependent
on previous passes.  The original motivation of the testcases seems to be
testing SCEV capabilities and in turn IVOPTs decisions, thus the testcases
are changed to check the IVO dump, use the GIMPLE FE feeding the loop
pipeline directly and skip lowering/store-motion we meanwhile do to
the testcase.

To avoid some existing issue with CFG construction after GIMPLE parsing
we need to be able to add GIMPLE_NOPs which the patch enables to generate
from empty stmts (previously those resulted in parse errors).

Tested the testcases on x86_64 with {,-m32} sofar I'll appreciate
testing on more targets.

Full bootstrap / regtest running on x86_64-unknown-linux-gnu.

Richard.

2017-01-13  Richard Biener  <rguenther@suse.de>

	PR testsuite/52563
	PR testsuite/71237
	PR testsuite/77737
	c/
	* gimple-parser.c (c_parser_gimple_compound_statement): Handle
	nops.

	* gcc.dg/tree-ssa/scev-3.c: Re-write to a GIMPLE testcase for IVOPTs.
	* gcc.dg/tree-ssa/scev-4.c: Likewise.
	* gcc.dg/tree-ssa/scev-5.c: Likewise.

Index: gcc/c/gimple-parser.c
===================================================================
--- gcc/c/gimple-parser.c	(revision 244393)
+++ gcc/c/gimple-parser.c	(working copy)
@@ -211,6 +211,17 @@ c_parser_gimple_compound_statement (c_pa
 	    }
 	  goto expr_stmt;
 
+	case CPP_SEMICOLON:
+	  {
+	    /* Empty stmt.  */
+	    location_t loc = c_parser_peek_token (parser)->location;
+	    c_parser_consume_token (parser);
+	    gimple *nop = gimple_build_nop ();
+	    gimple_set_location (nop, loc);
+	    gimple_seq_add_stmt (seq, nop);
+	    break;
+	  }
+
 	default:
 expr_stmt:
 	  c_parser_gimple_statement (parser, seq);
Index: gcc/testsuite/gcc.dg/tree-ssa/scev-3.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/scev-3.c	(revision 244393)
+++ gcc/testsuite/gcc.dg/tree-ssa/scev-3.c	(working copy)
@@ -1,18 +1,43 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fgimple -fdump-tree-ivopts" } */
 
 int *a_p;
 int a[1000];
 
-void
-f(int k)
+void __GIMPLE (startwith ("loop"))
+f (int k)
 {
-	int i;
+  int i;
+  int * _1;
+
+bb_2:
+  i_5 = k_4(D);
+  if (i_5 <= 999)
+    goto bb_4;
+  else
+    goto bb_3;
+
+bb_3:
+  return;
+
+bb_4:
+  ;
+
+bb_5:
+  i_12 = __PHI (bb_6: i_9, bb_4: i_5);
+  _1 = &a[i_12];
+  a_p = _1;
+  __MEM <int[1000]> ((int *)&a)[i_12] = 100;
+  i_9 = i_5 + i_12;
+  if (i_9 <= 999)
+    goto bb_6;
+  else
+    goto bb_3;
+
+bb_6:
+  ;
+  goto bb_5;
 
-	for (i=k; i<1000; i+=k) {
-		a_p = &a[i];
-		*a_p = 100;
-        }
 }
 
-/* { dg-final { scan-tree-dump-times "&a" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "&a" 1 "ivopts" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/scev-4.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/scev-4.c	(revision 244393)
+++ gcc/testsuite/gcc.dg/tree-ssa/scev-4.c	(working copy)
@@ -1,23 +1,48 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fgimple -fdump-tree-ivopts" } */
 
 typedef struct {
-	int x;
-	int y;
+    int x;
+    int y;
 } S;
 
 int *a_p;
 S a[1000];
 
-void
-f(int k)
+void __GIMPLE (startwith ("loop"))
+f (int k)
 {
-	int i;
+  int i;
+  int * _1;
+
+bb_2:
+  i_5 = k_4(D);
+  if (i_5 <= 999)
+    goto bb_4;
+  else
+    goto bb_3;
+
+bb_3:
+  return;
+
+bb_4:
+  ;
+
+bb_5:
+  i_12 = __PHI (bb_6: i_9, bb_4: i_5);
+  _1 = &a[i_12].y;
+  a_p = _1;
+  __MEM <S[1000]> ((int *)&a)[i_12].y = 100;
+  i_9 = i_5 + i_12;
+  if (i_9 <= 999)
+    goto bb_6;
+  else
+    goto bb_3;
+
+bb_6:
+  ;
+  goto bb_5;
 
-	for (i=k; i<1000; i+=k) {
-		a_p = &a[i].y;
-		*a_p = 100;
-        }
 }
 
-/* { dg-final { scan-tree-dump-times "&a" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "&a" 1 "ivopts" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/scev-5.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/scev-5.c	(revision 244393)
+++ gcc/testsuite/gcc.dg/tree-ssa/scev-5.c	(working copy)
@@ -1,18 +1,43 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fgimple -fdump-tree-ivopts" } */
 
 int *a_p;
 int a[1000];
 
-void
-f(int k)
+void __GIMPLE (startwith ("loop"))
+f (int k)
 {
-        long long i;
+  long long int i;
+  int * _1;
+
+bb_2:
+  i_5 = (long long int) k_4(D);
+  if (i_5 <= 999ll)
+    goto bb_4;
+  else
+    goto bb_3;
+
+bb_3:
+  return;
+
+bb_4:
+  ;
+
+bb_5:
+  i_12 = __PHI (bb_6: i_9, bb_4: i_5);
+  _1 = &a[i_12];
+  a_p = _1;
+  __MEM <int[1000]> ((int *)&a)[i_12] = 100;
+  i_9 = i_5 + i_12;
+  if (i_9 <= 999ll)
+    goto bb_6;
+  else
+    goto bb_3;
+
+bb_6:
+  ;
+  goto bb_5;
 
-        for (i=k; i<1000; i+=k) {
-                a_p = &a[i];
-                *a_p = 100;
-        }
 }
 
-/* { dg-final { scan-tree-dump-times "&a" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "&a" 1 "ivopts" } } */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]