summaryrefslogtreecommitdiffstats
path: root/llvm/utils/opt-viewer/opt-viewer.py
diff options
context:
space:
mode:
authorAdam Nemet <anemet@apple.com>2016-11-10 18:42:56 +0000
committerAdam Nemet <anemet@apple.com>2016-11-10 18:42:56 +0000
commit916f4455351ebf2422c0cf08a7cd583ef8b7684b (patch)
tree97e0a25418379fb9c0408f4900365338e9686e0f /llvm/utils/opt-viewer/opt-viewer.py
parenta22ddddfea7a9ca2637426ad740a7dcf50972788 (diff)
downloadbcm5719-llvm-916f4455351ebf2422c0cf08a7cd583ef8b7684b.tar.gz
bcm5719-llvm-916f4455351ebf2422c0cf08a7cd583ef8b7684b.zip
[opt-viewer] Avoid duplicated remarks
This can happen if a pass is run multiple times or if the code is in a header file which is included multiple times. llvm-svn: 286489
Diffstat (limited to 'llvm/utils/opt-viewer/opt-viewer.py')
-rwxr-xr-xllvm/utils/opt-viewer/opt-viewer.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/utils/opt-viewer/opt-viewer.py b/llvm/utils/opt-viewer/opt-viewer.py
index eceb083ee26..78911e1aa4a 100755
--- a/llvm/utils/opt-viewer/opt-viewer.py
+++ b/llvm/utils/opt-viewer/opt-viewer.py
@@ -82,6 +82,10 @@ class Remark(yaml.YAMLObject):
def RelativeHotness(self):
return int(round(self.Hotness * 100 / Remark.max_hotness))
+ @property
+ def key(self):
+ return (self.__class__, self.Pass, self.Name, self.File, self.Line, self.Column, self.message)
+
class Analysis(Remark):
yaml_tag = '!Analysis'
@@ -193,7 +197,7 @@ class IndexRenderer:
</html>''', file=self.stream)
-all_remarks = []
+all_remarks = dict()
file_remarks = dict()
for input_file in args.yaml_files:
@@ -201,11 +205,16 @@ for input_file in args.yaml_files:
docs = yaml.load_all(f)
for remark in docs:
if hasattr(remark, 'Hotness'):
+ # Avoid duplicated remarks
+ if remark.key in all_remarks:
+ continue
+ all_remarks[remark.key] = remark
+
file_remarks.setdefault(remark.File, dict()).setdefault(remark.Line, []).append(remark);
- all_remarks.append(remark)
+
Remark.max_hotness = max(Remark.max_hotness, remark.Hotness)
-all_remarks = sorted(all_remarks, key=lambda r: r.Hotness, reverse=True)
+sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: r.Hotness, reverse=True)
if not os.path.exists(args.output_dir):
os.mkdir(args.output_dir)
@@ -213,6 +222,6 @@ if not os.path.exists(args.output_dir):
for (filename, remarks) in file_remarks.iteritems():
SourceFileRenderer(filename).render(remarks)
-IndexRenderer().render(all_remarks)
+IndexRenderer().render(sorted_remarks)
shutil.copy(os.path.join(os.path.dirname(os.path.realpath(__file__)), "style.css"), args.output_dir)
OpenPOWER on IntegriCloud