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][GRAPHITE] Test for code generation errors


The following patch adjust GRAPHITE testing to check that existing
code generation issues occur and makes code generation ICE with
-fchecking --param graphite-allow-codegen-errors=0.  The param
is really a testsuite artifact so we can have testcases with
issues where we have papered over GRAPHITE issues with aborting
code generation.

This avoids regressing testcases that do not show code generation
issues and it allows detecting testcases that no longer show
code generation issues (so we can avoid regressing that feat later).

I'm now working on code-generation issues so that's an important
feature for me.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2017-10-02  Richard Biener  <rguenther@suse.de>

	* graphite-isl-ast-to-gimple.c (set_codegen_error): With
	-fchecking and --param graphite-allow-codegen-errors=0 ICE.
	* params.def (PARAM_GRAPHITE_ALLOW_CODEGEN_ERRORS): New param.

	* gcc.dg/graphite/graphite.exp: Add -fdump-tree-graphite-details.
	* gcc.dg/graphite/id-16.c: Adjust for existing codegen errors.
	* gcc.dg/graphite/pr46168.c: Likewise.
	* gcc.dg/graphite/pr68756.c: Likewise.
	* gcc.dg/graphite/pr69728.c: Likewise.
	* gcc.dg/graphite/pr71575-2.c: Likewise.
	* gcc.dg/graphite/pr77362.c: Likewise.
	* gcc.dg/graphite/pr81373.c: Likewise.
	* gcc.dg/graphite/run-id-pr67700-1.c: Likewise.
	* gfortran.dg/graphite/interchange-1.f: Likewise.
	* gfortran.dg/graphite/pr29581.f90: Likewise.
	* gfortran.dg/graphite/pr42334-1.f: Likewise.
	* gfortran.dg/graphite/pr42393-1.f90: Likewise.
	* gfortran.dg/graphite/pr42393.f90: Likewise.
	* gfortran.dg/graphite/pr47019.f: Likewise.

Index: gcc/graphite-isl-ast-to-gimple.c
===================================================================
--- gcc/graphite-isl-ast-to-gimple.c	(revision 253336)
+++ gcc/graphite-isl-ast-to-gimple.c	(working copy)
@@ -240,7 +240,14 @@ class translate_isl_ast_to_gimple
   void gsi_insert_earliest (gimple_seq seq);
   tree rename_all_uses (tree new_expr, basic_block new_bb, basic_block old_bb);
   bool codegen_error_p () const { return codegen_error; }
