Index: utils/opt-viewer/opt-viewer.py =================================================================== --- utils/opt-viewer/opt-viewer.py +++ utils/opt-viewer/opt-viewer.py @@ -169,7 +169,7 @@ def map_remarks(all_remarks): # Set up a map between function names and their source location for # function where inlining happened - for remark in all_remarks.itervalues(): + for remark in optrecord.itervalues(all_remarks): if isinstance(remark, optrecord.Passed) and remark.Pass == "inline" and remark.Name == "Inlined": for arg in remark.Args: caller = arg.get('Caller') @@ -190,9 +190,9 @@ pmap(_render_file_bound, file_remarks.items()) if should_display_hotness: - sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: (r.Hotness, r.File, r.Line, r.Column, r.__dict__), reverse=True) + sorted_remarks = sorted(optrecord.itervalues(all_remarks), key=lambda r: (r.Hotness, r.File, r.Line, r.Column, r.PassWithDiffPrefix, r.yaml_tag, r.DemangledFunctionName), reverse=True) else: - sorted_remarks = sorted(all_remarks.itervalues(), key=lambda r: (r.File, r.Line, r.Column, r.__dict__)) + sorted_remarks = sorted(optrecord.itervalues(all_remarks), key=lambda r: (r.File, r.Line, r.Column, r.PassWithDiffPrefix, r.yaml_tag, r.DemangledFunctionName)) IndexRenderer(args.output_dir).render(sorted_remarks) shutil.copy(os.path.join(os.path.dirname(os.path.realpath(__file__)), Index: utils/opt-viewer/optrecord.py =================================================================== --- utils/opt-viewer/optrecord.py +++ utils/opt-viewer/optrecord.py @@ -42,8 +42,9 @@ def demangle(name): with p_lock: - p.stdin.write(name + '\n') - return p.stdout.readline().rstrip() + p.stdin.write((name + '\n').encode('utf-8')) + p.stdin.flush() + return p.stdout.readline().rstrip().decode('utf-8') def html_file_name(filename):