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 <rguent...@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" } }