summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2018-10-16 09:37:52 +0000
committerRenato Golin <renato.golin@linaro.org>2018-10-16 09:37:52 +0000
commit7c15b630a5f95ab7f7b8841dce22c0ea35eadaad (patch)
tree821303f74c67c45ed5d1f999adb6a248eb92bb4e /llvm
parentc858748c9b566f684f17d598dbc2effd335a8566 (diff)
downloadbcm5719-llvm-7c15b630a5f95ab7f7b8841dce22c0ea35eadaad.tar.gz
bcm5719-llvm-7c15b630a5f95ab7f7b8841dce22c0ea35eadaad.zip
[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 llvm-svn: 344599
Diffstat (limited to 'llvm')
-rwxr-xr-xllvm/utils/extract_vplan.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/utils/extract_vplan.py b/llvm/utils/extract_vplan.py
new file mode 100755
index 00000000000..ac0055d2e79
--- /dev/null
+++ b/llvm/utils/extract_vplan.py
@@ -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)
OpenPOWER on IntegriCloud