mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
3d63cfe214
Regarding this bug in Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=46451 I went ahead and fixed the regexp pattern and now Python script is able to extract vplan graphs from the log files. Additionally some test for this would be nice to have but I'm not sure are Python scripts tested in LLVM and if so where they live. Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D86068
49 lines
1.6 KiB
Python
Executable File
49 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# This script extracts the VPlan digraphs from the vectoriser debug messages
|
|
# and saves them in individual dot files (one for each plan). Optionally, and
|
|
# providing 'dot' is installed, it can also render the dot into a PNG file.
|
|
|
|
from __future__ import print_function
|
|
|
|
import sys
|
|
import re
|
|
import argparse
|
|
import shutil
|
|
import subprocess
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--png', action='store_true')
|
|
args = parser.parse_args()
|
|
|
|
dot = shutil.which('dot')
|
|
if args.png and not dot:
|
|
raise RuntimeError("Can't export to PNG without 'dot' in the system")
|
|
|
|
pattern = re.compile(r"(digraph VPlan {.*?\n})",re.DOTALL)
|
|
matches = re.findall(pattern, sys.stdin.read())
|
|
|
|
for vplan in matches:
|
|
m = re.search("graph \[.+(VF=.+,UF.+)", vplan)
|
|
if not m:
|
|
raise ValueError("Can't get the right VPlan name")
|
|
name = re.sub('[^a-zA-Z0-9]', '', m.group(1))
|
|
|
|
if args.png:
|
|
filename = 'VPlan' + name + '.png'
|
|
print("Exporting " + name + " to PNG via dot: " + filename)
|
|
p = subprocess.Popen([dot, '-Tpng', '-o', filename],
|
|
encoding='utf-8',
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
out, err = p.communicate(input=vplan)
|
|
if err:
|
|
raise RuntimeError("Error running dot: " + err)
|
|
|
|
else:
|
|
filename = 'VPlan' + name + '.dot'
|
|
print("Exporting " + name + " to DOT: " + filename)
|
|
with open(filename, 'w') as out:
|
|
out.write(vplan)
|