[mlir][int-range] Limit xor int range inference to i1 (#116968)
[llvm-project.git] / llvm / utils / extract_vplan.py
blobcff6f5074d7716972993d39e58bba25c6da17c21
1 #!/usr/bin/env python
3 # This script extracts the VPlan digraphs from the vectoriser debug messages
4 # and saves them in individual dot files (one for each plan). Optionally, and
5 # providing 'dot' is installed, it can also render the dot into a PNG file.
7 from __future__ import print_function
9 import sys
10 import re
11 import argparse
12 import shutil
13 import subprocess
15 parser = argparse.ArgumentParser()
16 parser.add_argument("--png", action="store_true")
17 args = parser.parse_args()
19 dot = shutil.which("dot")
20 if args.png and not dot:
21 raise RuntimeError("Can't export to PNG without 'dot' in the system")
23 pattern = re.compile(r"(digraph VPlan {.*?\n})", re.DOTALL)
24 matches = re.findall(pattern, sys.stdin.read())
26 for vplan in matches:
27 m = re.search("graph \[.+(VF=.+,UF.+)", vplan)
28 if not m:
29 raise ValueError("Can't get the right VPlan name")
30 name = re.sub("[^a-zA-Z0-9]", "", m.group(1))
32 if args.png:
33 filename = "VPlan" + name + ".png"
34 print("Exporting " + name + " to PNG via dot: " + filename)
35 p = subprocess.Popen(
36 [dot, "-Tpng", "-o", filename],
37 encoding="utf-8",
38 stdin=subprocess.PIPE,
39 stdout=subprocess.PIPE,
40 stderr=subprocess.PIPE,
42 out, err = p.communicate(input=vplan)
43 if err:
44 raise RuntimeError("Error running dot: " + err)
46 else:
47 filename = "VPlan" + name + ".dot"
48 print("Exporting " + name + " to DOT: " + filename)
49 with open(filename, "w") as out:
50 out.write(vplan)