[llvm] r344599 - [VPlan] Script to extract VPlan digraphs from log

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 16 02:37:52 PDT 2018


Author: rengolin
Date: Tue Oct 16 02:37:52 2018
New Revision: 344599

URL: http://llvm.org/viewvc/llvm-project?rev=344599&view=rev
Log:
[VPlan] Script to extract VPlan digraphs from log

The vectoriser's debug log prints VPlan digraphs, but it's a bit
cumbersome to extract them and render them into PNG images. This script
does exactly that, being careful enough to extract all individual plans,
name them appropriately and save in either .dot or .png files.

Example usage:

$ opt -O3 -debug-only=loop-vectorize file.ll -S -o /dev/null 2> debug.log

$ $LLVM_SRC/utils/extract_vplan.py < debug.log
Exporting VF1UF1 to DOT: VPlanVF1UF1.dot
Exporting VF24UF1 to DOT: VPlanVF24UF1.dot

$ $LLVM_SRC/utils/extract_vplan.py --png < debug.log
Exporting VF1UF1 to PNG via dot: VPlanVF1UF1.png
Exporting VF24UF1 to PNG via dot: VPlanVF24UF1.png

$ xdot VPlanVF1UF1.dot

Differential Revision: https://reviews.llvm.org/D53142


Added:
    llvm/trunk/utils/extract_vplan.py   (with props)

Added: llvm/trunk/utils/extract_vplan.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/extract_vplan.py?rev=344599&view=auto
==============================================================================
--- llvm/trunk/utils/extract_vplan.py (added)
+++ llvm/trunk/utils/extract_vplan.py Tue Oct 16 02:37:52 2018
@@ -0,0 +1,46 @@
+#!/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.
+
+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)

Propchange: llvm/trunk/utils/extract_vplan.py
------------------------------------------------------------------------------
    svn:executable = *




More information about the llvm-commits mailing list