mirror of git://gcc.gnu.org/git/gcc.git
Introduce gen-pass-instances.awk and pass-instances.def
Introduce a new gen-pass-instances.awk script, and use it at build time to make a pass-instances.def from passes.def. gcc/ * Makefile.in (pass-instances.def): New. (passes.o): Replace dependency on passes.def with one on pass-instances.def * gen-pass-instances.awk: New. * passes.c (pass_manager::pass_manager): Use pass-instances.def rather than passes.def, updating local definition of NEXT_PASS macro to add an extra NUM parameter (currently unused). From-SVN: r201359
This commit is contained in:
parent
abf1719efe
commit
a167b052df
|
|
@ -1,3 +1,15 @@
|
|||
2013-07-31 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* Makefile.in (pass-instances.def): New.
|
||||
(passes.o): Replace dependency on passes.def with one on
|
||||
pass-instances.def
|
||||
|
||||
* gen-pass-instances.awk: New.
|
||||
|
||||
* passes.c (pass_manager::pass_manager): Use pass-instances.def
|
||||
rather than passes.def, updating local definition of NEXT_PASS
|
||||
macro to add an extra NUM parameter (currently unused).
|
||||
|
||||
2013-07-30 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* Makefile.in (PASS_MANAGER_H): New.
|
||||
|
|
|
|||
|
|
@ -2737,6 +2737,10 @@ toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
|
|||
|
||||
hwint.o : hwint.c $(CONFIG_H) $(SYSTEM_H) $(DIAGNOSTIC_CORE_H)
|
||||
|
||||
pass-instances.def: $(srcdir)/passes.def $(srcdir)/gen-pass-instances.awk
|
||||
$(AWK) -f $(srcdir)/gen-pass-instances.awk \
|
||||
$(srcdir)/passes.def > pass-instances.def
|
||||
|
||||
passes.o : passes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
|
||||
$(RTL_H) $(FUNCTION_H) $(FLAGS_H) $(INPUT_H) $(INSN_ATTR_H) output.h \
|
||||
$(DIAGNOSTIC_CORE_H) debug.h insn-config.h intl.h $(RECOG_H) toplev.h \
|
||||
|
|
@ -2747,7 +2751,7 @@ passes.o : passes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
|
|||
hosthooks.h $(CGRAPH_H) $(COVERAGE_H) $(TREE_PASS_H) $(TREE_DUMP_H) \
|
||||
$(GGC_H) $(OPTS_H) $(TREE_FLOW_H) $(TREE_INLINE_H) \
|
||||
gt-passes.h $(DF_H) $(PREDICT_H) $(LTO_STREAMER_H) \
|
||||
$(PLUGIN_H) $(IPA_UTILS_H) passes.def \
|
||||
$(PLUGIN_H) $(IPA_UTILS_H) pass-instances.def \
|
||||
$(CONTEXT_H) $(PASS_MANAGER_H)
|
||||
|
||||
plugin.o : plugin.c $(PLUGIN_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
# Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 3, or (at your option) any
|
||||
# later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; see the file COPYING3. If not see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
# This Awk script takes passes.def and writes pass-instances.def,
|
||||
# counting the instances of each kind of pass, adding an instance number
|
||||
# to everywhere that NEXT_PASS is used.
|
||||
#
|
||||
# For example, the single-instanced pass:
|
||||
# NEXT_PASS (pass_warn_unused_result);
|
||||
# becomes this in the output:
|
||||
# NEXT_PASS (pass_warn_unused_result, 1);
|
||||
#
|
||||
# The various instances of
|
||||
# NEXT_PASS (pass_copy_prop);
|
||||
# become:
|
||||
# NEXT_PASS (pass_copy_prop, 1);
|
||||
# through:
|
||||
# NEXT_PASS (pass_copy_prop, 8);
|
||||
# (currently there are 8 instances of that pass)
|
||||
|
||||
# Usage: awk -f gen-pass-instances.awk passes.def
|
||||
|
||||
BEGIN {
|
||||
print "/* This file is auto-generated by gen-pass-instances.awk";
|
||||
print " from passes.def. */";
|
||||
}
|
||||
|
||||
function handle_line()
|
||||
{
|
||||
line = $0;
|
||||
where = match(line, /NEXT_PASS \((.+)\)/)
|
||||
if (where != 0)
|
||||
{
|
||||
len_of_start = length("NEXT_PASS (")
|
||||
len_of_end = length(")")
|
||||
len_of_pass_name = RLENGTH - (len_of_start + len_of_end)
|
||||
line_length = length(line)
|
||||
pass_starts_at = where + len_of_start
|
||||
pass_name = substr(line, pass_starts_at, len_of_pass_name)
|
||||
if (pass_name in pass_counts)
|
||||
pass_counts[pass_name]++;
|
||||
else
|
||||
pass_counts[pass_name] = 1;
|
||||
printf "%s, %s%s\n",
|
||||
substr(line, 0, pass_starts_at + len_of_pass_name - 1),
|
||||
pass_counts[pass_name],
|
||||
substr(line, pass_starts_at + len_of_pass_name);
|
||||
} else {
|
||||
print line;
|
||||
}
|
||||
}
|
||||
|
||||
{ handle_line() }
|
||||
|
|
@ -1315,12 +1315,12 @@ pass_manager::pass_manager (context *ctxt)
|
|||
#define POP_INSERT_PASSES() \
|
||||
}
|
||||
|
||||
#define NEXT_PASS(PASS) (p = next_pass_1 (p, &((PASS).pass)))
|
||||
#define NEXT_PASS(PASS, NUM) (p = next_pass_1 (p, &((PASS).pass)))
|
||||
|
||||
#define TERMINATE_PASS_LIST() \
|
||||
*p = NULL;
|
||||
|
||||
#include "passes.def"
|
||||
#include "pass-instances.def"
|
||||
|
||||
#undef INSERT_PASSES_AFTER
|
||||
#undef PUSH_INSERT_PASSES_WITHIN
|
||||
|
|
|
|||
Loading…
Reference in New Issue