diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd8ba33d173..1ade1e74eac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-10-23 Tobias Grosser + + * graphite.c (graphite_apply_transformations): Check for + -fgraphite-identity. + * toplev.c (process_options): Add graphite_identity. + * tree-ssa-loop.c (gate_graphite_transforms): Add graphite_identity. + 2008-10-23 Bernd Schmidt * config/bfin/bfin.c (bdesc_2arg): Add mulhisill, mulhisilh, diff --git a/gcc/common.opt b/gcc/common.opt index 6f09dfdc2f4..4e680676c5b 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -567,6 +567,10 @@ floop-block Common Report Var(flag_loop_block) Optimization Enable Loop Blocking transformation +fgraphite-identity +Common Report Var(flag_graphite_identity) Optimization +Enable Graphite Identity transformation + fguess-branch-probability Common Report Var(flag_guess_branch_prob) Optimization Enable guessing of branch probabilities diff --git a/gcc/graphite.c b/gcc/graphite.c index 18174eecd91..a14dd141e3e 100644 --- a/gcc/graphite.c +++ b/gcc/graphite.c @@ -5068,17 +5068,13 @@ graphite_apply_transformations (scop_p scop) if (flag_loop_block) transform_done = graphite_trans_scop_block (scop); -#if 0 && ENABLE_CHECKING - /* When the compiler is configured with ENABLE_CHECKING, always - generate code, even if we did not apply any transformation. This - provides better code coverage of the backend code generator. - - This also allows to check the performance for an identity - transform: GIMPLE -> GRAPHITE -> GIMPLE; and the output of CLooG - is never an identity: if CLooG optimizations are not disabled, - the CLooG output is always optimized in control flow. */ - transform_done = true; -#endif + /* Generate code even if we did not apply any real transformation. + This also allows to check the performance for the identity + transformation: GIMPLE -> GRAPHITE -> GIMPLE + Keep in mind that CLooG optimizes in control, so the loop structure + may change, even if we only use -fgraphite-identity. */ + if (flag_graphite_identity) + transform_done = true; return transform_done; } diff --git a/gcc/toplev.c b/gcc/toplev.c index 24e4df77022..42ad2a48fde 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1707,7 +1707,8 @@ process_options (void) if (flag_graphite || flag_loop_block || flag_loop_interchange - || flag_loop_strip_mine) + || flag_loop_strip_mine + || flag_graphite_identity) sorry ("Graphite loop optimizations cannot be used"); #endif diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c index 51fc07c558a..2ea58f69043 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -305,7 +305,8 @@ gate_graphite_transforms (void) { /* Enable -fgraphite pass if any one of the graphite optimization flags is turned on. */ - if (flag_loop_block || flag_loop_interchange || flag_loop_strip_mine) + if (flag_loop_block || flag_loop_interchange || flag_loop_strip_mine + || flag_graphite_identity) flag_graphite = 1; return flag_graphite != 0;