Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
Jessica Paquette
committed
Mar 8, 2022
1 parent
c832edf
commit 355ad3a
Showing
4 changed files
with
217 additions
and
8 deletions.
There are no files selected for viewing
57 changes: 57 additions & 0 deletions
57
llvm/test/tools/llvm-remark-size-diff/json-add-remove-func.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
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": [] |
38 changes: 38 additions & 0 deletions
38
llvm/test/tools/llvm-remark-size-diff/json-increase-decrease-inst-count.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
RUN: llvm-remark-size-diff %p/Inputs/1-func-1-instr-1-stack.yaml %p/Inputs/1-func-2-instr-2-stack.yaml --parser=yaml --report_style=json --pretty | FileCheck -strict-whitespace %s --check-prefix=INCREASE | ||
RUN: llvm-remark-size-diff %p/Inputs/1-func-2-instr-2-stack.yaml %p/Inputs/1-func-1-instr-1-stack.yaml --parser=yaml --report_style=json --pretty | FileCheck -strict-whitespace %s --check-prefix=DECREASE | ||
|
||
; Test a size increase/decrease of one instruction + 1 stack byte. | ||
|
||
; INCREASE-LABEL: "Files": | ||
; INCREASE: "A":{{.*}}1-func-1-instr-1-stack.yaml | ||
; INCREASE-NEXT: "B":{{.*}}1-func-2-instr-2-stack.yaml | ||
|
||
; INCREASE-LABEL: "InBoth": [ | ||
; INCREASE: "FunctionName": "func0" | ||
; INCREASE-NEXT: "InstCount": | ||
; INCREASE-NEXT: 1, | ||
; INCREASE-NEXT: 2 | ||
; INCREASE-NEXT: ], | ||
; INCREASE-NEXT: "StackSize": | ||
; INCREASE-NEXT: 1, | ||
; INCREASE-NEXT: 2 | ||
|
||
; INCREASE: "OnlyInA": [], | ||
; INCREASE: "OnlyInB": [] | ||
|
||
; DECREASE-LABEL: "Files": | ||
; DECREASE: "A":{{.*}}1-func-2-instr-2-stack.yaml | ||
; DECREASE-NEXT: "B":{{.*}}1-func-1-instr-1-stack.yaml | ||
|
||
; DECREASE-LABEL: "InBoth": [ | ||
; DECREASE: "FunctionName": "func0" | ||
; DECREASE-NEXT: "InstCount": | ||
; DECREASE-NEXT: 2, | ||
; DECREASE-NEXT: 1 | ||
; DECREASE-NEXT: ], | ||
; DECREASE-NEXT: "StackSize": | ||
; DECREASE-NEXT: 2, | ||
; DECREASE-NEXT: 1 | ||
|
||
; DECREASE: "OnlyInA": [], | ||
; DECREASE: "OnlyInB": [] |
18 changes: 18 additions & 0 deletions
18
llvm/test/tools/llvm-remark-size-diff/json-no-difference.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
RUN: llvm-remark-size-diff %p/Inputs/1-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-LABEL: "Files": | ||
; CHECK: "A":{{.*}}1-func-1-instr-1-stack.yaml | ||
; CHECK-NEXT: "B":{{.*}}1-func-1-instr-1-stack.yaml | ||
|
||
; CHECK-LABEL: "InBoth": | ||
; CHECK: "FunctionName": "func0", | ||
; CHECK-NEXT: "InstCount": | ||
; CHECK-NEXT: 1, | ||
; CHECK-NEXT: 1 | ||
; CHECK-NEXT: ], | ||
; CHECK-NEXT: "StackSize": [ | ||
; CHECK-NEXT: 1, | ||
; CHECK-NEXT: 1 | ||
|
||
; CHECK: "OnlyInA": [] | ||
; CHECK: "OnlyInB": [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters