[PATCH] D13597: Python script to check coverage of misched info
Andrew Trick via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 9 11:25:18 PDT 2015
LGTM. Thanks for sharing the script.
Andy
> On Oct 9, 2015, at 9:10 AM, Christof Douma <Christof.Douma at arm.com> wrote:
>
> christof created this revision.
> christof added reviewers: cestes, atrick, aschwaighofer.
> christof added a subscriber: llvm-commits.
>
> The script prints csv of all misched models of a target when given the
> output of the debug output of subtarget using:
>
> llvm-tblgen --gen-subtarget --debug-only=subtarget-emitter ...
>
> With thanks to Dave Estes for mentioning the idea at 2014 LLVM
> Developers' Meeting.
>
> http://reviews.llvm.org/D13597
>
> Files:
> utils/schedcover.py
>
> Index: utils/schedcover.py
> ===================================================================
> --- /dev/null
> +++ utils/schedcover.py
> @@ -0,0 +1,77 @@
> +#!/usr/bin/python
> +
> +# This creates a CSV file from the output of the debug output of subtarget:
> +# llvm-tblgen --gen-subtarget --debug-only=subtarget-emitter
> +# With thanks to Dave Estes for mentioning the idea at 2014 LLVM Developers' Meeting
> +
> +import os;
> +import sys;
> +import re;
> +import operator;
> +
> +table = {}
> +models = set()
> +filt = None
> +
> +def add(instr, model, resource=None):
> + global table, models
> +
> + entry = table.setdefault(instr, dict())
> + entry[model] = resource
> + models.add(model)
> +
> +def filter_model(m):
> + global filt
> + if m and filt:
> + return filt.search(m) != None
> + else:
> + return True
> +
> +
> +def display():
> + global table, models
> +
> + ordered_table = sorted(table.items(), key=operator.itemgetter(0))
> + ordered_models = filter(filter_model, sorted(models))
> +
> + # print header
> + sys.stdout.write("instruction")
> + for model in ordered_models:
> + if not model: model = "default"
> + sys.stdout.write(", {}".format(model))
> + sys.stdout.write(os.linesep)
> +
> + for (instr, mapping) in ordered_table:
> + sys.stdout.write(instr)
> + for model in ordered_models:
> + if model in mapping:
> + sys.stdout.write(", {}".format(mapping[model]))
> + else:
> + sys.stdout.write(", ")
> + sys.stdout.write(os.linesep)
> +
> +
> +def machineModelCover(path):
> + # The interesting bits
> + re_sched_default = re.compile("SchedRW machine model for ([^ ]*) (.*)\n");
> + re_sched_no_default = re.compile("No machine model for ([^ ]*)\n");
> + re_sched_spec = re.compile("InstRW on ([^ ]*) for ([^ ]*) (.*)\n");
> + re_sched_no_spec = re.compile("No machine model for ([^ ]*) on processor (.*)\n");
> +
> + # scan the file
> + with open(path, 'r') as f:
> + for line in f.readlines():
> + match = re_sched_default.match(line)
> + if match: add(match.group(1), None, match.group(2))
> + match = re_sched_no_default.match(line)
> + if match: add(match.group(1), None)
> + match = re_sched_spec.match(line)
> + if match: add(match.group(2), match.group(1), match.group(3))
> + match = re_sched_no_default.match(line)
> + if match: add(match.group(1), None)
> +
> + display()
> +
> +if len(sys.argv) > 2:
> + filt = re.compile(sys.argv[2], re.IGNORECASE)
> +machineModelCover(sys.argv[1])
>
>
> <D13597.36955.patch>
More information about the llvm-commits
mailing list