From patchwork Tue Jul 20 20:23:41 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 59367 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 52C431007D2 for ; Wed, 21 Jul 2010 06:25:28 +1000 (EST) Received: (qmail 11213 invoked by alias); 20 Jul 2010 20:24:22 -0000 Received: (qmail 10919 invoked by uid 22791); 20 Jul 2010 20:24:12 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, TW_CF, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-gx0-f175.google.com (HELO mail-gx0-f175.google.com) (209.85.161.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 20 Jul 2010 20:24:05 +0000 Received: by gxk3 with SMTP id 3so3223170gxk.20 for ; Tue, 20 Jul 2010 13:24:03 -0700 (PDT) Received: by 10.150.31.5 with SMTP id e5mr899913ybe.150.1279657443744; Tue, 20 Jul 2010 13:24:03 -0700 (PDT) Received: from napoca ([163.181.251.115]) by mx.google.com with ESMTPS id p8sm7039795ybk.15.2010.07.20.13.24.01 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 20 Jul 2010 13:24:03 -0700 (PDT) Received: by napoca (sSMTP sendmail emulation); Tue, 20 Jul 2010 15:24:00 -0500 From: Sebastian Pop To: gcc-patches@gcc.gnu.org Cc: gcc-graphite@googlegroups.com, Sebastian Pop Subject: [PATCH 4/5] Add loop_exits_from_bb_p. Date: Tue, 20 Jul 2010 15:23:41 -0500 Message-Id: <1279657422-17300-4-git-send-email-sebpop@gmail.com> In-Reply-To: <1279657422-17300-1-git-send-email-sebpop@gmail.com> References: <1279657422-17300-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 2010-07-20 Vladimir Kargov Sebastian Pop * cfgloop.c (is_loop_exit): Renamed loop_exits_to_bb_p. (loop_exits_from_bb_p): New. * cfgloop.h (is_loop_exit): Renamed loop_exits_to_bb_p. (loop_exits_from_bb_p): Declared. * graphite-scop-detection.c (scopdet_basic_block_info): Call loop_exits_to_bb_p. --- gcc/ChangeLog.graphite | 10 ++++++++++ gcc/cfgloop.c | 19 +++++++++++++++++-- gcc/cfgloop.h | 3 ++- gcc/graphite-scop-detection.c | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 58ab265..8a2eced 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,4 +1,14 @@ 2010-07-20 Vladimir Kargov + Sebastian Pop + + * cfgloop.c (is_loop_exit): Renamed loop_exits_to_bb_p. + (loop_exits_from_bb_p): New. + * cfgloop.h (is_loop_exit): Renamed loop_exits_to_bb_p. + (loop_exits_from_bb_p): Declared. + * graphite-scop-detection.c (scopdet_basic_block_info): Call + loop_exits_to_bb_p. + +2010-07-20 Vladimir Kargov * refined-regions.c: Include tree-pass.h, cfgloop.h, gimple.h, and tree-data-ref.h. diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c index 0a8ceba..3657174 100644 --- a/gcc/cfgloop.c +++ b/gcc/cfgloop.c @@ -1622,10 +1622,10 @@ single_exit (const struct loop *loop) return NULL; } -/* Returns true when BB has an edge exiting LOOP. */ +/* Returns true when BB has an incoming edge exiting LOOP. */ bool -is_loop_exit (struct loop *loop, basic_block bb) +loop_exits_to_bb_p (struct loop *loop, basic_block bb) { edge e; edge_iterator ei; @@ -1636,3 +1636,18 @@ is_loop_exit (struct loop *loop, basic_block bb) return false; } + +/* Returns true when BB has an outgoing edge exiting LOOP. */ + +bool +loop_exits_from_bb_p (struct loop *loop, basic_block bb) +{ + edge e; + edge_iterator ei; + + FOR_EACH_EDGE (e, ei, bb->succs) + if (loop_exit_edge_p (loop, e)) + return true; + + return false; +} diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 4d16a23..fdc71fb 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -232,7 +232,8 @@ extern int num_loop_insns (const struct loop *); extern int average_num_loop_insns (const struct loop *); extern unsigned get_loop_level (const struct loop *); extern bool loop_exit_edge_p (const struct loop *, const_edge); -extern bool is_loop_exit (struct loop *, basic_block); +extern bool loop_exits_to_bb_p (struct loop *, basic_block); +extern bool loop_exits_from_bb_p (struct loop *, basic_block); extern void mark_loop_exit_edges (void); /* Loops & cfg manipulation. */ diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 5d759be..b53b24b 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -595,7 +595,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop, { /* Ignore loop exits. They will be handled after the loop body. */ - if (is_loop_exit (loop, e->dest)) + if (loop_exits_to_bb_p (loop, e->dest)) { result.exits = true; continue;