From patchwork Thu Mar 19 22:40:11 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: 452380 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 29BE61400EA for ; Fri, 20 Mar 2015 09:40:30 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=XdgaTnnP; dkim-adsp=none (unprotected policy); 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 :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; q=dns; s=default; b=oxt97gL7KdnGrvkdC aYeTbliQJTbbDNBB2WB6Mh2jdesrgLtyDeXo4y/68WsB0iIPPIJuIZXCppb+KOLR zCEaru6Yr5e7cD+ueaeZ+ZL5j6/0RD6hxh54qLgzT5fIImyx+SR80kY8HxNfKc5g q9P7dBO/07KjIaf2hVagY/evXg= 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 :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; s=default; bh=KkwZvVMYTXqu5BriLYKLG7K txAI=; b=XdgaTnnPA+bxmLhgigDTjIs22mcZsx7RP1/OYVa3Oee+ay2q1du885s 0GKPqqT0o55+K+bB7QYZ8OUgqLm6v1NgEGfVBQzld5yCeuQbtqeX6s26w9zF0ord UJGlV3s56/cusAIMLYIzX2tNvU3NaI2QOPaT5ogDoROKNPzZzRgY= Received: (qmail 109608 invoked by alias); 19 Mar 2015 22:40:23 -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 109599 invoked by uid 89); 19 Mar 2015 22:40:22 -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; Thu, 19 Mar 2015 22:40:20 +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 1YYj6u-0001Bo-QU from Tom_deVries@mentor.com ; Thu, 19 Mar 2015 15:40:17 -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; Thu, 19 Mar 2015 22:40:15 +0000 Message-ID: <550B504B.1020903@mentor.com> Date: Thu, 19 Mar 2015 23:40:11 +0100 From: Tom de Vries User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Richard Biener CC: Jakub Jelinek , GCC Patches Subject: [PATCH] Fix fdump-passes References: <5502BCA2.2010802@mentor.com> <5502C620.1050202@mentor.com> <20150313120756.GC1746@tucnak.redhat.com> <55030211.5060203@mentor.com> <55095B84.4070807@mentor.com> <5509AFC2.7000301@mentor.com> In-Reply-To: [ was: Re: [PATCH, stage1] Make parloops gate more strict ] On 19-03-15 10:00, Richard Biener wrote: >>> Yeah - it makes the -fdump-passes "hack" more pervasive throughout >>> >>the compiler. >>> >> >>> >>I suppose it should instead build & push a "dummy" sturct function. >>> >> >> > >> >Like this? > Looks good to me. Added ChangeLog entry, bootstrapped and reg-tested on x86_64. OK for stage1 (or stage4) trunk? Thanks, - Tom Fix fdump-passes 2015-03-19 Tom de Vries * function.c (push_dummy_function): New function. (init_dummy_function_start): Use push_dummy_function. (pop_dummy_function): New function. Factored out of ... (expand_dummy_function_end): ... here. * function.h (push_dummy_function, pop_dummy_function): Declare. * passes.c (pass_manager::dump_passes): Use push_dummy_function and pop_dummy_function. * tree-chkp.c (chkp_gate): Handle cgraph_node::get (cfun->decl) == NULL. --- gcc/function.c | 37 ++++++++++++++++++++++++++++++++----- gcc/function.h | 2 ++ gcc/passes.c | 17 ++--------------- gcc/tree-chkp.c | 6 ++++-- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/gcc/function.c b/gcc/function.c index 2c3d142..9ddbad8 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4862,6 +4862,29 @@ prepare_function_start (void) frame_pointer_needed = 0; } +void +push_dummy_function (bool with_decl) +{ + tree fn_decl, fn_type, fn_result_decl; + + gcc_assert (!in_dummy_function); + in_dummy_function = true; + + if (with_decl) + { + fn_type = build_function_type_list (void_type_node, NULL_TREE); + fn_decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, NULL_TREE, + fn_type); + fn_result_decl = build_decl (UNKNOWN_LOCATION, RESULT_DECL, + NULL_TREE, void_type_node); + DECL_RESULT (fn_decl) = fn_result_decl; + } + else + fn_decl = NULL_TREE; + + push_struct_function (fn_decl); +} + /* Initialize the rtl expansion mechanism so that we can do simple things like generate sequences. This is used to provide a context during global initialization of some passes. You must call expand_dummy_function_end @@ -4870,9 +4893,7 @@ prepare_function_start (void) void init_dummy_function_start (void) { - gcc_assert (!in_dummy_function); - in_dummy_function = true; - push_struct_function (NULL_TREE); + push_dummy_function (false); prepare_function_start (); } @@ -5144,6 +5165,13 @@ expand_function_start (tree subr) stack_check_probe_note = emit_note (NOTE_INSN_DELETED); } +void +pop_dummy_function (void) +{ + pop_cfun (); + in_dummy_function = false; +} + /* Undo the effects of init_dummy_function_start. */ void expand_dummy_function_end (void) @@ -5159,8 +5187,7 @@ expand_dummy_function_end (void) free_after_parsing (cfun); free_after_compilation (cfun); - pop_cfun (); - in_dummy_function = false; + pop_dummy_function (); } /* Helper for diddle_return_value. */ diff --git a/gcc/function.h b/gcc/function.h index b89c5ae..349f80c 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -899,6 +899,8 @@ extern int get_next_funcdef_no (void); extern int get_last_funcdef_no (void); extern void allocate_struct_function (tree, bool); extern void push_struct_function (tree fndecl); +extern void push_dummy_function (bool); +extern void pop_dummy_function (void); extern void init_dummy_function_start (void); extern void init_function_start (tree); extern void stack_protect_epilogue (void); diff --git a/gcc/passes.c b/gcc/passes.c index 23a90d9..bca8dbb 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -944,32 +944,19 @@ dump_passes (void) void pass_manager::dump_passes () const { - struct cgraph_node *n, *node = NULL; + push_dummy_function (true); create_pass_tab (); - FOR_EACH_FUNCTION (n) - if (DECL_STRUCT_FUNCTION (n->decl)) - { - node = n; - break; - } - - if (!node) - return; - - push_cfun (DECL_STRUCT_FUNCTION (node->decl)); - dump_pass_list (all_lowering_passes, 1); dump_pass_list (all_small_ipa_passes, 1); dump_pass_list (all_regular_ipa_passes, 1); dump_pass_list (all_late_ipa_passes, 1); dump_pass_list (all_passes, 1); - pop_cfun (); + pop_dummy_function (); } - /* Returns the pass with NAME. */ static opt_pass * diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index d2df4ba..16afadf 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -4337,8 +4337,10 @@ chkp_execute (void) static bool chkp_gate (void) { - return cgraph_node::get (cfun->decl)->instrumentation_clone - || lookup_attribute ("chkp ctor", DECL_ATTRIBUTES (cfun->decl)); + cgraph_node *node = cgraph_node::get (cfun->decl); + return ((node != NULL + && node->instrumentation_clone) + || lookup_attribute ("chkp ctor", DECL_ATTRIBUTES (cfun->decl))); } namespace { -- 1.9.1