From f4648ed13904dcf3fc8af24896055843b46b2d96 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Wed, 12 Aug 2009 14:23:01 +0000 Subject: Restore original scattering when the transform is not legal. 2009-08-05 Sebastian Pop * graphite-blocking.c (scop_do_strip_mine): Call store_scattering. Early return without analyzing the data dependences if no transform has been done. Call restore_scattering if the transform is not legal. (graphite-interchange.c): Same. * graphite-poly.c (print_scattering_function): Test for PBB_TRANSFORMED. (graphite_read_transforms): Initialize PBB_TRANSFORMED. (apply_poly_transforms): Do not gcc_assert that the transform is legal. (new_poly_bb): Initialize PBB_TRANSFORMED, PBB_SAVED, and PBB_ORIGINAL. Do not initialize PBB_NB_SCATTERING_TRANSFORM, PBB_NB_LOCAL_VARIABLES, PBB_TRANSFORMED_SCATTERING, and PBB_ORIGINAL_SCATTERING. (free_poly_dr): Free PBB_TRANSFORMED, PBB_SAVED, and PBB_ORIGINAL. * graphite-poly.h (struct poly_scattering): New. (struct poly_bb): Add original, transformed, and saved fields. Remove transformed_scattering, original_scattering, nb_local_variables, and nb_scattering_transform fields. (PBB_ORIGINAL, PBB_TRANSFORMED, PBB_SAVED): New. (poly_scattering_new): New. (poly_scattering_free): New. (poly_scattering_copy): New. (store_scattering_pbb): New. (store_scattering): New. (restore_scattering_pbb): New. (restore_scattering): New. * graphite-sese-to-poly.c (build_pbb_scattering_polyhedrons): Initialize PBB_TRANSFORMED and PBB_ORIGINAL. From-SVN: r150686 --- gcc/graphite-interchange.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'gcc/graphite-interchange.c') diff --git a/gcc/graphite-interchange.c b/gcc/graphite-interchange.c index 4639afe..785be70 100644 --- a/gcc/graphite-interchange.c +++ b/gcc/graphite-interchange.c @@ -388,9 +388,20 @@ scop_do_interchange (scop_p scop) poly_bb_p pbb; bool transform_done = false; + store_scattering (scop); + for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb); i++) transform_done |= pbb_do_interchange (pbb, scop); + if (!transform_done) + return false; + + if (!graphite_legal_transform (scop)) + { + restore_scattering (scop); + return false; + } + return transform_done; } -- cgit v1.1