diff options
author | Adam Nemet <anemet@apple.com> | 2016-11-07 22:41:13 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-11-07 22:41:13 +0000 |
commit | b103fc52d3ae1fb23414a3bd454aabacd1e7db1e (patch) | |
tree | 580ee3dae50d0422eb11101d3da1e1aa64796cd5 /llvm/utils/opt-viewer/opt-viewer.py | |
parent | 6f020d91a1cd22352cead0fdcd6b17052663c52f (diff) | |
download | bcm5719-llvm-b103fc52d3ae1fb23414a3bd454aabacd1e7db1e.tar.gz bcm5719-llvm-b103fc52d3ae1fb23414a3bd454aabacd1e7db1e.zip |
[OptDiag, opt-viewer] Save callee's location and display as link
With this we get a new field in the YAML record if the value being
streamed out has a debug location. For examples, please see the changes
to the tests.
This is then used in opt-viewer to display a link for the callee
function in the inlining remarks.
Differential Revision: https://reviews.llvm.org/D26366
llvm-svn: 286169
Diffstat (limited to 'llvm/utils/opt-viewer/opt-viewer.py')
-rwxr-xr-x | llvm/utils/opt-viewer/opt-viewer.py | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/llvm/utils/opt-viewer/opt-viewer.py b/llvm/utils/opt-viewer/opt-viewer.py index 1cafe0fe036..9d699f5d032 100755 --- a/llvm/utils/opt-viewer/opt-viewer.py +++ b/llvm/utils/opt-viewer/opt-viewer.py @@ -46,20 +46,36 @@ class Remark(yaml.YAMLObject): def DemangledFunctionName(self): return demangle(self.Function) + @classmethod + def make_link(cls, File, Line): + return "{}#L{}".format(SourceFileRenderer.html_file_name(File), Line) + @property def Link(self): - return "{}#L{}".format(SourceFileRenderer.html_file_name(self.File), self.Line) + return Remark.make_link(self.File, self.Line) + + def getArgString(self, mapping): + mapping = mapping.copy() + dl = mapping.get('DebugLoc') + if dl: + del mapping['DebugLoc'] + + assert(len(mapping) == 1) + (key, value) = mapping.items()[0] + + if key == 'Caller' or key == 'Callee': + value = demangle(value) - def getArgString(self, pair): - if pair[0] == 'Callee' or pair[0] == 'Caller': - return demangle(pair[1]) - return pair[1] + if dl and key != 'Caller': + return "<a href={}>{}</a>".format( + Remark.make_link(dl['File'], dl['Line']), value) + else: + return value @property def message(self): - # Args is a list of mappings (dictionaries) with each dictionary with - # exactly one key-value pair. - values = [self.getArgString(mapping.items()[0]) for mapping in self.Args] + # Args is a list of mappings (dictionaries) + values = [self.getArgString(mapping) for mapping in self.Args] return "".join(values) @property |