This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] gcc::context creation
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Biener <rguenther at suse dot de>, Nathan Sidwell <nathan at acm dot org>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 5 Jun 2017 13:47:36 +0200
- Subject: Re: [PATCH] gcc::context creation
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jakub at redhat dot com
- Dkim-filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B674880C0A
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B674880C0A
- References: <7f7f64a5-f820-a19a-d4ea-77b05f746499@acm.org> <98b0273e-9390-18ce-c041-31f843b8b1f8@acm.org> <20170524105728.GZ8499@tucnak> <9f46c2f8-2bee-ef41-3c98-acf7d0012e54@acm.org> <20170524115731.GE8499@tucnak> <a778a628-0c1b-7d9e-d510-b19186d624f5@acm.org> <20170605094603.GB2154@tucnak> <c3afbf4a-c4f5-a89d-d326-3cdb0e25715b@acm.org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Mon, Jun 05, 2017 at 06:57:47AM -0400, Nathan Sidwell wrote:
> On 06/05/2017 05:46 AM, Jakub Jelinek wrote:
>
> > Here is a patch to implement that. I chose to keep the 3 dumps predefined
> > dumps and just tweak their registered number, otherwise the changes would be
> > bigger.
>
> Yeah, that can wait for another day.
>
> > The patch additionally renames TDI_generic to TDI_gimple (to match
> > the dump name and content) and because we have more than 256 dumps these
> > days and we register them all even at -O0, the patch avoids 4 unnecessary
> > reallocations. Ok for trunk if testing passes?
>
> LGTM, two nits below. (I can't approve though)
>
> > +/* Allow languages and middle-end to register their dumps before the
> > + optimization passes. */
> blank line needed here, I think?
Whether there is a blank between function and its function comment
is something we aren't consistent in, but it seems that in dumpfile.c
there is a blank line, so I'm adjusting.
> > +void
> > +gcc::dump_manager::
> > +register_dumps ()
> > +{
> > + lang_hooks.register_dumps (this);
> > + /* If this assert fails, some FE registered more than
> > + FIRST_ME_AUTO_NUMBERED_DUMP - FIRST_AUTO_NUMBERED_DUMP
> > + dump files. Bump FIRST_ME_AUTO_NUMBERED_DUMP accordingly. */
> > + gcc_assert (m_next_dump <= FIRST_ME_AUTO_NUMBERED_DUMP);
> > + if (m_next_dump < FIRST_ME_AUTO_NUMBERED_DUMP)
> > + m_next_dump = FIRST_ME_AUTO_NUMBERED_DUMP;
>
> Unconditionally set it? there's the protecting assert. It's almost as if
> you want 'else gcc_unreachable ()' (with suitable morph of < to <=).
Unconditional set is fine, else gcc_unreachable (); looks ugly to me.
Here is updated patch:
2017-06-05 Jakub Jelinek <jakub@redhat.com>
* dumpfile.h (enum tree_dump_index): Rename TDI_generic to
TDI_gimple.
(class dump_manager): Add register_dumps method.
* dumpfile.c: Include langhooks.h.
(dump_files): Use 0 instead of 3/4/5 for TDI_{original,gimple,nested}.
(FIRST_AUTO_NUMBERED_DUMP): Decrease to 1.
(FIRST_ME_AUTO_NUMBERED_DUMP): Define.
(dump_manager::dump_register): Start with 512 entries instead of 32.
(dump_manager::register_dumps): New method.
* toplev.c (general_init): Instead of invoking register_dumps
langhook, invoke register_dumps method on the dump manager.
* gimplify.c (gimplify_function_tree): Use TDI_gimple instead of
TDI_generic.
* gimple-parser.c (c_parser_parse_gimple_body): Use TDI_gimple instead
of TDI_generic.
--- gcc/dumpfile.h.jj 2017-06-02 09:01:10.000000000 +0200
+++ gcc/dumpfile.h 2017-06-05 11:20:07.563008969 +0200
@@ -31,7 +31,7 @@ enum tree_dump_index
TDI_inheritance, /* dump type inheritance graph. */
TDI_clones, /* dump IPA cloning decisions. */
TDI_original, /* dump each function before optimizing it */
- TDI_generic, /* dump each function after genericizing it */
+ TDI_gimple, /* dump each function after gimplifying it */
TDI_nested, /* dump each function after unnesting it */
TDI_lang_all, /* enable all the language dumps. */
@@ -212,6 +212,11 @@ public:
dump_register (const char *suffix, const char *swtch, const char *glob,
dump_kind dkind, int optgroup_flags, bool take_ownership);
+ /* Allow languages and middle-end to register their dumps before the
+ optimization passes. */
+ void
+ register_dumps ();
+
/* Return the dump_file_info for the given phase. */
struct dump_file_info *
get_dump_file_info (int phase) const;
--- gcc/dumpfile.c.jj 2017-06-02 09:01:10.000000000 +0200
+++ gcc/dumpfile.c 2017-06-05 11:21:27.381013150 +0200
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.
#include "dumpfile.h"
#include "context.h"
#include "tree-cfg.h"
+#include "langhooks.h"
/* If non-NULL, return one past-the-end of the matching SUBPART of
the WHOLE string. */
@@ -59,10 +60,11 @@ static struct dump_file_info dump_files[
DUMP_FILE_INFO (".cgraph", "ipa-cgraph", DK_ipa, 0),
DUMP_FILE_INFO (".type-inheritance", "ipa-type-inheritance", DK_ipa, 0),
DUMP_FILE_INFO (".ipa-clones", "ipa-clones", DK_ipa, 0),
- DUMP_FILE_INFO (".original", "tree-original", DK_tree, 3),
- DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 4),
- DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 5),
-#define FIRST_AUTO_NUMBERED_DUMP 3
+ DUMP_FILE_INFO (".original", "tree-original", DK_tree, 0),
+ DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 0),
+ DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 0),
+#define FIRST_AUTO_NUMBERED_DUMP 1
+#define FIRST_ME_AUTO_NUMBERED_DUMP 3
DUMP_FILE_INFO (NULL, "lang-all", DK_lang, 0),
DUMP_FILE_INFO (NULL, "tree-all", DK_tree, 0),
@@ -179,7 +181,7 @@ dump_register (const char *suffix, const
if (count >= m_extra_dump_files_alloced)
{
if (m_extra_dump_files_alloced == 0)
- m_extra_dump_files_alloced = 32;
+ m_extra_dump_files_alloced = 512;
else
m_extra_dump_files_alloced *= 2;
m_extra_dump_files = XRESIZEVEC (struct dump_file_info,
@@ -200,6 +202,25 @@ dump_register (const char *suffix, const
}
+/* Allow languages and middle-end to register their dumps before the
+ optimization passes. */
+
+void
+gcc::dump_manager::
+register_dumps ()
+{
+ lang_hooks.register_dumps (this);
+ /* If this assert fails, some FE registered more than
+ FIRST_ME_AUTO_NUMBERED_DUMP - FIRST_AUTO_NUMBERED_DUMP
+ dump files. Bump FIRST_ME_AUTO_NUMBERED_DUMP accordingly. */
+ gcc_assert (m_next_dump <= FIRST_ME_AUTO_NUMBERED_DUMP);
+ m_next_dump = FIRST_ME_AUTO_NUMBERED_DUMP;
+ dump_files[TDI_original].num = m_next_dump++;
+ dump_files[TDI_gimple].num = m_next_dump++;
+ dump_files[TDI_nested].num = m_next_dump++;
+}
+
+
/* Return the dump_file_info for the given phase. */
struct dump_file_info *
--- gcc/toplev.c.jj 2017-06-02 09:01:10.000000000 +0200
+++ gcc/toplev.c 2017-06-05 11:04:04.085038583 +0200
@@ -1168,9 +1168,9 @@ general_init (const char *argv0, bool in
dump manager. */
g = new gcc::context ();
- /* Allow languages to register their dumps before the optimization
- passes. */
- lang_hooks.register_dumps (g->get_dumps ());
+ /* Allow languages and middle-end to register their dumps before the
+ optimization passes. */
+ g->get_dumps ()->register_dumps ();
/* Create the passes. */
g->set_passes (new gcc::pass_manager (g));
--- gcc/gimplify.c.jj 2017-06-02 09:01:20.000000000 +0200
+++ gcc/gimplify.c 2017-06-05 11:21:45.097792114 +0200
@@ -12732,7 +12732,7 @@ gimplify_function_tree (tree fndecl)
pop_cfun ();
- dump_function (TDI_generic, fndecl);
+ dump_function (TDI_gimple, fndecl);
}
/* Return a dummy expression of type TYPE in order to keep going after an
--- gcc/c/gimple-parser.c.jj 2017-06-02 09:01:07.000000000 +0200
+++ gcc/c/gimple-parser.c 2017-06-05 11:22:04.636548346 +0200
@@ -116,7 +116,7 @@ c_parser_parse_gimple_body (c_parser *pa
we have to go through lowering again. */
cfun->curr_properties = PROP_gimple_any;
- dump_function (TDI_generic, current_function_decl);
+ dump_function (TDI_gimple, current_function_decl);
}
/* Parse a compound statement in gimple function body.
Jakub