From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 33373 invoked by alias); 8 Jun 2015 10:43:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 33349 invoked by uid 89); 8 Jun 2015 10:43:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 08 Jun 2015 10:43:18 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-02.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1Z1uWQ-0006lx-AE from Tom_deVries@mentor.com ; Mon, 08 Jun 2015 03:43:14 -0700 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-02.mgc.mentorg.com (137.202.0.106) with Microsoft SMTP Server id 14.3.224.2; Mon, 8 Jun 2015 11:43:12 +0100 Message-ID: <557571B5.1060903@mentor.com> Date: Mon, 08 Jun 2015 10:44:00 -0000 From: Tom de Vries User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Richard Biener CC: GCC Patches , Jakub Jelinek , Subject: Re: [PING][PATCH][PR65443] Add transform_to_exit_first_loop_alt References: <551564D0.2090308@mentor.com> <551E8A1F.5050908@mentor.com> <552E69ED.7020601@mentor.com> <55548A19.3000302@mentor.com> <55700C12.9000801@mentor.com> In-Reply-To: <55700C12.9000801@mentor.com> Content-Type: multipart/mixed; boundary="------------040107030804030108090501" X-SW-Source: 2015-06/txt/msg00548.txt.bz2 --------------040107030804030108090501 Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 622 On 04/06/15 10:28, Tom de Vries wrote: >> I'm ok with the patch and count on you to fix eventual fallout ;) >> > > Great, will do. And here is the fallout: * PR66442 - [6 regression] FAIL: gcc.dg/autopar/pr46885.c (test for excess errors) There are two problems in try_transform_to_exit_first_loop_alt: 1. In case the latch is not a singleton bb, the function should return false rather than true. 2. The check for singleton bb should ignore debug-insns. Attached patch fixes these problems. Bootstrapped and reg-tested on x86_64. Verified by Andreas to fix the problem on m68k. OK for trunk? Thanks, - Tom --------------040107030804030108090501 Content-Type: text/x-patch; name="0001-Fix-try_transform_to_exit_first_loop_alt.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Fix-try_transform_to_exit_first_loop_alt.patch" Content-length: 2067 Fix try_transform_to_exit_first_loop_alt 2015-06-06 Tom de Vries PR tree-optimization/66442 * gimple-iterator.h (gimple_seq_nondebug_singleton_p): Add function. * tree-parloops.c (try_transform_to_exit_first_loop_alt): Return false if the loop latch is not a singleton. Use gimple_seq_nondebug_singleton_p instead of gimple_seq_singleton_p. --- gcc/gimple-iterator.h | 29 +++++++++++++++++++++++++++++ gcc/tree-parloops.c | 4 ++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h index 87e943a..76fa456 100644 --- a/gcc/gimple-iterator.h +++ b/gcc/gimple-iterator.h @@ -345,4 +345,33 @@ gsi_seq (gimple_stmt_iterator i) return *i.seq; } +/* Determine whether SEQ is a nondebug singleton. */ + +static inline bool +gimple_seq_nondebug_singleton_p (gimple_seq seq) +{ + gimple_stmt_iterator gsi; + + /* Find a nondebug gimple. */ + gsi.ptr = gimple_seq_first (seq); + gsi.seq = &seq; + gsi.bb = NULL; + while (!gsi_end_p (gsi) + && is_gimple_debug (gsi_stmt (gsi))) + gsi_next (&gsi); + + /* No nondebug gimple found, not a singleton. */ + if (gsi_end_p (gsi)) + return false; + + /* Find a next nondebug gimple. */ + gsi_next (&gsi); + while (!gsi_end_p (gsi) + && is_gimple_debug (gsi_stmt (gsi))) + gsi_next (&gsi); + + /* Only a singleton if there's no next nondebug gimple. */ + return gsi_end_p (gsi); +} + #endif /* GCC_GIMPLE_ITERATOR_H */ diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 02f44eb..c4b83fe 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -1769,8 +1769,8 @@ try_transform_to_exit_first_loop_alt (struct loop *loop, tree nit) { /* Check whether the latch contains a single statement. */ - if (!gimple_seq_singleton_p (bb_seq (loop->latch))) - return true; + if (!gimple_seq_nondebug_singleton_p (bb_seq (loop->latch))) + return false; /* Check whether the latch contains the loop iv increment. */ edge back = single_succ_edge (loop->latch); -- 1.9.1 --------------040107030804030108090501--