This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][GRAPHITE] Test for code generation errors
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 2 Oct 2017 11:58:39 +0200 (CEST)
- Subject: [PATCH][GRAPHITE] Test for code generation errors
- Authentication-results: sourceware.org; auth=none
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" } }