From patchwork Mon Aug 2 20:20:29 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 60654 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 1909FB70AF for ; Tue, 3 Aug 2010 06:29:15 +1000 (EST) Received: (qmail 3909 invoked by alias); 2 Aug 2010 20:24:58 -0000 Received: (qmail 3371 invoked by uid 22791); 2 Aug 2010 20:24:43 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, TW_SV, TW_TM, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-gy0-f175.google.com (HELO mail-gy0-f175.google.com) (209.85.160.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 02 Aug 2010 20:24:36 +0000 Received: by mail-gy0-f175.google.com with SMTP id 8so1550974gyd.20 for ; Mon, 02 Aug 2010 13:24:35 -0700 (PDT) Received: by 10.151.76.9 with SMTP id d9mr7343556ybl.231.1280780675626; Mon, 02 Aug 2010 13:24:35 -0700 (PDT) Received: from napoca (cpe-70-120-196-107.austin.res.rr.com [70.120.196.107]) by mx.google.com with ESMTPS id m11sm5734430ybn.4.2010.08.02.13.24.33 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 02 Aug 2010 13:24:35 -0700 (PDT) Received: by napoca (sSMTP sendmail emulation); Mon, 02 Aug 2010 15:24:31 -0500 From: Sebastian Pop To: gcc-patches@gcc.gnu.org Cc: Tobias Grosser , gcc-graphite Subject: [PATCH 56/65] Call scev_reset_htab when Graphite out-of-SSA has changed something. Date: Mon, 2 Aug 2010 15:20:29 -0500 Message-Id: <1280780438-17543-57-git-send-email-sebpop@gmail.com> In-Reply-To: <1280780438-17543-1-git-send-email-sebpop@gmail.com> References: <1280780438-17543-1-git-send-email-sebpop@gmail.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org From: spop 2010-07-27 Sebastian Pop * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps): Returns a bool. (rewrite_commutative_reductions_out_of_ssa_close_phi): Same. (rewrite_commutative_reductions_out_of_ssa_loop): Same. (rewrite_cross_bb_scalar_deps_out_of_ssa): Call scev_reset_htab when something has been changed. (rewrite_commutative_reductions_out_of_ssa): Same. * gcc.dg/graphite/id-26.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/graphite@162599 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++ gcc/ChangeLog.graphite | 12 +++++ gcc/graphite-sese-to-poly.c | 75 ++++++++++++++++++++++---------- gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/gcc.dg/graphite/id-26.c | 24 ++++++++++ 5 files changed, 101 insertions(+), 24 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/graphite/id-26.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 976ccf2..559a2f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2010-08-02 Sebastian Pop + * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps): Returns + a bool. + (rewrite_commutative_reductions_out_of_ssa_close_phi): Same. + (rewrite_commutative_reductions_out_of_ssa_loop): Same. + (rewrite_cross_bb_scalar_deps_out_of_ssa): Call scev_reset_htab + when something has been changed. + (rewrite_commutative_reductions_out_of_ssa): Same. + +2010-08-02 Sebastian Pop + * graphite-sese-to-poly.c (propagate_expr_outside_region): Also handle the case when def is in the sese region. (rewrite_close_phi_out_of_ssa): Call propagate_expr_outside_region diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index cf0bd6b..bcdd3a9 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,15 @@ +2010-07-27 Sebastian Pop + + * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps): Returns + a bool. + (rewrite_commutative_reductions_out_of_ssa_close_phi): Same. + (rewrite_commutative_reductions_out_of_ssa_loop): Same. + (rewrite_cross_bb_scalar_deps_out_of_ssa): Call scev_reset_htab + when something has been changed. + (rewrite_commutative_reductions_out_of_ssa): Same. + + * gcc.dg/graphite/id-26.c: New. + 2010-07-26 Sebastian Pop * graphite-sese-to-poly.c (propagate_expr_outside_region): Also diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index f92c97e..44c6588 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2428,9 +2428,10 @@ rewrite_cross_bb_scalar_dependence (tree zero_dim_array, tree def, gimple use_st } /* Rewrite the scalar dependences crossing the boundary of the BB - containing STMT with an array. */ + containing STMT with an array. Return true when something has been + changed. */ -static void +static bool rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) { gimple stmt = gsi_stmt (*gsi); @@ -2439,6 +2440,7 @@ rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) basic_block def_bb; tree zero_dim_array = NULL_TREE; gimple use_stmt; + bool res = false; switch (gimple_code (stmt)) { @@ -2451,27 +2453,29 @@ rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) break; default: - return; + return false; } if (!is_gimple_reg (def)) - return; + return false; if (scev_analyzable_p (def, region)) { loop_p loop = loop_containing_stmt (SSA_NAME_DEF_STMT (def)); tree scev = scalar_evolution_in_region (region, loop, def); - if (tree_does_not_contain_chrecs (scev)) - propagate_expr_outside_region (def, scev, region); + if (tree_contains_chrecs (scev, NULL)) + return false; - return; + propagate_expr_outside_region (def, scev, region); + return true; } def_bb = gimple_bb (stmt); FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, def) - if (gimple_code (use_stmt) == GIMPLE_PHI) + if (gimple_code (use_stmt) == GIMPLE_PHI + && (res = true)) { gimple_stmt_iterator psi = gsi_for_stmt (use_stmt); @@ -2484,7 +2488,8 @@ rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, def) if (gimple_code (use_stmt) != GIMPLE_PHI && def_bb != gimple_bb (use_stmt) - && !is_gimple_debug (use_stmt)) + && !is_gimple_debug (use_stmt) + && (res = true)) { if (!zero_dim_array) { @@ -2497,6 +2502,8 @@ rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) rewrite_cross_bb_scalar_dependence (zero_dim_array, def, use_stmt); } + + return res; } /* Rewrite out of SSA all the reduction phi nodes of SCOP. */ @@ -2507,16 +2514,21 @@ rewrite_cross_bb_scalar_deps_out_of_ssa (scop_p scop) basic_block bb; gimple_stmt_iterator psi; sese region = SCOP_REGION (scop); + bool changed = false; FOR_EACH_BB (bb) if (bb_in_sese_p (bb, region)) for (psi = gsi_start_bb (bb); !gsi_end_p (psi); gsi_next (&psi)) - rewrite_cross_bb_scalar_deps (region, &psi); + changed |= rewrite_cross_bb_scalar_deps (region, &psi); - update_ssa (TODO_update_ssa); + if (changed) + { + scev_reset_htab (); + update_ssa (TODO_update_ssa); #ifdef ENABLE_CHECKING - verify_loop_closed_ssa (true); + verify_loop_closed_ssa (true); #endif + } } /* Returns the number of pbbs that are in loops contained in SCOP. */ @@ -2902,26 +2914,31 @@ translate_scalar_reduction_to_array (VEC (gimple, heap) *in, } } -/* Rewrites out of SSA a commutative reduction at CLOSE_PHI. */ +/* Rewrites out of SSA a commutative reduction at CLOSE_PHI. Returns + true when something has been changed. */ -static void +static bool rewrite_commutative_reductions_out_of_ssa_close_phi (gimple close_phi, sbitmap reductions) { + bool res; VEC (gimple, heap) *in = VEC_alloc (gimple, heap, 10); VEC (gimple, heap) *out = VEC_alloc (gimple, heap, 10); detect_commutative_reduction (close_phi, &in, &out); - if (VEC_length (gimple, in) > 0) + res = VEC_length (gimple, in) > 0; + if (res) translate_scalar_reduction_to_array (in, out, reductions); VEC_free (gimple, heap, in); VEC_free (gimple, heap, out); + return res; } -/* Rewrites all the commutative reductions from LOOP out of SSA. */ +/* Rewrites all the commutative reductions from LOOP out of SSA. + Returns true when something has been changed. */ -static void +static bool rewrite_commutative_reductions_out_of_ssa_loop (loop_p loop, sbitmap reductions, sese region) @@ -2929,16 +2946,19 @@ rewrite_commutative_reductions_out_of_ssa_loop (loop_p loop, gimple_stmt_iterator gsi; edge exit = single_exit (loop); tree res; + bool changed = false; if (!exit) - return; + return false; for (gsi = gsi_start_phis (exit->dest); !gsi_end_p (gsi); gsi_next (&gsi)) if ((res = gimple_phi_result (gsi_stmt (gsi))) && is_gimple_reg (res) && !scev_analyzable_p (res, region)) - rewrite_commutative_reductions_out_of_ssa_close_phi (gsi_stmt (gsi), - reductions); + changed |= rewrite_commutative_reductions_out_of_ssa_close_phi + (gsi_stmt (gsi), reductions); + + return changed; } /* Rewrites all the commutative reductions from SCOP out of SSA. */ @@ -2948,19 +2968,26 @@ rewrite_commutative_reductions_out_of_ssa (sese region, sbitmap reductions) { loop_iterator li; loop_p loop; + bool changed = false; if (!flag_associative_math) return; FOR_EACH_LOOP (li, loop, 0) if (loop_in_sese_p (loop, region)) - rewrite_commutative_reductions_out_of_ssa_loop (loop, reductions, region); + changed |= rewrite_commutative_reductions_out_of_ssa_loop (loop, + reductions, + region); - gsi_commit_edge_inserts (); - update_ssa (TODO_update_ssa); + if (changed) + { + scev_reset_htab (); + gsi_commit_edge_inserts (); + update_ssa (TODO_update_ssa); #ifdef ENABLE_CHECKING - verify_loop_closed_ssa (true); + verify_loop_closed_ssa (true); #endif + } } /* Java does not initialize long_long_integer_type_node. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9197cb2..c5d01bf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2010-08-02 Sebastian Pop + * gcc.dg/graphite/id-26.c: New. + +2010-08-02 Sebastian Pop + * gcc.dg/graphite/id-25.c: New. 2010-08-02 Sebastian Pop diff --git a/gcc/testsuite/gcc.dg/graphite/id-26.c b/gcc/testsuite/gcc.dg/graphite/id-26.c new file mode 100644 index 0000000..507d159 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/id-26.c @@ -0,0 +1,24 @@ +int find_sad_16x16(int *intra_mode) +{ + int current_intra_sad_2,best_intra_sad2; + int M1[16][16],M0[4][4][4][4],M3[4],M4[4][4]; + int i,j,k; + int ii,jj; + int up_avail, left_avail, left_up_avail; + for (i=0;i<17;i++) + if (left_up_avail) + { + for (jj=0;jj<4;jj++) + for (ii=0;ii<4;ii++) + for (j=0;j<4;j++) + for (i=0;i<4;i++) + { + M0[i][ii][2][jj]=M3[0]-M3[1]; + M0[i][ii][1][jj]=M3[2]+M3[3]; + current_intra_sad_2 += abs(M0[i][ii][j][jj]); + } + + if(current_intra_sad_2 < best_intra_sad2) + best_intra_sad2=current_intra_sad_2; + } +}