From patchwork Sun Nov 15 11:01:15 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: 544818 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 8CA8E1402B3 for ; Sun, 15 Nov 2015 22:02:19 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=GFqFx/Oa; 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=pdH0WdzG+lIXNBMQi elyEeR5P9EmUHIwYvjfUNmCKXqlYjHYTNZH3JDUIpbNQIDU0BHiUmCBZTBuuOE5c YNPiFX1F4j23EOY3IK4HivpGCz8vg+3HohjAs+L/79Ca8CjYIElNwQhnbmkDyR+V kMiNoRVD7kX3rw8JXeQrunJI8o= 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=DwU0/jP/qsTGW0AhEH094D9 gI9c=; b=GFqFx/OaQJfuhR3N9iC0AkzSXz5rbUcYKWlIfTSceCHGml1TKru061h uZe5YWD8Jc7qXvpM33DrsmGwxn8OQ8+VLCnfOiuqBMFLhCdXVMVsi+NjpgToFlJx i4BwSAc3ToKMT2zaZsAIhAbIb/Hb0McG6EG+KT8NZ6s5O3ooT7FY= Received: (qmail 13840 invoked by alias); 15 Nov 2015 11:02:11 -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 13826 invoked by uid 89); 15 Nov 2015 11:02:09 -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, RP_MATCHES_RCVD, SPF_PASS 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; Sun, 15 Nov 2015 11:02:07 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45196) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1Zxv4P-0005VH-Bc for gcc-patches@gnu.org; Sun, 15 Nov 2015 06:02:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zxv4K-0007nH-0k for gcc-patches@gnu.org; Sun, 15 Nov 2015 06:02:04 -0500 Received: from relay1.mentorg.com ([192.94.38.131]:57852) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zxv4J-0007n7-Ob for gcc-patches@gnu.org; Sun, 15 Nov 2015 06:01:59 -0500 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 1Zxv4I-0007Rq-Sz from Tom_deVries@mentor.com ; Sun, 15 Nov 2015 03:01:59 -0800 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; Sun, 15 Nov 2015 11:01:49 +0000 Subject: [PATCH, 3/6] Remove first_pass_instance from pass_dominator To: Richard Biener References: <56447A09.4070608@mentor.com> <564498CE.5010207@mentor.com> <1447342432.7830.21.camel@surprise> <5645EC5A.9060005@mentor.com> <5646FC85.2060802@mentor.com> <564864AA.6000101@mentor.com> CC: David Malcolm , "gcc-patches@gnu.org" From: Tom de Vries Message-ID: <564865FB.8070100@mentor.com> Date: Sun, 15 Nov 2015 12:01:15 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <564864AA.6000101@mentor.com> X-detected-operating-system: by eggs.gnu.org: Windows NT kernel [generic] [fuzzy] X-Received-From: 192.94.38.131 On 15/11/15 11:55, Tom de Vries wrote: > [ was: Re: [PATCH] Remove first_pass_instance from pass_vrp ] > > This patch series removes first_pass_instance. > > 1 Remove first_pass_instance from pass_vrp > 2 Remove first_pass_instance from pass_reassoc > 3 Remove first_pass_instance from pass_dominator > 4 Remove first_pass_instance from pass_object_sizes > 5 Remove first_pass_instance from pass_ccp > 6 Remove first_pass_instance > > Bootstrapped and reg-tested on x86_64. > > I will post the individual patches in reply to this email. > > [ I won't post the first patch though. It was already posted here: > https://gcc.gnu.org/ml/gcc-patches/2015-11/msg01701.html . ] this patch removes first_pass_instance from pass_dominator. Thanks, - Tom Remove first_pass_instance from pass_dominator 2015-11-15 Tom de Vries * passes.def: Add arg to pass_dominator pass instantiation. * tree-pass.h (first_pass_instance): Remove pass_dominator-related bit of comment. * tree-ssa-dom.c (pass_dominator::pass_dominator): Initialize may_peel_loop_headers_p. (pass_dominator::set_pass_param): New member function. Set may_peel_loop_headers_p. (pass_dominator::may_peel_loop_headers_p): New private member. (pass_dominator::execute): Use may_peel_loop_headers_p instead of first_pass_instance. --- gcc/passes.def | 4 ++-- gcc/tree-pass.h | 7 ++----- gcc/tree-ssa-dom.c | 16 ++++++++++++++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/gcc/passes.def b/gcc/passes.def index 78fdf0f..d274a95 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -190,7 +190,7 @@ along with GCC; see the file COPYING3. If not see propagations have already run, but before some more dead code is removed, and this place fits nicely. Remember this when trying to move or duplicate pass_dominator somewhere earlier. */ - NEXT_PASS (pass_dominator); + NEXT_PASS (pass_dominator, true /* may_peel_loop_headers_p */); /* At this point the majority of const/copy propagations are exposed. Go ahead and identify paths that should never be executed in a conforming program and isolate those paths. @@ -279,7 +279,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_reassoc, false /* insert_powi_p */); NEXT_PASS (pass_strength_reduction); NEXT_PASS (pass_tracer); - NEXT_PASS (pass_dominator); + NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */); NEXT_PASS (pass_strlen); NEXT_PASS (pass_vrp, false /* warn_array_bounds_p */); /* The only const/copy propagation opportunities left after diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index a672d52..d647e73 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -631,11 +631,8 @@ extern bool function_called_by_processed_nodes_p (void); /* Set to true if the pass is called the first time during compilation of the current function. Note that using this information in the optimization - passes is considered not to be clean, and it should be avoided if possible. - This flag is currently used to prevent loops from being peeled repeatedly - in jump threading; it will be removed once we preserve loop structures - throughout the compilation -- we will be able to mark the affected loops - directly in jump threading, and avoid peeling them next time. */ + passes is considered not to be clean, and it should be avoided if + possible. */ extern bool first_pass_instance; /* Declare for plugins. */ diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 5cb2644..aeb726c 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -536,14 +536,26 @@ class pass_dominator : public gimple_opt_pass { public: pass_dominator (gcc::context *ctxt) - : gimple_opt_pass (pass_data_dominator, ctxt) + : gimple_opt_pass (pass_data_dominator, ctxt), + may_peel_loop_headers_p (false) {} /* opt_pass methods: */ opt_pass * clone () { return new pass_dominator (m_ctxt); } + void set_pass_param (unsigned int n, bool param) + { + gcc_assert (n == 0); + may_peel_loop_headers_p = param; + } virtual bool gate (function *) { return flag_tree_dom != 0; } virtual unsigned int execute (function *); + private: + /* This flag is used to prevent loops from being peeled repeatedly in jump + threading; it will be removed once we preserve loop structures throughout + the compilation -- we will be able to mark the affected loops directly in + jump threading, and avoid peeling them next time. */ + bool may_peel_loop_headers_p; }; // class pass_dominator unsigned int @@ -619,7 +631,7 @@ pass_dominator::execute (function *fun) free_all_edge_infos (); /* Thread jumps, creating duplicate blocks as needed. */ - cfg_altered |= thread_through_all_blocks (first_pass_instance); + cfg_altered |= thread_through_all_blocks (may_peel_loop_headers_p); if (cfg_altered) free_dominance_info (CDI_DOMINATORS);