diff options
author | Adam Nemet <anemet@apple.com> | 2016-11-11 06:11:56 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-11-11 06:11:56 +0000 |
commit | a6adab268d10db41f8adb660ecfcdaceaa9e57da (patch) | |
tree | 1340f4917f7cbc85c4ded49b1c3051a04ae5eef4 | |
parent | 48f296059d52193b1694d611c7acfbca5da46b9d (diff) | |
download | bcm5719-llvm-a6adab268d10db41f8adb660ecfcdaceaa9e57da.tar.gz bcm5719-llvm-a6adab268d10db41f8adb660ecfcdaceaa9e57da.zip |
[opt-viewer] Make it work in the absence of hotness information
In this case the index page is sorted by the source location.
llvm-svn: 286572
-rwxr-xr-x | llvm/utils/opt-viewer/opt-viewer.py | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/llvm/utils/opt-viewer/opt-viewer.py b/llvm/utils/opt-viewer/opt-viewer.py index 56332a06288..ee5c7b52e11 100755 --- a/llvm/utils/opt-viewer/opt-viewer.py +++ b/llvm/utils/opt-viewer/opt-viewer.py @@ -32,10 +32,23 @@ def demangle(name): class Remark(yaml.YAMLObject): - max_hotness = 1 + max_hotness = 0 + + @classmethod + def should_display_hotness(cls): + # If max_hotness is 0 at the end, we assume hotness information is + # missing and no relative hotness information is displayed + return cls.max_hotness != 0 + # Map function names to their source location for function where inlining happened caller_loc = dict() + def __getattr__(self, name): + # If hotness is missing, assume 0 + if name == 'Hotness': + return 0 + raise AttributeError + @property def File(self): return self.DebugLoc['File'] @@ -90,7 +103,10 @@ class Remark(yaml.YAMLObject): @property def RelativeHotness(self): - return int(round(self.Hotness * 100 / Remark.max_hotness)) + if Remark.should_display_hotness(): + return "{}%".format(int(round(self.Hotness * 100 / Remark.max_hotness))) + else: + return '' @property def key(self): @@ -177,7 +193,7 @@ class SourceFileRenderer: print(''' <tr> <td></td> -<td>{r.RelativeHotness}%</td> +<td>{r.RelativeHotness}</td> <td class=\"column-entry-{r.color}\">{r.Pass}</td> <td><pre style="display:inline">{indent}</pre><span class=\"column-entry-yellow\"> {r.message} </span></td> <td class=\"column-entry-yellow\">{inlining_context}</td> @@ -224,7 +240,7 @@ class IndexRenderer: print(''' <tr> <td><a href={r.Link}>{r.DebugLocString}</a></td> -<td>{r.RelativeHotness}%</td> +<td>{r.RelativeHotness}</td> <td>{r.DemangledFunctionName}</td> <td class=\"column-entry-{r.color}\">{r.Pass}</td> </tr>'''.format(**locals()), file=self.stream) @@ -259,15 +275,14 @@ for input_file in args.yaml_files: f = open(input_file) 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 + # 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) + file_remarks.setdefault(remark.File, dict()).setdefault(remark.Line, []).append(remark) - Remark.max_hotness = max(Remark.max_hotness, remark.Hotness) + Remark.max_hotness = max(Remark.max_hotness, remark.Hotness) # Set up a map between function names and their source location for function where inlining happened for remark in all_remarks.itervalues(): @@ -277,7 +292,10 @@ for remark in all_remarks.itervalues(): if caller: Remark.caller_loc[caller] = arg['DebugLoc'] -sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: r.Hotness, reverse=True) +if Remark.should_display_hotness(): + sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: r.Hotness, reverse=True) +else: + sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: (r.File, r.Line, r.Column)) if not os.path.exists(args.output_dir): os.mkdir(args.output_dir) |