JJessica PaquetteAdd JSON output option to llvm-remark-size-diff
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Add a tool for diffing size remarks This is a tool which can handle bitstream and YAML remarks. The idea here is to provide more insight into which functions changed in a benchmark when testing compiler changes. E.g. "foo got 20% bigger, so maybe we should look more closely at that." To use the tool, you can use... $ llvm-remark-size-diff remarks_file_a remarks_file_b --parser=yaml|bitstream ... on two remarks files containing at least instruction count remarks. This will output some data on instruction count change and also other relevant information such as stack size change from remarks_file_a to remarks_file_b. This is a bit of a WIP so I'm happy to change the format etc. Ultimately I think it'd be best to have some JSON output which could be consumed by another tool. But some base-level, greppable output is very handy to have anyway. The format I'm proposing here is <files> <inc/dec in inst count> <fn name> <inst count change> <stack B change> Where the files and increase/decrease are indicated like below: - <files> is one of ++ (file B), -- (file A), == (both) - <inc/dec in inst count> is one of > (increase) or < (decrease) This makes it easy to grep for things like "which functions appeared in A but did not appear in B?" Or "what are all the instruction count decreases?" Differential Revision: https://reviews.llvm.org/D112940 | 4 年前 | |
Add JSON output option to llvm-remark-size-diff This adds JSON output to llvm-remark-size-diff. The goal here is to make it easy for external tools to consume output from llvm-remark-size-diff. These tools could be used for automated size analysis. (E.g. in CI). To specify JSON output, use --report_style=json. JSON output can be pretty-printed via --pretty. With automation in mind, the schema looks like this: "Files": { "A": <filename_a> "B": <filename_b> }, "InBoth": [ { "FunctionName": <function name>, "InstCount": [ <count_in_a>, <count_in_b> ], "StackSize": [ <count_in_a>, <count_in_b> ] }, ... ] "OnlyInA": [ { "FunctionName": <function name>, "InstCount": [ <count_in_a>, 0 ], "StackSize": [ <count_in_a>, 0 ] }, ... ] "OnlyInB": [ { "FunctionName": <function name>, "InstCount": [ 0, <count_in_b> ], "StackSize": [ 0, <count_in_b> ] }, ... ] A few notes: - Filenames are included, because tools may want to combine many outputs together in some way (a big JSON file, a big CSV, or something.) - Counts are represented as [a, b] so that a diff can be calculated via b - a. The original counts may be useful for size analysis (e.g. was this function extremely large before?) and so both are preserved. - OnlyInA and OnlyInB have a 0 for one of the counts always. This is to make it easier for tools to share code between OnlyInA, OnlyInB, and InBoth. Differential Revision: https://reviews.llvm.org/D121173 | 4 年前 |