From patchwork Mon Aug 2 20:20:28 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 60653 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 39653B70AA for ; Tue, 3 Aug 2010 06:29:10 +1000 (EST) Received: (qmail 3819 invoked by alias); 2 Aug 2010 20:24:56 -0000 Received: (qmail 3573 invoked by uid 22791); 2 Aug 2010 20:24:46 -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, RCVD_IN_DNSWL_NONE, TW_SV, TW_TM, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-yx0-f175.google.com (HELO mail-yx0-f175.google.com) (209.85.213.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 02 Aug 2010 20:24:33 +0000 Received: by mail-yx0-f175.google.com with SMTP id 11so1550776yxi.20 for ; Mon, 02 Aug 2010 13:24:32 -0700 (PDT) Received: by 10.151.42.18 with SMTP id u18mr7575041ybj.1.1280780672294; Mon, 02 Aug 2010 13:24:32 -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 u41sm4388250yba.13.2010.08.02.13.24.29 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 02 Aug 2010 13:24:31 -0700 (PDT) Received: by napoca (sSMTP sendmail emulation); Mon, 02 Aug 2010 15:24:28 -0500 From: Sebastian Pop To: gcc-patches@gcc.gnu.org Cc: Tobias Grosser , gcc-graphite Subject: [PATCH 55/65] Fix tonto: call propagate_expr_outside_region. Date: Mon, 2 Aug 2010 15:20:28 -0500 Message-Id: <1280780438-17543-56-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-26 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 for invariant expressions. (rewrite_cross_bb_phi_deps): Removed. (rewrite_cross_bb_scalar_deps): Also handle GIMPLE_PHI nodes. (rewrite_cross_bb_scalar_deps_out_of_ssa): Do not call rewrite_cross_bb_phi_deps. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/graphite@162556 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 11 +++++++ gcc/ChangeLog.graphite | 11 +++++++ gcc/graphite-sese-to-poly.c | 64 ++++++++++++++----------------------------- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f07a8b..976ccf2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 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 + for invariant expressions. + (rewrite_cross_bb_phi_deps): Removed. + (rewrite_cross_bb_scalar_deps): Also handle GIMPLE_PHI nodes. + (rewrite_cross_bb_scalar_deps_out_of_ssa): Do not call + rewrite_cross_bb_phi_deps.2 + +010-08-02 Sebastian Pop + * graphite-sese-to-poly.c (rewrite_commutative_reductions_out_of_ssa_loop): Call scev_analyzable_p only on is_gimple_reg diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 65607ec..cf0bd6b 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,16 @@ 2010-07-26 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 + for invariant expressions. + (rewrite_cross_bb_phi_deps): Removed. + (rewrite_cross_bb_scalar_deps): Also handle GIMPLE_PHI nodes. + (rewrite_cross_bb_scalar_deps_out_of_ssa): Do not call + rewrite_cross_bb_phi_deps. + +2010-07-26 Sebastian Pop + * graphite-sese-to-poly.c (rewrite_commutative_reductions_out_of_ssa_loop): Call scev_analyzable_p only on is_gimple_reg diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index ae8518f..f92c97e 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2193,8 +2193,7 @@ propagate_expr_outside_region (tree def, tree expr, sese region) gimple_seq stmts; bool replaced_once = false; - gcc_assert (TREE_CODE (def) == SSA_NAME - && bb_in_sese_p (gimple_bb (SSA_NAME_DEF_STMT (def)), region)); + gcc_assert (TREE_CODE (def) == SSA_NAME); expr = force_gimple_operand (unshare_expr (expr), &stmts, true, NULL_TREE); @@ -2245,7 +2244,11 @@ rewrite_close_phi_out_of_ssa (gimple_stmt_iterator *psi, sese region) if (is_gimple_min_invariant (arg) || SSA_NAME_IS_DEFAULT_DEF (arg) || gimple_bb (SSA_NAME_DEF_STMT (arg))->loop_father == bb->loop_father) - stmt = gimple_build_assign (res, arg); + { + propagate_expr_outside_region (res, arg, region); + gsi_next (psi); + return; + } /* If res is scev analyzable and is not a scalar value, it is safe to ignore the close phi node: it will be code generated in the @@ -2262,7 +2265,7 @@ rewrite_close_phi_out_of_ssa (gimple_stmt_iterator *psi, sese region) scev = compute_overall_effect_of_inner_loop (loop, scev); } else - scev = scalar_evolution_in_region (region, loop, res); + scev = scalar_evolution_in_region (region, loop, res); if (tree_does_not_contain_chrecs (scev)) propagate_expr_outside_region (res, scev, region); @@ -2425,38 +2428,6 @@ 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. GSI points to a definition that is - used in a PHI node. */ - -static void -rewrite_cross_bb_phi_deps (sese region, gimple_stmt_iterator gsi) -{ - gimple stmt = gsi_stmt (gsi); - imm_use_iterator imm_iter; - tree def; - gimple use_stmt; - - if (gimple_code (stmt) != GIMPLE_ASSIGN) - return; - - def = gimple_assign_lhs (stmt); - if (!is_gimple_reg (def) - || scev_analyzable_p (def, region)) - return; - - FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, def) - if (gimple_code (use_stmt) == GIMPLE_PHI) - { - gimple_stmt_iterator psi = gsi_for_stmt (use_stmt); - - if (scalar_close_phi_node_p (gsi_stmt (psi))) - rewrite_close_phi_out_of_ssa (&psi, region); - else - rewrite_phi_out_of_ssa (&psi); - } -} - -/* Rewrite the scalar dependences crossing the boundary of the BB containing STMT with an array. */ static void @@ -2500,11 +2471,21 @@ rewrite_cross_bb_scalar_deps (sese region, gimple_stmt_iterator *gsi) def_bb = gimple_bb (stmt); FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, def) - if (def_bb != gimple_bb (use_stmt) - && !is_gimple_debug (use_stmt)) + if (gimple_code (use_stmt) == GIMPLE_PHI) { - gcc_assert (gimple_code (use_stmt) != GIMPLE_PHI); + gimple_stmt_iterator psi = gsi_for_stmt (use_stmt); + if (scalar_close_phi_node_p (gsi_stmt (psi))) + rewrite_close_phi_out_of_ssa (&psi, region); + else + rewrite_phi_out_of_ssa (&psi); + } + + 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)) + { if (!zero_dim_array) { zero_dim_array = create_zero_dim_array @@ -2530,10 +2511,7 @@ rewrite_cross_bb_scalar_deps_out_of_ssa (scop_p scop) 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_phi_deps (region, psi); - rewrite_cross_bb_scalar_deps (region, &psi); - } + rewrite_cross_bb_scalar_deps (region, &psi); update_ssa (TODO_update_ssa); #ifdef ENABLE_CHECKING