Commit 73d1c650 by Richard Biener Committed by Richard Biener

graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Restore valid IL…

graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Restore valid IL after code generation errors.

2017-09-21  Richard Biener  <rguenther@suse.de>

	* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl):
	Restore valid IL after code generation errors.
	* graphite.c (graphite_transform_loops): Diagnose code
	generation issues as MSG_MISSED_OPTIMIZATION and continue
	with processing SCOPs.

From-SVN: r253060
parent a708f4b6
2017-09-21 Richard Biener <rguenther@suse.de>
* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl):
Restore valid IL after code generation errors.
* graphite.c (graphite_transform_loops): Diagnose code
generation issues as MSG_MISSED_OPTIMIZATION and continue
with processing SCOPs.
2017-09-21 Richard Sandiford <richard.sandiford@linaro.org> 2017-09-21 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
...@@ -2997,6 +2997,26 @@ graphite_regenerate_ast_isl (scop_p scop) ...@@ -2997,6 +2997,26 @@ graphite_regenerate_ast_isl (scop_p scop)
} }
} }
if (t.codegen_error_p ())
{
/* We registered new names, scrap that. */
if (need_ssa_update_p (cfun))
delete_update_ssa ();
/* Remove the unreachable region. */
remove_edge_and_dominated_blocks (if_region->true_region->region.entry);
basic_block ifb = if_region->false_region->region.entry->src;
gimple_stmt_iterator gsi = gsi_last_bb (ifb);
gsi_remove (&gsi, true);
if_region->false_region->region.entry->flags &= ~EDGE_FALSE_VALUE;
if_region->false_region->region.entry->flags |= EDGE_FALLTHRU;
/* remove_edge_and_dominated_blocks marks loops for removal but
doesn't actually remove them (fix that...). */
loop_p loop;
FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
if (! loop->header)
delete_loop (loop);
}
free (if_region->true_region); free (if_region->true_region);
free (if_region->region); free (if_region->region);
free (if_region); free (if_region);
......
...@@ -337,17 +337,16 @@ graphite_transform_loops (void) ...@@ -337,17 +337,16 @@ graphite_transform_loops (void)
if (!apply_poly_transforms (scop)) if (!apply_poly_transforms (scop))
continue; continue;
location_t loc = find_loop_location
(scops[i]->scop_info->region.entry->dest->loop_father);
need_cfg_cleanup_p = true; need_cfg_cleanup_p = true;
/* When code generation is not successful, do not continue
generating code for the next scops: the IR has to be cleaned up
and could be in an inconsistent state. */
if (!graphite_regenerate_ast_isl (scop)) if (!graphite_regenerate_ast_isl (scop))
break; dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
"loop nest not optimized, code generation error\n");
location_t loc = find_loop_location else
(scop->scop_info->region.entry->dest->loop_father); dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, "loop nest optimized\n");
"loop nest optimized\n");
} }
free_scops (scops); free_scops (scops);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment