re PR tree-optimization/81090 ([graphite] ICE in loop_preheader_edge)
2017-06-16 Richard Biener <rguenther@suse.de> PR tree-optimization/81090 * passes.def (pass_record_bounds): Remove. * tree-pass.h (make_pass_record_bounds): Likewise. * tree-ssa-loop.c (pass_data_record_bounds, pass_record_bounds, make_pass_record_bounds): Likewise. * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Do not free niter estimates at the beginning but at the end. * tree-scalar-evolution.c (scev_finalize): Free niter estimates. * gcc.dg/graphite/pr81090.c: New testcase. From-SVN: r249249
This commit is contained in:
parent
4317778a9b
commit
01f1c24e42
@ -1,3 +1,14 @@
|
||||
2017-06-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/81090
|
||||
* passes.def (pass_record_bounds): Remove.
|
||||
* tree-pass.h (make_pass_record_bounds): Likewise.
|
||||
* tree-ssa-loop.c (pass_data_record_bounds, pass_record_bounds,
|
||||
make_pass_record_bounds): Likewise.
|
||||
* tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Do
|
||||
not free niter estimates at the beginning but at the end.
|
||||
* tree-scalar-evolution.c (scev_finalize): Free niter estimates.
|
||||
|
||||
2017-06-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-switch-conversion.c (emit_case_bit_tests): Adjust
|
||||
|
@ -276,7 +276,6 @@ along with GCC; see the file COPYING3. If not see
|
||||
/* All unswitching, final value replacement and splitting can expose
|
||||
empty loops. Remove them now. */
|
||||
NEXT_PASS (pass_cd_dce);
|
||||
NEXT_PASS (pass_record_bounds);
|
||||
NEXT_PASS (pass_iv_canon);
|
||||
NEXT_PASS (pass_loop_distribution);
|
||||
NEXT_PASS (pass_copy_prop);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-06-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/81090
|
||||
* gcc.dg/graphite/pr81090.c: New testcase.
|
||||
|
||||
2017-06-16 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/80983
|
||||
|
27
gcc/testsuite/gcc.dg/graphite/pr81090.c
Normal file
27
gcc/testsuite/gcc.dg/graphite/pr81090.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -floop-nest-optimize" } */
|
||||
|
||||
int x3, za;
|
||||
int hg[1];
|
||||
|
||||
void
|
||||
yw (int dq)
|
||||
{
|
||||
const int r7 = 2;
|
||||
|
||||
while (dq < 1)
|
||||
{
|
||||
for (x3 = 0; x3 < r7; ++x3)
|
||||
for (za = 0; za < r7; ++za)
|
||||
hg[1] = 0;
|
||||
++dq;
|
||||
}
|
||||
|
||||
x3 = 0;
|
||||
while (x3 < r7)
|
||||
{
|
||||
++x3;
|
||||
if (x3 == 0)
|
||||
break;
|
||||
}
|
||||
}
|
@ -373,7 +373,6 @@ extern gimple_opt_pass *make_pass_predcom (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_iv_canon (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_scev_cprop (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_empty_loop (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_record_bounds (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_graphite (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_graphite_transforms (gcc::context *ctxt);
|
||||
extern gimple_opt_pass *make_pass_if_conversion (gcc::context *ctxt);
|
||||
|
@ -3636,6 +3636,7 @@ scev_finalize (void)
|
||||
return;
|
||||
scalar_evolution_info->empty ();
|
||||
scalar_evolution_info = NULL;
|
||||
free_numbers_of_iterations_estimates (cfun);
|
||||
}
|
||||
|
||||
/* Returns true if the expression EXPR is considered to be too expensive
|
||||
|
@ -1212,7 +1212,6 @@ canonicalize_induction_variables (void)
|
||||
bool irred_invalidated = false;
|
||||
bitmap loop_closed_ssa_invalidated = BITMAP_ALLOC (NULL);
|
||||
|
||||
free_numbers_of_iterations_estimates (cfun);
|
||||
estimate_numbers_of_iterations ();
|
||||
|
||||
FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
|
||||
@ -1230,6 +1229,7 @@ canonicalize_induction_variables (void)
|
||||
|
||||
/* Clean up the information about numbers of iterations, since brute force
|
||||
evaluation could reveal new information. */
|
||||
free_numbers_of_iterations_estimates (cfun);
|
||||
scev_reset ();
|
||||
|
||||
if (!bitmap_empty_p (loop_closed_ssa_invalidated))
|
||||
|
@ -459,54 +459,6 @@ make_pass_scev_cprop (gcc::context *ctxt)
|
||||
return new pass_scev_cprop (ctxt);
|
||||
}
|
||||
|
||||
/* Record bounds on numbers of iterations of loops. */
|
||||
|
||||
namespace {
|
||||
|
||||
const pass_data pass_data_record_bounds =
|
||||
{
|
||||
GIMPLE_PASS, /* type */
|
||||
"*record_bounds", /* name */
|
||||
OPTGROUP_NONE, /* optinfo_flags */
|
||||
TV_TREE_LOOP_BOUNDS, /* tv_id */
|
||||
( PROP_cfg | PROP_ssa ), /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
0, /* todo_flags_finish */
|
||||
};
|
||||
|
||||
class pass_record_bounds : public gimple_opt_pass
|
||||
{
|
||||
public:
|
||||
pass_record_bounds (gcc::context *ctxt)
|
||||
: gimple_opt_pass (pass_data_record_bounds, ctxt)
|
||||
{}
|
||||
|
||||
/* opt_pass methods: */
|
||||
virtual unsigned int execute (function *);
|
||||
|
||||
}; // class pass_record_bounds
|
||||
|
||||
unsigned int
|
||||
pass_record_bounds::execute (function *fun)
|
||||
{
|
||||
if (number_of_loops (fun) <= 1)
|
||||
return 0;
|
||||
|
||||
estimate_numbers_of_iterations ();
|
||||
scev_reset ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // anon namespace
|
||||
|
||||
gimple_opt_pass *
|
||||
make_pass_record_bounds (gcc::context *ctxt)
|
||||
{
|
||||
return new pass_record_bounds (ctxt);
|
||||
}
|
||||
|
||||
/* Induction variable optimizations. */
|
||||
|
||||
namespace {
|
||||
|
Loading…
Reference in New Issue
Block a user