brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · cff6f50 Raw
51 lines · python
1#!/usr/bin/env python2 3# This script extracts the VPlan digraphs from the vectoriser debug messages4# and saves them in individual dot files (one for each plan). Optionally, and5# providing 'dot' is installed, it can also render the dot into a PNG file.6 7from __future__ import print_function8 9import sys10import re11import argparse12import shutil13import subprocess14 15parser = argparse.ArgumentParser()16parser.add_argument("--png", action="store_true")17args = parser.parse_args()18 19dot = shutil.which("dot")20if args.png and not dot:21    raise RuntimeError("Can't export to PNG without 'dot' in the system")22 23pattern = re.compile(r"(digraph VPlan {.*?\n})", re.DOTALL)24matches = re.findall(pattern, sys.stdin.read())25 26for 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))31 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,41        )42        out, err = p.communicate(input=vplan)43        if err:44            raise RuntimeError("Error running dot: " + err)45 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)51