From 2ac57409698af10184a5a6f18ee21826a6d1f538 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Fri, 31 Jul 2009 02:45:54 +0000 Subject: [PATCH] Modify the testsuite for the new Graphite. 2009-07-30 Sebastian Pop * gcc.dg/graphite/graphite.exp: Implement an automatic selection of flags based on the name of the testcase. * gfortran.dg/graphite/graphite.exp: Same. * gcc.dg/graphite/block-0.c: Adjusted. * gcc.dg/graphite/block-1.c: Adjusted. * gcc.dg/graphite/block-2.c: Adjusted. * gcc.dg/graphite/block-3.c: Adjusted. * gcc.dg/graphite/block-4.c: Adjusted. * gcc.dg/graphite/block-5.c: Adjusted. * gcc.dg/graphite/block-6.c: Adjusted. * gcc.dg/graphite/pr37485.c: Adjusted. * gcc.dg/graphite/pr37684.c: Adjusted. * gcc.dg/graphite/pr37828.c: Adjusted. * gcc.dg/graphite/pr37883.c: Adjusted. * gcc.dg/graphite/pr37928.c: Adjusted. * gcc.dg/graphite/pr37943.c: Adjusted. * gcc.dg/graphite/pr38409.c: Adjusted. * gcc.dg/graphite/pr38498.c: Adjusted. * gcc.dg/graphite/pr38559.c: Adjusted. * gcc.dg/graphite/pr39335.c: Adjusted. * gcc.dg/graphite/pr39335_1.c: Adjusted. * gcc.dg/graphite/scop-0.c: Adjusted. * gcc.dg/graphite/scop-1.c: Adjusted. * gcc.dg/graphite/scop-10.c: Adjusted. * gcc.dg/graphite/scop-11.c: Adjusted. * gcc.dg/graphite/scop-12.c: Adjusted. * gcc.dg/graphite/scop-13.c: Adjusted. * gcc.dg/graphite/scop-14.c: Adjusted. * gcc.dg/graphite/scop-15.c: Adjusted. * gcc.dg/graphite/scop-16.c: Adjusted. * gcc.dg/graphite/scop-17.c: Adjusted. * gcc.dg/graphite/scop-18.c: Adjusted. * gcc.dg/graphite/scop-19.c: Adjusted. * gcc.dg/graphite/scop-2.c: Adjusted. * gcc.dg/graphite/scop-3.c: Adjusted.- * gcc.dg/graphite/scop-4.c: Adjusted. * gcc.dg/graphite/scop-5.c: Adjusted. * gcc.dg/graphite/scop-6.c: Adjusted. * gcc.dg/graphite/scop-7.c: Adjusted. * gcc.dg/graphite/scop-8.c: Adjusted. * gcc.dg/graphite/scop-9.c: Adjusted. * gcc.dg/graphite/scop-matmult.c: Adjusted. * gfortran.dg/graphite/block-1.f90: Adjusted. * gfortran.dg/graphite/block-2.f: Adjusted. * gfortran.dg/graphite/block-3.f90: Adjusted. * gfortran.dg/graphite/block-4.f90: Adjusted. * gfortran.dg/graphite/id-2.f90: Adjusted. * gfortran.dg/graphite/id-3.f90: Adjusted. * gfortran.dg/graphite/id-4.f90: Adjusted. * gfortran.dg/graphite/pr37852.f90: Adjusted. * gfortran.dg/graphite/pr37857.f90: Adjusted. * gfortran.dg/graphite/pr37980.f90: Adjusted. * gfortran.dg/graphite/pr38083.f90: Adjusted. * gfortran.dg/graphite/pr38953.f90: Adjusted. * gfortran.dg/graphite/scop-1.f: Adjusted. From-SVN: r150302 --- gcc/testsuite/ChangeLog | 59 +++++++++++++++++++++++++ gcc/testsuite/gcc.dg/graphite/block-0.c | 4 +- gcc/testsuite/gcc.dg/graphite/block-1.c | 4 +- gcc/testsuite/gcc.dg/graphite/block-2.c | 2 - gcc/testsuite/gcc.dg/graphite/block-3.c | 2 - gcc/testsuite/gcc.dg/graphite/block-4.c | 2 - gcc/testsuite/gcc.dg/graphite/block-5.c | 4 +- gcc/testsuite/gcc.dg/graphite/block-6.c | 4 +- gcc/testsuite/gcc.dg/graphite/graphite.exp | 59 +++++++++++++++++++++---- gcc/testsuite/gcc.dg/graphite/pr37485.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr37684.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr37828.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr37883.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr37928.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr37943.c | 1 - gcc/testsuite/gcc.dg/graphite/pr38409.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr38498.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr38559.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr39335.c | 2 +- gcc/testsuite/gcc.dg/graphite/pr39335_1.c | 2 +- gcc/testsuite/gcc.dg/graphite/scop-0.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-1.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-10.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-11.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-12.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-13.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-14.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-15.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-16.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-17.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-18.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-19.c | 1 - gcc/testsuite/gcc.dg/graphite/scop-2.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-3.c | 4 +- gcc/testsuite/gcc.dg/graphite/scop-4.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-5.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-6.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-7.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-8.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-9.c | 2 - gcc/testsuite/gcc.dg/graphite/scop-matmult.c | 4 +- gcc/testsuite/gfortran.dg/graphite/block-1.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/block-2.f | 2 - gcc/testsuite/gfortran.dg/graphite/block-3.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/block-4.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/graphite.exp | 55 ++++++++++++++++++++--- gcc/testsuite/gfortran.dg/graphite/id-2.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/id-3.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/id-4.f90 | 2 - gcc/testsuite/gfortran.dg/graphite/pr37852.f90 | 2 +- gcc/testsuite/gfortran.dg/graphite/pr37857.f90 | 2 +- gcc/testsuite/gfortran.dg/graphite/pr37980.f90 | 2 +- gcc/testsuite/gfortran.dg/graphite/pr38083.f90 | 2 +- gcc/testsuite/gfortran.dg/graphite/pr38953.f90 | 2 +- gcc/testsuite/gfortran.dg/graphite/scop-1.f | 4 +- 55 files changed, 181 insertions(+), 108 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 33ba854..9706835 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,62 @@ +2009-07-30 Sebastian Pop + + * gcc.dg/graphite/graphite.exp: Implement an automatic selection of + flags based on the name of the testcase. + * gfortran.dg/graphite/graphite.exp: Same. + + * gcc.dg/graphite/block-0.c: Adjusted. + * gcc.dg/graphite/block-1.c: Adjusted. + * gcc.dg/graphite/block-2.c: Adjusted. + * gcc.dg/graphite/block-3.c: Adjusted. + * gcc.dg/graphite/block-4.c: Adjusted. + * gcc.dg/graphite/block-5.c: Adjusted. + * gcc.dg/graphite/block-6.c: Adjusted. + * gcc.dg/graphite/pr37485.c: Adjusted. + * gcc.dg/graphite/pr37684.c: Adjusted. + * gcc.dg/graphite/pr37828.c: Adjusted. + * gcc.dg/graphite/pr37883.c: Adjusted. + * gcc.dg/graphite/pr37928.c: Adjusted. + * gcc.dg/graphite/pr37943.c: Adjusted. + * gcc.dg/graphite/pr38409.c: Adjusted. + * gcc.dg/graphite/pr38498.c: Adjusted. + * gcc.dg/graphite/pr38559.c: Adjusted. + * gcc.dg/graphite/pr39335.c: Adjusted. + * gcc.dg/graphite/pr39335_1.c: Adjusted. + * gcc.dg/graphite/scop-0.c: Adjusted. + * gcc.dg/graphite/scop-1.c: Adjusted. + * gcc.dg/graphite/scop-10.c: Adjusted. + * gcc.dg/graphite/scop-11.c: Adjusted. + * gcc.dg/graphite/scop-12.c: Adjusted. + * gcc.dg/graphite/scop-13.c: Adjusted. + * gcc.dg/graphite/scop-14.c: Adjusted. + * gcc.dg/graphite/scop-15.c: Adjusted. + * gcc.dg/graphite/scop-16.c: Adjusted. + * gcc.dg/graphite/scop-17.c: Adjusted. + * gcc.dg/graphite/scop-18.c: Adjusted. + * gcc.dg/graphite/scop-19.c: Adjusted. + * gcc.dg/graphite/scop-2.c: Adjusted. + * gcc.dg/graphite/scop-3.c: Adjusted.- + * gcc.dg/graphite/scop-4.c: Adjusted. + * gcc.dg/graphite/scop-5.c: Adjusted. + * gcc.dg/graphite/scop-6.c: Adjusted. + * gcc.dg/graphite/scop-7.c: Adjusted. + * gcc.dg/graphite/scop-8.c: Adjusted. + * gcc.dg/graphite/scop-9.c: Adjusted. + * gcc.dg/graphite/scop-matmult.c: Adjusted. + * gfortran.dg/graphite/block-1.f90: Adjusted. + * gfortran.dg/graphite/block-2.f: Adjusted. + * gfortran.dg/graphite/block-3.f90: Adjusted. + * gfortran.dg/graphite/block-4.f90: Adjusted. + * gfortran.dg/graphite/id-2.f90: Adjusted. + * gfortran.dg/graphite/id-3.f90: Adjusted. + * gfortran.dg/graphite/id-4.f90: Adjusted. + * gfortran.dg/graphite/pr37852.f90: Adjusted. + * gfortran.dg/graphite/pr37857.f90: Adjusted. + * gfortran.dg/graphite/pr37980.f90: Adjusted. + * gfortran.dg/graphite/pr38083.f90: Adjusted. + * gfortran.dg/graphite/pr38953.f90: Adjusted. + * gfortran.dg/graphite/scop-1.f: Adjusted. + 2009-07-30 Doug Kwan * gcc.target/arm/neon/polytypes.c: Adjust test for new notes diff --git a/gcc/testsuite/gcc.dg/graphite/block-0.c b/gcc/testsuite/gcc.dg/graphite/block-0.c index 627f044..55b9036 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-0.c +++ b/gcc/testsuite/gcc.dg/graphite/block-0.c @@ -1,5 +1,3 @@ -/* { dg-options "-O -floop-block -fdump-tree-graphite-all" } */ - #define N 1000 int toto() @@ -21,5 +19,5 @@ main() return toto(); } -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite"} } */ +/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gcc.dg/graphite/block-1.c b/gcc/testsuite/gcc.dg/graphite/block-1.c index 0a70e9e..ba772b3 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-1.c +++ b/gcc/testsuite/gcc.dg/graphite/block-1.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - #define MAX 8192 void bar (void); @@ -36,5 +34,5 @@ int main() return sum; } -/* { dg-final { scan-tree-dump-times "will be loop blocked" 2 "graphite"} } */ +/* { dg-final { scan-tree-dump-times "will be loop blocked" 2 "graphite" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gcc.dg/graphite/block-2.c b/gcc/testsuite/gcc.dg/graphite/block-2.c index fc4e889..210ea34 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-2.c +++ b/gcc/testsuite/gcc.dg/graphite/block-2.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - typedef unsigned char UChar; typedef int Int32; typedef unsigned int UInt32; diff --git a/gcc/testsuite/gcc.dg/graphite/block-3.c b/gcc/testsuite/gcc.dg/graphite/block-3.c index 1d2ca40..6358bce 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-3.c +++ b/gcc/testsuite/gcc.dg/graphite/block-3.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - #define N 24 #define M 100 diff --git a/gcc/testsuite/gcc.dg/graphite/block-4.c b/gcc/testsuite/gcc.dg/graphite/block-4.c index e3649f0..773dfef 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-4.c +++ b/gcc/testsuite/gcc.dg/graphite/block-4.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - #define N 24 #define M 1000 diff --git a/gcc/testsuite/gcc.dg/graphite/block-5.c b/gcc/testsuite/gcc.dg/graphite/block-5.c index e0bd468..7864f32 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-5.c +++ b/gcc/testsuite/gcc.dg/graphite/block-5.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - #define N 10000 void foo (int); int test () @@ -22,5 +20,5 @@ int test () } /* Interchange is legal for loops 0 and 1 of the first two SCoPs */ -/* { dg-final { scan-tree-dump-times "Interchange valid for loops 0 and 1:" 2 "graphite"} } */ +/* { dg-final { scan-tree-dump-times "Interchange valid for loops 0 and 1:" 2 "graphite" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gcc.dg/graphite/block-6.c b/gcc/testsuite/gcc.dg/graphite/block-6.c index 77429f1..5545ec9 100644 --- a/gcc/testsuite/gcc.dg/graphite/block-6.c +++ b/gcc/testsuite/gcc.dg/graphite/block-6.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ - #define N 10000 void foo (int); int test () @@ -21,5 +19,5 @@ int test () } /* Interchange is not legal for loops 0 and 1 of SCoP 2. */ -/* { dg-final { scan-tree-dump-times "Interchange not valid for loops 0 and 1:" 1 "graphite"} } */ +/* { dg-final { scan-tree-dump-times "Interchange not valid for loops 0 and 1:" 1 "graphite" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gcc.dg/graphite/graphite.exp b/gcc/testsuite/gcc.dg/graphite/graphite.exp index a125717..17e6b2b 100644 --- a/gcc/testsuite/gcc.dg/graphite/graphite.exp +++ b/gcc/testsuite/gcc.dg/graphite/graphite.exp @@ -23,23 +23,66 @@ if ![check_effective_target_fgraphite] { return } +# Remove VALUE from LIST_VARIABLE. +proc lremove {list_variable value} { + upvar 1 $list_variable var + set idx [lsearch -exact $var $value] + set var [lreplace $var $idx $idx] +} + # The default action for a test is 'compile'. Save current default. global dg-do-what-default set save-dg-do-what-default ${dg-do-what-default} set dg-do-what-default compile -# If a testcase doesn't have special options, use these. -global DEFAULT_CFLAGS -if ![info exists DEFAULT_CFLAGS] then { - set DEFAULT_CFLAGS " -ansi -pedantic-errors" -} - # Initialize `dg'. dg-init # Main loop. -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ - "" $DEFAULT_CFLAGS + +set wait_to_run_files [lsort [glob -nocomplain $srcdir/$subdir/*.c ] ] + +# Flags using for block-* files. +set DEFAULT_CFLAGS_GRAPHITE_BLOCK "-O2 -fdump-tree-graphite-all" +set block_files [lsort [glob -nocomplain $srcdir/$subdir/block-*.c ] ] +dg-runtest $block_files "" $DEFAULT_CFLAGS_GRAPHITE_BLOCK +foreach block_file $block_files {lremove wait_to_run_files $block_file} + +# Flags using for id-* files. +set DEFAULT_CFLAGS_GRAPHITE_IDENTITY "-O2 -fgraphite-identity -fdump-tree-graphite-all" +set id_files [lsort [glob -nocomplain $srcdir/$subdir/id-*.c ] ] +dg-runtest $id_files "" $DEFAULT_CFLAGS_GRAPHITE_IDENTITY +foreach id_file $id_files {lremove wait_to_run_files $id_file} + +# Flags using for interchange-* files. +set DEFAULT_CFLAGS_GRAPHITE_BLOCK "-O2 -fdump-tree-graphite-all -floop-interchange" +set interchange_files [lsort [glob -nocomplain $srcdir/$subdir/interchange-*.c ] ] +dg-runtest $interchange_files "" $DEFAULT_CFLAGS_GRAPHITE_BLOCK +foreach interchange_file $interchange_files {lremove wait_to_run_files $interchange_file} + +# Flags using for scop-* files. +set DEFAULT_CFLAGS_GRAPHITE_SCOP "-O2 -fgraphite -fdump-tree-graphite-all" +set scop_files [lsort [glob -nocomplain $srcdir/$subdir/scop-*.c ] ] +dg-runtest $scop_files "" $DEFAULT_CFLAGS_GRAPHITE_SCOP +foreach scop_file $scop_files {lremove wait_to_run_files $scop_file} + + +# Schedule now the tests to be run. +set dg-do-what-default run + +# Flags using for run-id-* files. +set DEFAULT_CFLAGS_RUN_ID "-O2 -fgraphite-identity" +set run_id_files [lsort [glob -nocomplain $srcdir/$subdir/run-id-*.c ] ] +dg-runtest $run_id_files "" $DEFAULT_CFLAGS_RUN_ID +foreach run_id_file $run_id_files {lremove wait_to_run_files $run_id_file} + + +# The default action for the rest of the files is 'compile'. +set dg-do-what-default compile + +# Flags using for other files. +set DEFAULT_CFLAGS_GRAPHITE "-ansi -pedantic-errors" +dg-runtest $wait_to_run_files "" $DEFAULT_CFLAGS_GRAPHITE # Clean up. set dg-do-what-default ${save-dg-do-what-default} diff --git a/gcc/testsuite/gcc.dg/graphite/pr37485.c b/gcc/testsuite/gcc.dg/graphite/pr37485.c index cf0969b..ce2507b 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37485.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37485.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ +/* { dg-options "-O2 -fdump-tree-graphite-all" } */ typedef unsigned char UChar; typedef int Int32; diff --git a/gcc/testsuite/gcc.dg/graphite/pr37684.c b/gcc/testsuite/gcc.dg/graphite/pr37684.c index a9e6f5a..ab5a685 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37684.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37684.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } */ +/* { dg-options "-O2 -fdump-tree-graphite-all" } */ typedef struct _IO_FILE FILE; struct _IO_marker { diff --git a/gcc/testsuite/gcc.dg/graphite/pr37828.c b/gcc/testsuite/gcc.dg/graphite/pr37828.c index 0a0412d..df0ef7c 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37828.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37828.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block" } */ +/* { dg-options "-O2" } */ typedef struct foo { diff --git a/gcc/testsuite/gcc.dg/graphite/pr37883.c b/gcc/testsuite/gcc.dg/graphite/pr37883.c index 2ab043a..9b38656 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37883.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37883.c @@ -1,4 +1,4 @@ -/* { dg-options "-O3 -floop-block" } */ +/* { dg-options "-O3" } */ void test_sort() { diff --git a/gcc/testsuite/gcc.dg/graphite/pr37928.c b/gcc/testsuite/gcc.dg/graphite/pr37928.c index 47ad5bc..3c33f3a 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37928.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37928.c @@ -1,4 +1,4 @@ -/* { dg-options "-O3 -floop-block" } */ +/* { dg-options "-O3" } */ int get_state(int size, int *node, int *hash) { diff --git a/gcc/testsuite/gcc.dg/graphite/pr37943.c b/gcc/testsuite/gcc.dg/graphite/pr37943.c index a4b4fe5..4513d12 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr37943.c +++ b/gcc/testsuite/gcc.dg/graphite/pr37943.c @@ -31,4 +31,3 @@ unsigned char compress(test *in) } /* { dg-final { cleanup-tree-dump "graphite" } } */ - diff --git a/gcc/testsuite/gcc.dg/graphite/pr38409.c b/gcc/testsuite/gcc.dg/graphite/pr38409.c index 41c6775..5cdb472 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr38409.c +++ b/gcc/testsuite/gcc.dg/graphite/pr38409.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block" } */ +/* { dg-options "-O2" } */ typedef struct test input ; struct test diff --git a/gcc/testsuite/gcc.dg/graphite/pr38498.c b/gcc/testsuite/gcc.dg/graphite/pr38498.c index c79bbad..d20b4ae 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr38498.c +++ b/gcc/testsuite/gcc.dg/graphite/pr38498.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block" } */ +/* { dg-options "-O2" } */ double test_vector (float **data, int rows, int cols, int vqrows,double epsilon, int maxiter,int **mean, int *map) { diff --git a/gcc/testsuite/gcc.dg/graphite/pr38559.c b/gcc/testsuite/gcc.dg/graphite/pr38559.c index 1e2ef0a..7f90a50 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr38559.c +++ b/gcc/testsuite/gcc.dg/graphite/pr38559.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-block" } */ +/* { dg-options "-O2" } */ int test() { diff --git a/gcc/testsuite/gcc.dg/graphite/pr39335.c b/gcc/testsuite/gcc.dg/graphite/pr39335.c index c86e03a..5b8fb54 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr39335.c +++ b/gcc/testsuite/gcc.dg/graphite/pr39335.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-interchange" } */ +/* { dg-options "-O2" } */ typedef unsigned char byte; typedef struct gx_device_s gx_device; diff --git a/gcc/testsuite/gcc.dg/graphite/pr39335_1.c b/gcc/testsuite/gcc.dg/graphite/pr39335_1.c index 257c2c9..dfa2465 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr39335_1.c +++ b/gcc/testsuite/gcc.dg/graphite/pr39335_1.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -floop-interchange" } */ +/* { dg-options "-O2" } */ void crash_me(int num1, int num2, char * in, char * out) { diff --git a/gcc/testsuite/gcc.dg/graphite/scop-0.c b/gcc/testsuite/gcc.dg/graphite/scop-0.c index ea3ae06..067e7bc 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-0.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-0.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - int foo (void); void bar (void); diff --git a/gcc/testsuite/gcc.dg/graphite/scop-1.c b/gcc/testsuite/gcc.dg/graphite/scop-1.c index ed6159f..ba2590c 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-1.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-1.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-10.c b/gcc/testsuite/gcc.dg/graphite/scop-10.c index 8aff2c7..139f4c1 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-10.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-10.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-11.c b/gcc/testsuite/gcc.dg/graphite/scop-11.c index e5a0fdb..544b36b 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-11.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-11.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-12.c b/gcc/testsuite/gcc.dg/graphite/scop-12.c index 0c13033..71d34b1 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-12.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-12.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-13.c b/gcc/testsuite/gcc.dg/graphite/scop-13.c index aa55e10..b2ca5b4 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-13.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-13.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-14.c b/gcc/testsuite/gcc.dg/graphite/scop-14.c index a707b01..867e293 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-14.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-14.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-15.c b/gcc/testsuite/gcc.dg/graphite/scop-15.c index 9324631..6b2c2bd 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-15.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-15.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - # define EXTERN(type, array) extern type array[] typedef unsigned char uch; typedef unsigned short ush; diff --git a/gcc/testsuite/gcc.dg/graphite/scop-16.c b/gcc/testsuite/gcc.dg/graphite/scop-16.c index d0b32f6..d465d95 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-16.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-16.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - #define N 10000 void foo (int); int test () diff --git a/gcc/testsuite/gcc.dg/graphite/scop-17.c b/gcc/testsuite/gcc.dg/graphite/scop-17.c index c2fec3f..dd7bdad 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-17.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-17.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - #define N 10000 void foo (int); int test () diff --git a/gcc/testsuite/gcc.dg/graphite/scop-18.c b/gcc/testsuite/gcc.dg/graphite/scop-18.c index 6264116..7d56cb7 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-18.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-18.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - #define N 24 #define M 1000 diff --git a/gcc/testsuite/gcc.dg/graphite/scop-19.c b/gcc/testsuite/gcc.dg/graphite/scop-19.c index 3ad4997..cfbf401 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-19.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-19.c @@ -1,4 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ typedef unsigned int __uint32_t; typedef __uint32_t __size_t; typedef __size_t size_t; diff --git a/gcc/testsuite/gcc.dg/graphite/scop-2.c b/gcc/testsuite/gcc.dg/graphite/scop-2.c index cf25dcd..9e494f4 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-2.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-2.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-3.c b/gcc/testsuite/gcc.dg/graphite/scop-3.c index 1789e6b..e20bfdc 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-3.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-3.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - int toto() { int i, j, k; @@ -26,5 +24,5 @@ int toto() return a[3][5] + b[1]; } -/* { dg-final { scan-tree-dump-times "number of SCoPs: 3" 1 "graphite"} } */ +/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gcc.dg/graphite/scop-4.c b/gcc/testsuite/gcc.dg/graphite/scop-4.c index 515c53a..4ab2d07 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-4.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-4.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-5.c b/gcc/testsuite/gcc.dg/graphite/scop-5.c index 697a28e..4f4b45b 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-5.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-5.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-6.c b/gcc/testsuite/gcc.dg/graphite/scop-6.c index d262320..df208ac 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-6.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-6.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-7.c b/gcc/testsuite/gcc.dg/graphite/scop-7.c index 1187ce1..c02748f 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-7.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-7.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-8.c b/gcc/testsuite/gcc.dg/graphite/scop-8.c index 491ad37..3f14e34 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-8.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-8.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - int bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-9.c b/gcc/testsuite/gcc.dg/graphite/scop-9.c index 871b86b..a803d92 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-9.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-9.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - void bar (void); int toto() diff --git a/gcc/testsuite/gcc.dg/graphite/scop-matmult.c b/gcc/testsuite/gcc.dg/graphite/scop-matmult.c index 61a5be1..2d2dce3 100644 --- a/gcc/testsuite/gcc.dg/graphite/scop-matmult.c +++ b/gcc/testsuite/gcc.dg/graphite/scop-matmult.c @@ -1,5 +1,3 @@ -/* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */ - float A[1000][1000], B[1000][1000], C[1000][1000]; /* Multiply two n x n matrices A and B and store the result in C. */ @@ -16,5 +14,5 @@ void matmult (int n) /* This one fails because the number of iterations cannot be determined anymore for the outermost loop. */ -/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite" } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ diff --git a/gcc/testsuite/gfortran.dg/graphite/block-1.f90 b/gcc/testsuite/gfortran.dg/graphite/block-1.f90 index 124f06d..8125853 100644 --- a/gcc/testsuite/gfortran.dg/graphite/block-1.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/block-1.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } - subroutine matrix_multiply(a,b,c,n) real(8), dimension(n,n) :: a,b,c diff --git a/gcc/testsuite/gfortran.dg/graphite/block-2.f b/gcc/testsuite/gfortran.dg/graphite/block-2.f index af966ec..6c7ee6f 100644 --- a/gcc/testsuite/gfortran.dg/graphite/block-2.f +++ b/gcc/testsuite/gfortran.dg/graphite/block-2.f @@ -1,5 +1,3 @@ -! { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } - SUBROUTINE MATRIX_MUL_UNROLLED (A, B, C, L, M, N) DIMENSION A(L,M), B(M,N), C(L,N) diff --git a/gcc/testsuite/gfortran.dg/graphite/block-3.f90 b/gcc/testsuite/gfortran.dg/graphite/block-3.f90 index c7809d3..1579e66 100644 --- a/gcc/testsuite/gfortran.dg/graphite/block-3.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/block-3.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } - subroutine matrix_multiply(a,b,c,n) real(8), dimension(n,n) :: a,b,c diff --git a/gcc/testsuite/gfortran.dg/graphite/block-4.f90 b/gcc/testsuite/gfortran.dg/graphite/block-4.f90 index 586a777..f37d70a 100644 --- a/gcc/testsuite/gfortran.dg/graphite/block-4.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/block-4.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -floop-block -fdump-tree-graphite-all" } - subroutine matrix_multiply(a,b,c,n) real(8), dimension(n,n) :: a,b,c diff --git a/gcc/testsuite/gfortran.dg/graphite/graphite.exp b/gcc/testsuite/gfortran.dg/graphite/graphite.exp index a9fdb2c..717413e 100644 --- a/gcc/testsuite/gfortran.dg/graphite/graphite.exp +++ b/gcc/testsuite/gfortran.dg/graphite/graphite.exp @@ -23,23 +23,64 @@ if ![check_effective_target_fgraphite] { return } +# Remove VALUE from LIST_VARIABLE. +proc lremove {list_variable value} { + upvar 1 $list_variable var + set idx [lsearch -exact $var $value] + set var [lreplace $var $idx $idx] +} + # The default action for a test is 'compile'. Save current default. global dg-do-what-default set save-dg-do-what-default ${dg-do-what-default} set dg-do-what-default compile -# If a testcase doesn't have special options, use these. -set DEFAULT_GRAPHITE_FLAGS "" - # Initialize `dg'. dg-init # Main loop. -gfortran-dg-runtest [lsort \ - [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ] $DEFAULT_GRAPHITE_FLAGS +set wait_to_run_files [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ] + +# Flags using for block-* files. +set DEFAULT_FLAGS_GRAPHITE_BLOCK "-O2 -fdump-tree-graphite-all" +set block_files [lsort [glob -nocomplain $srcdir/$subdir/block-*.\[fF\]{,90,95,03,08} ] ] +gfortran-dg-runtest $block_files $DEFAULT_FLAGS_GRAPHITE_BLOCK +foreach block_file $block_files {lremove wait_to_run_files $block_file} + +# Flags using for id-* files. +set DEFAULT_FLAGS_GRAPHITE_IDENTITY "-O2 -fgraphite-identity -fdump-tree-graphite-all" +set id_files [lsort [glob -nocomplain $srcdir/$subdir/id-*.\[fF\]{,90,95,03,08} ] ] +gfortran-dg-runtest $id_files $DEFAULT_FLAGS_GRAPHITE_IDENTITY +foreach id_file $id_files {lremove wait_to_run_files $id_file} + +# Flags using for interchange-* files. +set DEFAULT_FLAGS_GRAPHITE_BLOCK "-O2 -fdump-tree-graphite-all -floop-interchange" +set interchange_files [lsort [glob -nocomplain $srcdir/$subdir/interchange-*.\[fF\]{,90,95,03,08} ] ] +gfortran-dg-runtest $interchange_files $DEFAULT_FLAGS_GRAPHITE_BLOCK +foreach interchange_file $interchange_files {lremove wait_to_run_files $interchange_file} -gfortran-dg-runtest [lsort \ - [glob -nocomplain $srcdir/$subdir/g77/*.\[fF\] ] ] $DEFAULT_GRAPHITE_FLAGS +# Flags using for scop-* files. +set DEFAULT_FLAGS_GRAPHITE_SCOP "-O2 -fgraphite -fdump-tree-graphite-all" +set scop_files [lsort [glob -nocomplain $srcdir/$subdir/scop-*.\[fF\]{,90,95,03,08} ] ] +gfortran-dg-runtest $scop_files $DEFAULT_FLAGS_GRAPHITE_SCOP +foreach scop_file $scop_files {lremove wait_to_run_files $scop_file} + +# Schedule now the tests to be run. +set dg-do-what-default run + +# Flags using for run-id-* files. +set DEFAULT_FLAGS_RUN_ID "-O2 -fgraphite-identity" +set run_id_files [lsort [glob -nocomplain $srcdir/$subdir/run-id-*.\[fF\]{,90,95,03,08} ] ] +gfortran-dg-runtest $run_id_files $DEFAULT_FLAGS_RUN_ID +foreach run_id_file $run_id_files {lremove wait_to_run_files $run_id_file} + + +# The default action for the rest of the files is 'compile'. +set dg-do-what-default compile + +# Flags using for other files. +set DEFAULT_GRAPHITE_FLAGS "" +gfortran-dg-runtest $wait_to_run_files $DEFAULT_GRAPHITE_FLAGS # Clean up. set dg-do-what-default ${save-dg-do-what-default} diff --git a/gcc/testsuite/gfortran.dg/graphite/id-2.f90 b/gcc/testsuite/gfortran.dg/graphite/id-2.f90 index 0c9f54b..720fff8 100644 --- a/gcc/testsuite/gfortran.dg/graphite/id-2.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/id-2.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -fgraphite-identity" } - module solv_cap integer, parameter, public :: dp = selected_real_kind(5) contains diff --git a/gcc/testsuite/gfortran.dg/graphite/id-3.f90 b/gcc/testsuite/gfortran.dg/graphite/id-3.f90 index 394bdf7..7f0efc7 100644 --- a/gcc/testsuite/gfortran.dg/graphite/id-3.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/id-3.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -fgraphite-identity" } - subroutine gentrs (ptrst, ncls, xmin, dcls, xdont, ndon) do icls1 = 1, ncls prec: do diff --git a/gcc/testsuite/gfortran.dg/graphite/id-4.f90 b/gcc/testsuite/gfortran.dg/graphite/id-4.f90 index 896d608..b2c6cb0 100644 --- a/gcc/testsuite/gfortran.dg/graphite/id-4.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/id-4.f90 @@ -1,5 +1,3 @@ -! { dg-options "-O2 -fgraphite-identity" } - MODULE Vcimage CHARACTER (LEN=80), SAVE :: CARD, FIELD END MODULE Vcimage diff --git a/gcc/testsuite/gfortran.dg/graphite/pr37852.f90 b/gcc/testsuite/gfortran.dg/graphite/pr37852.f90 index 50e2342..a5d48b7 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr37852.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr37852.f90 @@ -1,4 +1,4 @@ -! { dg-options "-O2 -floop-block" } +! { dg-options "-O2 " } PROGRAM TEST_FPU CHARACTER (LEN=36) :: invert_id(1) = & diff --git a/gcc/testsuite/gfortran.dg/graphite/pr37857.f90 b/gcc/testsuite/gfortran.dg/graphite/pr37857.f90 index de2d3a1..c2cccb7 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr37857.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr37857.f90 @@ -1,4 +1,4 @@ -! { dg-options "-O2 -floop-block" } +! { dg-options "-O2 " } program superficie_proteina integer, parameter :: LONGreal = selected_real_kind(12,90) diff --git a/gcc/testsuite/gfortran.dg/graphite/pr37980.f90 b/gcc/testsuite/gfortran.dg/graphite/pr37980.f90 index 5306aa8..62eccf3 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr37980.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr37980.f90 @@ -1,4 +1,4 @@ -! { dg-options "-O2 -floop-block" } +! { dg-options "-O2 " } module INT_MODULE contains diff --git a/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 b/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 index 834d33a..da8c3cc 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr38083.f90 @@ -1,4 +1,4 @@ -! { dg-options "-O3 -floop-block" } +! { dg-options "-O3 " } SUBROUTINE IVSORT (IL,IH,NSEGS,IOUNIT) INTEGER IOUNIT diff --git a/gcc/testsuite/gfortran.dg/graphite/pr38953.f90 b/gcc/testsuite/gfortran.dg/graphite/pr38953.f90 index 245db0d..7322476 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr38953.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr38953.f90 @@ -1,4 +1,4 @@ -! { dg-options "-O3 -floop-block -fgraphite-identity" } +! { dg-options "-O3 -fgraphite-identity" } MODULE MAIN1 INTEGER , PARAMETER :: IFMAX = 40 , IKN = 85 , ISTRG = 132 , & diff --git a/gcc/testsuite/gfortran.dg/graphite/scop-1.f b/gcc/testsuite/gfortran.dg/graphite/scop-1.f index a279aba..5bd463c 100644 --- a/gcc/testsuite/gfortran.dg/graphite/scop-1.f +++ b/gcc/testsuite/gfortran.dg/graphite/scop-1.f @@ -1,5 +1,3 @@ -C { dg-options "-O2 -fgraphite" } - dimension p1(2),t(6,4),b1(2),b2(2),al1(2),al2(2),g1(2),g2(2) save if(nlin.eq.0) then @@ -11,3 +9,5 @@ C { dg-options "-O2 -fgraphite" } endif end +! { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite" { xfail *-*-* } } } +! { dg-final { cleanup-tree-dump "graphite" } } -- 2.7.4