summaryrefslogtreecommitdiff
path: root/gcc/gen-pass-instances.awk
diff options
context:
space:
mode:
authordmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>2013-07-31 00:48:03 +0000
committerdmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>2013-07-31 00:48:03 +0000
commit743d5ab7e32c89501205d3c0335dd73a2a4c4d15 (patch)
treefd69d628e5fda1a2454b09e4278c6a6dcf98db83 /gcc/gen-pass-instances.awk
parent0c74a6e2cddf69e38ddc4dbf93780a754889d248 (diff)
downloadgcc-743d5ab7e32c89501205d3c0335dd73a2a4c4d15.tar.gz
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). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201359 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gen-pass-instances.awk')
-rw-r--r--gcc/gen-pass-instances.awk66
1 files changed, 66 insertions, 0 deletions
diff --git a/gcc/gen-pass-instances.awk b/gcc/gen-pass-instances.awk
new file mode 100644
index 00000000000..41b5e75f781
--- /dev/null
+++ b/gcc/gen-pass-instances.awk
@@ -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() }