-  void set_codegen_error () { codegen_error = true; }
+
+  void set_codegen_error ()
+  {
+    codegen_error = true;
+    gcc_assert (! flag_checking
+		|| PARAM_VALUE (PARAM_GRAPHITE_ALLOW_CODEGEN_ERRORS));
+  }
+
   bool is_constant (tree op) const
   {
     return TREE_CODE (op) == INTEGER_CST
Index: gcc/params.def
===================================================================
--- gcc/params.def	(revision 253336)
+++ gcc/params.def	(working copy)
@@ -894,6 +894,12 @@ DEFPARAM (PARAM_MAX_ISL_OPERATIONS,
 	  "maximum number of isl operations, 0 means unlimited",
 	  350000, 0, 0)
 
+/* For testsuite purposes allow to check for codegen error handling.  */
+DEFPARAM (PARAM_GRAPHITE_ALLOW_CODEGEN_ERRORS,
+	  "graphite-allow-codegen-errors",
+	  "whether codegen errors should be ICEs when -fchecking.",
+	  0, 0, 1)
+
 /* Avoid data dependence analysis on very large loops.  */
 DEFPARAM (PARAM_LOOP_MAX_DATAREFS_FOR_DATADEPS,
 	  "loop-max-datarefs-for-datadeps",
Index: gcc/testsuite/gcc.dg/graphite/graphite.exp
===================================================================
--- gcc/testsuite/gcc.dg/graphite/graphite.exp	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/graphite.exp	(working copy)
@@ -57,11 +57,11 @@ set vect_files        [lsort [glob -noco
 # Tests to be compiled.
 set dg-do-what-default compile
 dg-runtest $scop_files        "" "-O2 -fgraphite -fdump-tree-graphite-all"
-dg-runtest $id_files          "" "-O2 -fgraphite-identity -ffast-math"
+dg-runtest $id_files          "" "-O2 -fgraphite-identity -ffast-math -fdump-tree-graphite-details"
 
 # Tests to be run.
 set dg-do-what-default run
-dg-runtest $run_id_files      "" "-O2 -fgraphite-identity"
+dg-runtest $run_id_files      "" "-O2 -fgraphite-identity -fdump-tree-graphite-details"
 dg-runtest $opt_files         "" "-O2 -ffast-math -floop-nest-optimize -fdump-tree-graphite-all"
 
 # Vectorizer tests, to be run or compiled, depending on target capabilities.
Index: gcc/testsuite/gcc.dg/graphite/id-16.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/id-16.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/id-16.c	(working copy)
@@ -1,3 +1,5 @@
+/* { dg-additional-options "--param graphite-allow-codegen-errors=1" } */
+
 int transformation[(2*19 - 1) * (2*19 - 1)][8];
 
 const int transformation2[8][2][2] = {
@@ -42,3 +44,5 @@ transformation_init (void)
 	}
     }
 }
+
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr46168.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr46168.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr46168.c	(working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O -ftree-loop-linear" } */
+/* { dg-options "-O -ftree-loop-linear -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" } */
 
 int
 foo (int a[4096], int mi, int mj)
@@ -13,3 +13,5 @@ foo (int a[4096], int mi, int mj)
     }
   return i16;
 }
+
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr68756.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr68756.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr68756.c	(working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -floop-nest-optimize" } */
+/* { dg-options "-O1 -floop-nest-optimize -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" } */
 
 unsigned int z4, pz;
 int nn[2];
@@ -24,3 +24,5 @@ la (void)
       pz = xq (hn);
     }
 }
+
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr69728.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr69728.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr69728.c	(working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -floop-nest-optimize" } */
+/* { dg-options "-O3 -floop-nest-optimize -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" } */
 
 int a[1];
 int b, c, d, e;
@@ -19,3 +19,5 @@ fn1 ()
 	}
     }
 }
+
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr71575-2.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr71575-2.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr71575-2.c	(working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-Ofast -floop-nest-optimize" } */
+/* { dg-options "-Ofast -floop-nest-optimize -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" } */
 
 int *a;
 int b, c, d, e, g;
@@ -14,3 +14,5 @@ void fn1() {
 	}
     }
 }
+
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr77362.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr77362.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr77362.c	(working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -floop-nest-optimize" } */
+/* { dg-options "-O2 -floop-nest-optimize -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" } */
 
 int mc[2];
 int f2, sk;
@@ -19,3 +19,4 @@ zm (void)
     }
 }
 
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/pr81373.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/pr81373.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/pr81373.c	(working copy)
@@ -1,4 +1,4 @@
-/* { dg-options "-fno-tree-scev-cprop -fgraphite-identity -O -fdump-tree-graphite-all" } */
+/* { dg-options "-fno-tree-scev-cprop -fgraphite-identity -O -fdump-tree-graphite-all --param graphite-allow-codegen-errors=1" } */
 
 void bar (void);
 
@@ -38,3 +38,4 @@ int toto()
 }
 
 /* { dg-final { scan-tree-dump-times "number of SCoPs: 2" 1 "graphite"} } */
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gcc.dg/graphite/run-id-pr67700-1.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/run-id-pr67700-1.c	(revision 253336)
+++ gcc/testsuite/gcc.dg/graphite/run-id-pr67700-1.c	(working copy)
@@ -1,3 +1,5 @@
+/* { dg-additional-options "--param graphite-allow-codegen-errors=1" } */
+
 #include <stdlib.h>
 #include <assert.h>
 
@@ -46,3 +48,4 @@ int main()
   return 0;
 }
 
