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
58 lines
1.6 KiB
Plaintext
58 lines
1.6 KiB
Plaintext
RUN: llvm-remark-size-diff %p/Inputs/1-func-1-instr-1-stack.yaml %p/Inputs/2-identical-func-1-instr-1-stack.yaml --parser=yaml --report_style=json --pretty | FileCheck -strict-whitespace %s --check-prefix=ADD
|
|
RUN: llvm-remark-size-diff %p/Inputs/2-identical-func-1-instr-1-stack.yaml %p/Inputs/1-func-1-instr-1-stack.yaml --parser=yaml --report_style=json --pretty | FileCheck -strict-whitespace %s --check-prefix=REMOVE
|
|
|
|
; The "two-identical-one-instr-funcs" file contains a single-instruction
|
|
; function which does not appear in the other file.
|
|
|
|
; ADD-LABEL: "Files":
|
|
; ADD: "A":{{.*}}1-func-1-instr-1-stack.yaml
|
|
; ADD-NEXT: "B":{{.*}}2-identical-func-1-instr-1-stack.yaml
|
|
|
|
; ADD-LABEL: "InBoth": [
|
|
; ADD: "FunctionName": "func0",
|
|
; ADD-NEXT: "InstCount": [
|
|
; ADD-NEXT: 1,
|
|
; ADD-NEXT: 1
|
|
; ADD-NEXT: ],
|
|
; ADD-NEXT: "StackSize": [
|
|
; ADD-NEXT: 1,
|
|
; ADD-NEXT: 1
|
|
|
|
; ADD-LABEL: "OnlyInA": [],
|
|
|
|
; ADD-LABEL: "OnlyInB": [
|
|
; ADD: "FunctionName": "func1",
|
|
; ADD-NEXT: "InstCount": [
|
|
; ADD-NEXT: 0,
|
|
; ADD-NEXT: 1
|
|
; ADD-NEXT: ],
|
|
; ADD-NEXT: "StackSize": [
|
|
; ADD-NEXT: 0,
|
|
; ADD-NEXT: 1
|
|
|
|
; REMOVE-LABEL: "Files":
|
|
; REMOVE: "A":{{.*}}2-identical-func-1-instr-1-stack.yaml
|
|
; REMOVE-NEXT: "B":{{.*}}1-func-1-instr-1-stack.yaml
|
|
|
|
; REMOVE-LABEL: "InBoth": [
|
|
; REMOVE: "FunctionName": "func0",
|
|
; REMOVE-NEXT: "InstCount": [
|
|
; REMOVE-NEXT: 1,
|
|
; REMOVE-NEXT: 1
|
|
; REMOVE-NEXT: ],
|
|
; REMOVE-NEXT: "StackSize": [
|
|
; REMOVE-NEXT: 1,
|
|
; REMOVE-NEXT: 1
|
|
|
|
; REMOVE-LABEL: "OnlyInA": [
|
|
; REMOVE: "FunctionName": "func1",
|
|
; REMOVE-NEXT: "InstCount": [
|
|
; REMOVE-NEXT: 1,
|
|
; REMOVE-NEXT: 0
|
|
; REMOVE-NEXT: ],
|
|
; REMOVE-NEXT: "StackSize": [
|
|
; REMOVE-NEXT: 1,
|
|
; REMOVE-NEXT: 0
|
|
|
|
; REMOVE-LABEL: "OnlyInB": []
|