You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.246
Former-commit-id: 0c7ce5b1a7851e13f22acfd379b7f9fb304e4833
This commit is contained in:
parent
a7724cd563
commit
279aa8f685
67
external/llvm/utils/llvm-gisel-cov.py
vendored
Normal file
67
external/llvm/utils/llvm-gisel-cov.py
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
Summarize the information in the given coverage files.
|
||||
|
||||
Emits the number of rules covered or the percentage of rules covered depending
|
||||
on whether --num-rules has been used to specify the total number of rules.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import struct
|
||||
|
||||
class FileFormatError(Exception):
|
||||
pass
|
||||
|
||||
def backend_int_pair(s):
|
||||
backend, sep, value = s.partition('=')
|
||||
if (sep is None):
|
||||
raise argparse.ArgumentTypeError("'=' missing, expected name=value")
|
||||
if (not backend):
|
||||
raise argparse.ArgumentTypeError("Expected name=value")
|
||||
if (not value):
|
||||
raise argparse.ArgumentTypeError("Expected name=value")
|
||||
return backend, int(value)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('input', nargs='+')
|
||||
parser.add_argument('--num-rules', type=backend_int_pair, action='append',
|
||||
metavar='BACKEND=NUM',
|
||||
help='Specify the number of rules for a backend')
|
||||
args = parser.parse_args()
|
||||
|
||||
covered_rules = {}
|
||||
|
||||
for input_filename in args.input:
|
||||
with open(input_filename, 'rb') as input_fh:
|
||||
data = input_fh.read()
|
||||
pos = 0
|
||||
while data:
|
||||
backend, _, data = data.partition('\0')
|
||||
pos += len(backend)
|
||||
pos += 1
|
||||
|
||||
if len(backend) == 0:
|
||||
raise FileFormatError()
|
||||
backend, = struct.unpack("%ds" % len(backend), backend)
|
||||
|
||||
while data:
|
||||
if len(data) < 8:
|
||||
raise FileFormatError()
|
||||
rule_id, = struct.unpack("Q", data[:8])
|
||||
pos += 8
|
||||
data = data[8:]
|
||||
if rule_id == (2 ** 64) - 1:
|
||||
break
|
||||
covered_rules[backend] = covered_rules.get(backend, {})
|
||||
covered_rules[backend][rule_id] = covered_rules[backend].get(rule_id, 0) + 1
|
||||
|
||||
num_rules = dict(args.num_rules)
|
||||
for backend, rules_for_backend in covered_rules.items():
|
||||
if backend in num_rules:
|
||||
print "%s: %3.2f%% of rules covered" % (backend, (float(len(rules_for_backend.keys())) / num_rules[backend]) * 100)
|
||||
else:
|
||||
print "%s: %d rules covered" % (backend, len(rules_for_backend.keys()))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user