+/* { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } } */
Index: gcc/testsuite/gfortran.dg/graphite/interchange-1.f
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/interchange-1.f	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/interchange-1.f	(working copy)
@@ -1,3 +1,4 @@
+! { dg-additional-options "--param graphite-allow-codegen-errors=1" }
       subroutine foo(f1,f2,f3,f4,f5,f6,f7,f8,f9,f0,g1,g2,g3)
       implicit none
       integer f4,f3,f2,f1
@@ -42,3 +43,4 @@
 ! kernel from bwaves.
 
 ! { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { xfail *-*-* } } }
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }
Index: gcc/testsuite/gfortran.dg/graphite/pr29581.f90
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/pr29581.f90	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/pr29581.f90	(working copy)
@@ -1,6 +1,6 @@
 ! PR tree-optimization/29581
 ! { dg-do run }
-! { dg-options "-O2 -ftree-loop-linear" }
+! { dg-options "-O2 -ftree-loop-linear -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" }
 
       SUBROUTINE FOO (K)
       INTEGER I, J, K, A(5,5), B
@@ -25,3 +25,5 @@
         A(1,1) = 0
         IF (ANY(A.NE.0)) CALL ABORT
       END
+
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }
Index: gcc/testsuite/gfortran.dg/graphite/pr42334-1.f
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/pr42334-1.f	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/pr42334-1.f	(working copy)
@@ -1,4 +1,4 @@
-! { dg-options "-O2 -floop-interchange" }
+! { dg-options "-O2 -floop-interchange -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" }
 
       subroutine linel(icmdl,stre,anisox)
       real*8 stre(6),tkl(3,3),ekl(3,3),anisox(3,3,3,3)
@@ -14,3 +14,5 @@
             enddo
             stre(1)=tkl(1,1)
       end
+
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }
Index: gcc/testsuite/gfortran.dg/graphite/pr42393-1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/pr42393-1.f90	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/pr42393-1.f90	(working copy)
@@ -1,4 +1,4 @@
-! { dg-options "-O2 -fgraphite-identity -fno-loop-block -fno-loop-interchange -fno-loop-strip-mine" }
+! { dg-options "-O2 -fgraphite-identity -fno-loop-block -fno-loop-interchange -fno-loop-strip-mine --param graphite-allow-codegen-errors=1" }
 
 MODULE beta_gamma_psi
   INTEGER, PARAMETER :: dp=KIND(0.0D0)
@@ -22,3 +22,5 @@ CONTAINS
     fn_val = sum
   END FUNCTION basym
 END MODULE beta_gamma_psi
+
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }
Index: gcc/testsuite/gfortran.dg/graphite/pr42393.f90
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/pr42393.f90	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/pr42393.f90	(working copy)
@@ -1,4 +1,4 @@
-! { dg-options "-O2 -fgraphite-identity -fno-loop-block -fno-loop-interchange -fno-loop-strip-mine" }
+! { dg-options "-O2 -fgraphite-identity -fno-loop-block -fno-loop-interchange -fno-loop-strip-mine -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" }
 
 MODULE beta_gamma_psi
   INTEGER, PARAMETER :: dp=KIND(0.0D0)
@@ -28,3 +28,5 @@ CONTAINS
     fn_val = e0*t*u*sum
   END FUNCTION basym
 END MODULE beta_gamma_psi
+
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }
Index: gcc/testsuite/gfortran.dg/graphite/pr47019.f
===================================================================
--- gcc/testsuite/gfortran.dg/graphite/pr47019.f	(revision 253336)
+++ gcc/testsuite/gfortran.dg/graphite/pr47019.f	(working copy)
@@ -1,4 +1,4 @@
-! { dg-options "-O -ftree-pre -fgraphite-identity -fno-tree-copy-prop" }
+! { dg-options "-O -ftree-pre -fgraphite-identity -fno-tree-copy-prop -fdump-tree-graphite-details --param graphite-allow-codegen-errors=1" }
 
       subroutine foo (ldmx,ldmy,v)
       integer :: ldmx, ldmy, v, l, m
@@ -10,3 +10,5 @@
         v(m,3,2) = m
       end do
       end
+
+! { dg-final { scan-tree-dump-times "code generation error" 1 "graphite" } }


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