From patchwork Mon Dec 6 20:18:26 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 74462 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 65772B6ED0 for ; Tue, 7 Dec 2010 07:18:43 +1100 (EST) Received: (qmail 27180 invoked by alias); 6 Dec 2010 20:18:41 -0000 Received: (qmail 27171 invoked by uid 22791); 6 Dec 2010 20:18:40 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, TW_TM, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-yw0-f47.google.com (HELO mail-yw0-f47.google.com) (209.85.213.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 06 Dec 2010 20:18:34 +0000 Received: by ywi6 with SMTP id 6so132184ywi.20 for ; Mon, 06 Dec 2010 12:18:32 -0800 (PST) Received: by 10.151.78.3 with SMTP id f3mr150602ybl.419.1291666712487; Mon, 06 Dec 2010 12:18:32 -0800 (PST) Received: from napoca ([163.181.251.115]) by mx.google.com with ESMTPS id q8sm3331412yhg.1.2010.12.06.12.18.30 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 06 Dec 2010 12:18:31 -0800 (PST) Received: by napoca (sSMTP sendmail emulation); Mon, 06 Dec 2010 14:18:28 -0600 From: Sebastian Pop To: gcc-patches@gcc.gnu.org Cc: rguenther@suse.de, Sebastian Pop Subject: [PATCH] Fix PR44676: fix invariant phi node removal. Date: Mon, 6 Dec 2010 14:18:26 -0600 Message-Id: <1291666706-27293-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 Hi, This backports the change from trunk that fixed PR44676. I am regstrapping this fix on amd64-linux. Ok for the 4.5 branch? Thanks, Sebastian Backport from trunk http://gcc.gnu.org/viewcvs?view=revision&revision=163105 2010-05-07 Sebastian Pop Backport from mainline: 2010-05-07 Sebastian Pop PR tree-optimization/44676 * graphite-sese-to-poly.c (loop_entry_phi_arg): Renamed phi_arg_in_outermost_loop. (remove_simple_copy_phi): Call phi_arg_in_outermost_loop. (remove_invariant_phi): Same. --- gcc/ChangeLog | 11 +++++++++++ gcc/graphite-sese-to-poly.c | 20 +++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d52ec8..5d5fd6b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2010-12-06 Sebastian Pop + + Backport from mainline: + 2010-05-07 Sebastian Pop + + PR tree-optimization/44676 + * graphite-sese-to-poly.c (loop_entry_phi_arg): Renamed + phi_arg_in_outermost_loop. + (remove_simple_copy_phi): Call phi_arg_in_outermost_loop. + (remove_invariant_phi): Same. + 2010-12-06 Rainer Orth Backport from mainline: diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index b8f332a..fc28480 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -73,21 +73,23 @@ var_used_in_not_loop_header_phi_node (tree var) return result; } -/* Returns the index of the phi argument corresponding to the initial - value in the loop. */ +/* Returns the index of the PHI argument defined in the outermost + loop. */ static size_t -loop_entry_phi_arg (gimple phi) +phi_arg_in_outermost_loop (gimple phi) { loop_p loop = gimple_bb (phi)->loop_father; - size_t i; + size_t i, res = 0; for (i = 0; i < gimple_phi_num_args (phi); i++) if (!flow_bb_inside_loop_p (loop, gimple_phi_arg_edge (phi, i)->src)) - return i; + { + loop = gimple_phi_arg_edge (phi, i)->src->loop_father; + res = i; + } - gcc_unreachable (); - return 0; + return res; } /* Removes a simple copy phi node "RES = phi (INIT, RES)" at position @@ -98,7 +100,7 @@ remove_simple_copy_phi (gimple_stmt_iterator *psi) { gimple phi = gsi_stmt (*psi); tree res = gimple_phi_result (phi); - size_t entry = loop_entry_phi_arg (phi); + size_t entry = phi_arg_in_outermost_loop (phi); tree init = gimple_phi_arg_def (phi, entry); gimple stmt = gimple_build_assign (res, init); edge e = gimple_phi_arg_edge (phi, entry); @@ -118,7 +120,7 @@ remove_invariant_phi (sese region, gimple_stmt_iterator *psi) loop_p loop = loop_containing_stmt (phi); tree res = gimple_phi_result (phi); tree scev = scalar_evolution_in_region (region, loop, res); - size_t entry = loop_entry_phi_arg (phi); + size_t entry = phi_arg_in_outermost_loop (phi); edge e = gimple_phi_arg_edge (phi, entry); tree var; gimple stmt;