From patchwork Mon Oct 12 15:06:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 529165 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44B0A1402B7 for ; Tue, 13 Oct 2015 02:08:04 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=m8tVg/2C; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=f1X+Ny+C5yFvGVhND J8IBF9B0vIwa/LQu+rJAdPdIJtssfU4x87jZy7+/fBykfnz2HFiXz0q3bM+hUNPQ w+X8KEole8267PNUHqBHQVyM/LaxzgMRidXcEgR0kzKOGmZzruBToPJmQ+auVi9e D4dnzmUiRzuGOU6AaigBlebthg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=nmO0zI+wkfes3065NJ/o1TW e8QM=; b=m8tVg/2C82JWA3KxQT7GtNYY4Ezyi5fal6aKbrpWk+USEOnX25glCUl K26vEd+L6TKNPE2iVffwbLfkUfIeyHU0yif9FQpbdXDcHexZI+8Y0NklE2CZ/7Qx 4/B8ef1Fa2Ga7j+qfbol/unGsDTfC7Svao3pjQJjszlMAEdH9/hs= Received: (qmail 22642 invoked by alias); 12 Oct 2015 15:07:55 -0000 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 Received: (qmail 22627 invoked by uid 89); 12 Oct 2015 15:07:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: fencepost.gnu.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (208.118.235.10) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 12 Oct 2015 15:07:53 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53843) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1Zleha-0006pU-JH for gcc-patches@gnu.org; Mon, 12 Oct 2015 11:07:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZlehW-0001hf-BJ for gcc-patches@gnu.org; Mon, 12 Oct 2015 11:07:50 -0400 Received: from relay1.mentorg.com ([192.94.38.131]:64080) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlehW-0001hW-64 for gcc-patches@gnu.org; Mon, 12 Oct 2015 11:07:46 -0400 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1ZlehV-00079R-BN from Tom_deVries@mentor.com ; Mon, 12 Oct 2015 08:07:45 -0700 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.224.2; Mon, 12 Oct 2015 16:07:43 +0100 Subject: [committed, gomp4, 4/6] Add skip_stmt parm to pass_dominator::get_sese () To: "gcc-patches@gnu.org" References: <561BC874.2020908@mentor.com> CC: Jakub Jelinek From: Tom de Vries Message-ID: <561BCC92.70906@mentor.com> Date: Mon, 12 Oct 2015 17:06:58 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <561BC874.2020908@mentor.com> X-detected-operating-system: by eggs.gnu.org: Windows NT kernel [generic] [fuzzy] X-Received-From: 192.94.38.131 On 12/10/15 16:49, Tom de Vries wrote: > Hi, > > I've committed the following patch series to the gomp-4_0-branch. > > 1 Add pass_dominator::jump_threading_p () > 2 Add dom_walker::walk_until > 3 Add pass_dominator::sese_mode_p () > 4 Add skip_stmt parm to pass_dominator::get_sese () > 5 Add oacc kernels related infra functions > 6 Add pass_dominator_oacc_kernels > > The patch series adds a pass pass_dominator_oacc_kernels, which does the > pass_dominator optimizations (with the exception of jump threading) on > each oacc kernels region rather than on the whole function. > > Bootstrapped and reg-tested on x86_64. > > I'll post the patches individually, in reply to this email. This patch adds the ability in pass_dominator to skip a stmt while optimizing a sese region. Thanks, - Tom Add skip_stmt parm to pass_dominator::get_sese () 2015-10-12 Tom de Vries * tree-ssa-dom.c (dom_opt_dom_walker::set_skip_stmt): New function. (dom_opt_dom_walker::m_skip_stmt): New private var. (pass_dominator::get_sese): Add skip_stmt parameters. (pass_dominator::execute): Call set_skip_stmt with statement to skip for sese. (dom_opt_dom_walker::before_dom_children): Handle m_skip_stmt. --- gcc/tree-ssa-dom.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 7a1250e..573e6fc 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -504,6 +504,7 @@ public: virtual void before_dom_children (basic_block); virtual void after_dom_children (basic_block); + void set_skip_stmt (gimple *skip_stmt) { m_skip_stmt = skip_stmt; } private: void thread_across_edge (edge); @@ -514,6 +515,7 @@ private: gcond *m_dummy_cond; bool m_jump_threading_p; + gimple *m_skip_stmt; }; /* Jump threading, redundancy elimination and const/copy propagation. @@ -558,9 +560,11 @@ public: virtual bool sese_mode_p (void) { return false; } /* In sese mode, return true if there's another sese to visit. Return the - sese to visit in SESE_ENTRY and SESE_EXIT. */ + sese to visit in SESE_ENTRY and SESE_EXIT. If a stmt in the sese should + not be optimized, return it in SKIP_STMT. */ virtual bool get_sese (basic_block *sese_entry ATTRIBUTE_UNUSED, - basic_block *sese_exit ATTRIBUTE_UNUSED) + basic_block *sese_exit ATTRIBUTE_UNUSED, + gimple **skip_stmt ATTRIBUTE_UNUSED) { gcc_unreachable (); } }; // class pass_dominator @@ -628,8 +632,11 @@ pass_dominator::execute (function *fun) else { basic_block sese_entry, sese_exit; - while (get_sese (&sese_entry, &sese_exit)) + gimple *skip_stmt = NULL; + while (get_sese (&sese_entry, &sese_exit, &skip_stmt)) { + walker.set_skip_stmt (skip_stmt); + threadedge_initialize_values (); avail_exprs_stack->push_marker (); const_and_copies->push_marker (); @@ -1363,7 +1370,12 @@ dom_opt_dom_walker::before_dom_children (basic_block bb) m_avail_exprs_stack->pop_to_marker (); for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - optimize_stmt (bb, gsi, m_const_and_copies, m_avail_exprs_stack); + { + if (gsi_stmt (gsi) == m_skip_stmt) + continue; + + optimize_stmt (bb, gsi, m_const_and_copies, m_avail_exprs_stack); + } /* Now prepare to process dominated blocks. */ if (m_jump_threading_p) -- 1.9.1