diff options
author | Adam Nemet <anemet@apple.com> | 2016-11-15 08:40:51 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-11-15 08:40:51 +0000 |
commit | 8741656efdd0b4f5a4dd6d2f6b7ad8d6e4f09725 (patch) | |
tree | 39e19a07bda28947eb8af3ba27ec6d1f84625f37 /llvm/utils/opt-viewer/opt-viewer.py | |
parent | 7beff42f8fb99e97fd54574346386b25eb2904dd (diff) | |
download | bcm5719-llvm-8741656efdd0b4f5a4dd6d2f6b7ad8d6e4f09725.tar.gz bcm5719-llvm-8741656efdd0b4f5a4dd6d2f6b7ad8d6e4f09725.zip |
[opt-viewer] Add support for libYAML for faster parsing
This results in a speed-up of over 6x on sqlite3.
Before:
$ time -p /org/llvm/utils/opt-viewer/opt-viewer.py ./MultiSource/Applications/sqlite3/CMakeFiles/sqlite3.dir/sqlite3.c.opt.yaml html
real 415.07
user 410.00
sys 4.66
After with libYAML:
$ time -p /org/llvm/utils/opt-viewer/opt-viewer.py ./MultiSource/Applications/sqlite3/CMakeFiles/sqlite3.dir/sqlite3.c.opt.yaml html
real 63.96
user 60.03
sys 3.67
I followed these steps to get libYAML working with PyYAML: http://rmcgibbo.github.io/blog/2013/05/23/faster-yaml-parsing-with-libyaml/
llvm-svn: 286942
Diffstat (limited to 'llvm/utils/opt-viewer/opt-viewer.py')
-rwxr-xr-x | llvm/utils/opt-viewer/opt-viewer.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/utils/opt-viewer/opt-viewer.py b/llvm/utils/opt-viewer/opt-viewer.py index bc30618c854..c936597475c 100755 --- a/llvm/utils/opt-viewer/opt-viewer.py +++ b/llvm/utils/opt-viewer/opt-viewer.py @@ -5,9 +5,16 @@ from __future__ import print_function desc = '''Generate HTML output to visualize optimization records from the YAML files generated with -fsave-optimization-record and -fdiagnostics-show-hotness. -The tools requires PyYAML and Pygments Python packages.''' +The tools requires PyYAML and Pygments Python packages. + +For faster parsing, you may want to use libYAML with PyYAML.''' import yaml +# Try to use the C parser. +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader import argparse import os.path import re @@ -34,6 +41,9 @@ def demangle(name): class Remark(yaml.YAMLObject): max_hotness = 0 + # Work-around for http://pyyaml.org/ticket/154. + yaml_loader = Loader + @classmethod def should_display_hotness(cls): # If max_hotness is 0 at the end, we assume hotness information is @@ -273,7 +283,7 @@ file_remarks = dict() for input_file in args.yaml_files: f = open(input_file) - docs = yaml.load_all(f) + docs = yaml.load_all(f, Loader=Loader) for remark in docs: # Avoid remarks withoug debug location or if they are duplicated if not hasattr(remark, 'DebugLoc') or remark.key in all_remarks: |