xref: /llvm-project/llvm/docs/CommandGuide/llvm-remarkutil.rst (revision 0fae9a24b9acf03ab072bb8aca92a467b697a08a)
1db10b471SAaron Ballmanllvm-remarkutil - Remark utility
2db10b471SAaron Ballman================================
3db10b471SAaron Ballman
4db10b471SAaron Ballman.. program:: llvm-remarkutil
5db10b471SAaron Ballman
6*0fae9a24SZain JaffalSynopsis
7db10b471SAaron Ballman--------
8db10b471SAaron Ballman
9db10b471SAaron Ballman:program:`llvm-remarkutil` [*subcommmand*] [*options*]
10db10b471SAaron Ballman
11*0fae9a24SZain JaffalDescription
12db10b471SAaron Ballman-----------
13db10b471SAaron Ballman
14db10b471SAaron BallmanUtility for displaying information from, and converting between different
15db10b471SAaron Ballman`remark <https://llvm.org/docs/Remarks.html>`_ formats.
16db10b471SAaron Ballman
17db10b471SAaron BallmanSubcommands
18db10b471SAaron Ballman-----------
19db10b471SAaron Ballman
20db10b471SAaron Ballman  * :ref:`bitstream2yaml_subcommand` - Reserialize bitstream remarks to YAML.
21db10b471SAaron Ballman  * :ref:`yaml2bitstream_subcommand` - Reserialize YAML remarks to bitstream.
22a4591a61SJessica Paquette  * :ref:`instruction-count_subcommand` - Output function instruction counts.
23db01cf7bSZain Jaffal  * :ref:`annotation-count_subcommand` - Output remark type count from annotation remarks.
2424f320e4SZain Jaffal  * :ref:`size-diff_subcommand` - Compute diff in size remarks.
25436758f7SZain Jaffal
26db10b471SAaron Ballman.. _bitstream2yaml_subcommand:
27db10b471SAaron Ballman
28db10b471SAaron Ballmanbitstream2yaml
29db10b471SAaron Ballman~~~~~~~~~~~~~~
30db10b471SAaron Ballman
31db10b471SAaron Ballman.. program:: llvm-remarkutil bitstream2yaml
32db10b471SAaron Ballman
33db10b471SAaron BallmanUSAGE: :program:`llvm-remarkutil` bitstream2yaml <input file> -o <output file>
34db10b471SAaron Ballman
35db10b471SAaron BallmanSummary
36db10b471SAaron Ballman^^^^^^^
37db10b471SAaron Ballman
38db10b471SAaron BallmanTakes a bitstream remark file as input, and reserializes that file as YAML.
39db10b471SAaron Ballman
40db10b471SAaron Ballman.. _yaml2bitstream_subcommand:
41db10b471SAaron Ballman
42db10b471SAaron Ballmanyaml2bitstream
43db10b471SAaron Ballman~~~~~~~~~~~~~~
44db10b471SAaron Ballman
45db10b471SAaron Ballman.. program:: llvm-remarkutil yaml2bitstream
46db10b471SAaron Ballman
47db10b471SAaron BallmanUSAGE: :program:`llvm-remarkutil` yaml2bitstream <input file> -o <output file>
48db10b471SAaron Ballman
49db10b471SAaron BallmanSummary
50db10b471SAaron Ballman^^^^^^^
51db10b471SAaron Ballman
52db10b471SAaron BallmanTakes a YAML remark file as input, and reserializes that file in the bitstream
53db10b471SAaron Ballmanformat.
54a4591a61SJessica Paquette
55a4591a61SJessica Paquette.. _instruction-count_subcommand:
56a4591a61SJessica Paquette
57a4591a61SJessica Paquetteinstruction-count
58a4591a61SJessica Paquette~~~~~~~~~~~~~~~~~
59a4591a61SJessica Paquette
60a4591a61SJessica Paquette.. program:: llvm-remarkutil instruction-count
61a4591a61SJessica Paquette
62bdb173d0SZain JaffalUSAGE: :program:`llvm-remarkutil` instruction-count <input file> --parser=<bitstream|yaml> [--use-debug-loc] -o <output file>
63a4591a61SJessica Paquette
64a4591a61SJessica PaquetteSummary
65a4591a61SJessica Paquette^^^^^^^
66a4591a61SJessica Paquette
67a4591a61SJessica PaquetteOutputs instruction count remarks for every function. Instruction count remarks
68a4591a61SJessica Paquetteencode the number of instructions in a function at assembly printing time.
69a4591a61SJessica Paquette
70a4591a61SJessica PaquetteInstruction count remarks require asm-printer remarks.
71a4591a61SJessica Paquette
72a4591a61SJessica PaquetteCSV format is as follows:
73a4591a61SJessica Paquette
74a4591a61SJessica Paquette::
75*0fae9a24SZain Jaffal
76a4591a61SJessica Paquette  Function,InstructionCount
77a4591a61SJessica Paquette  foo,123
78db01cf7bSZain Jaffal
79bdb173d0SZain Jaffalif `--use-debug-loc` is passed then the CSV will include the source path, line number and column.
80bdb173d0SZain Jaffal
81bdb173d0SZain Jaffal::
82*0fae9a24SZain Jaffal
83bdb173d0SZain Jaffal  Source,Function,InstructionCount
84bdb173d0SZain Jaffal  path:line:column,foo,3
85bdb173d0SZain Jaffal
86b4ba5c79SAiden Grossman.. _annotation-count_subcommand:
87b4ba5c79SAiden Grossman
88db01cf7bSZain Jaffalannotation-count
89db01cf7bSZain Jaffal~~~~~~~~~~~~~~~~~
90db01cf7bSZain Jaffal
91db01cf7bSZain Jaffal.. program:: llvm-remarkutil annotation-count
92db01cf7bSZain Jaffal
93bdb173d0SZain JaffalUSAGE: :program:`llvm-remarkutil` annotation-count <input file> --parser=<bitstream|yaml> --annotation-type=<type>  [--use-debug-loc] -o <output file>
94db01cf7bSZain Jaffal
95db01cf7bSZain JaffalSummary
96db01cf7bSZain Jaffal^^^^^^^
97db01cf7bSZain Jaffal
98db01cf7bSZain JaffalOutputs a count for annotation-type `<type>` remark for every function. The count expresses
99db01cf7bSZain Jaffalthe number of remark checks inserted at the function.
100db01cf7bSZain Jaffal
101db01cf7bSZain JaffalAnnotation count remarks require AnnotationRemarksPass remarks.
102db01cf7bSZain Jaffal
103db01cf7bSZain JaffalCSV format is as follows:
104db01cf7bSZain Jaffal
105db01cf7bSZain Jaffal::
106*0fae9a24SZain Jaffal
107db01cf7bSZain Jaffal  Function,Count
108db01cf7bSZain Jaffal  foo,123
109bdb173d0SZain Jaffal
110bdb173d0SZain Jaffalif `--use-debug-loc` is passed then the CSV will include the source path, line number and column.
111bdb173d0SZain Jaffal
112bdb173d0SZain Jaffal::
113*0fae9a24SZain Jaffal
114bdb173d0SZain Jaffal  Source,Function,Count
115bdb173d0SZain Jaffal  path:line:column,foo,3
11624f320e4SZain Jaffal
11731c2cf11SZain Jaffal.. _count_subcommand:
11831c2cf11SZain Jaffal
11931c2cf11SZain Jaffalcount
12031c2cf11SZain Jaffal~~~~~
12131c2cf11SZain Jaffal
12231c2cf11SZain Jaffal.. program:: llvm-remarkutil count
12331c2cf11SZain Jaffal
12431c2cf11SZain JaffalUSAGE: :program:`llvm-remarkutil` count [*options*] <input file>
12531c2cf11SZain Jaffal
12631c2cf11SZain JaffalSummary
12731c2cf11SZain Jaffal^^^^^^^
12831c2cf11SZain Jaffal
129*0fae9a24SZain Jaffal:program:`llvm-remarkutil count` counts `remarks <https://llvm.org/docs/Remarks.html>`_ based on specified properties.
130ab97b89dSGoodDaisyBy default the tool counts remarks based on how many occur in a source file or function or total for the generated remark file.
13131c2cf11SZain JaffalThe tool also supports collecting count based on specific remark arguments. The specified arguments should have an integer value to be able to report a count.
13231c2cf11SZain Jaffal
13331c2cf11SZain JaffalThe tool contains utilities to filter the remark count based on remark name, pass name, argument value and remark type.
134*0fae9a24SZain Jaffal
135*0fae9a24SZain JaffalOptions
136*0fae9a24SZain Jaffal^^^^^^^
13731c2cf11SZain Jaffal
13831c2cf11SZain Jaffal.. option:: --parser=<yaml|bitstream>
13931c2cf11SZain Jaffal
14031c2cf11SZain Jaffal  Select the type of input remark parser. Required.
141*0fae9a24SZain Jaffal
14231c2cf11SZain Jaffal  * ``yaml`` : The tool will parse YAML remarks.
14331c2cf11SZain Jaffal  * ``bitstream`` : The tool will parse bitstream remarks.
14431c2cf11SZain Jaffal
145*0fae9a24SZain Jaffal.. option:: --count-by=<value>
146*0fae9a24SZain Jaffal
14731c2cf11SZain Jaffal  Select option to collect remarks by.
148*0fae9a24SZain Jaffal
14931c2cf11SZain Jaffal  * ``remark-name`` : count how many individual remarks exist.
15031c2cf11SZain Jaffal  * ``arg`` : count remarks based on specified arguments passed by --(r)args. The argument value must be a number.
15131c2cf11SZain Jaffal
15231c2cf11SZain Jaffal.. option:: --group-by=<value>
153*0fae9a24SZain Jaffal
15431c2cf11SZain Jaffal  group count of remarks by property.
155*0fae9a24SZain Jaffal
15631c2cf11SZain Jaffal  * ``source`` : Count will be collected per source path. Remarks with no debug location will not be counted.
15731c2cf11SZain Jaffal  * ``function`` : Count is collected per function.
15831c2cf11SZain Jaffal  * ``function-with-loc`` : Count is collected per function per source. Remarks with no debug location will not be counted.
15931c2cf11SZain Jaffal  * ``Total`` : Report a count for the provided remark file.
16031c2cf11SZain Jaffal
16131c2cf11SZain Jaffal.. option:: --args[=arguments]
162*0fae9a24SZain Jaffal
163ab97b89dSGoodDaisy  If `count-by` is set to `arg` this flag can be used to collect from specified remark arguments represented as a comma separated string.
16431c2cf11SZain Jaffal  The arguments must have a numeral value to be able to count remarks by
16531c2cf11SZain Jaffal
16631c2cf11SZain Jaffal.. option:: --rargs[=arguments]
167*0fae9a24SZain Jaffal
16831c2cf11SZain Jaffal  If `count-by` is set to `arg` this flag can be used to collect from specified remark arguments using regular expression.
16931c2cf11SZain Jaffal  The arguments must have a numeral value to be able to count remarks by
17031c2cf11SZain Jaffal
17131c2cf11SZain Jaffal.. option:: --pass-name[=<string>]
172*0fae9a24SZain Jaffal
17331c2cf11SZain Jaffal  Filter count by pass name.
17431c2cf11SZain Jaffal
17531c2cf11SZain Jaffal.. option:: --rpass-name[=<string>]
176*0fae9a24SZain Jaffal
17731c2cf11SZain Jaffal  Filter count by pass name using regular expressions.
17831c2cf11SZain Jaffal
17931c2cf11SZain Jaffal.. option:: --remark-name[=<string>]
180*0fae9a24SZain Jaffal
18131c2cf11SZain Jaffal  Filter count by remark name.
18231c2cf11SZain Jaffal
18331c2cf11SZain Jaffal.. option:: --rremark-name[=<string>]
184*0fae9a24SZain Jaffal
18531c2cf11SZain Jaffal  Filter count by remark name using regular expressions.
18631c2cf11SZain Jaffal
18731c2cf11SZain Jaffal.. option:: --filter-arg-by[=<string>]
188*0fae9a24SZain Jaffal
18931c2cf11SZain Jaffal  Filter count by argument value.
19031c2cf11SZain Jaffal
19131c2cf11SZain Jaffal.. option:: --rfilter-arg-by[=<string>]
192*0fae9a24SZain Jaffal
19331c2cf11SZain Jaffal  Filter count by argument value using regular expressions.
19431c2cf11SZain Jaffal
19531c2cf11SZain Jaffal.. option:: --remark-type=<value>
196*0fae9a24SZain Jaffal
19731c2cf11SZain Jaffal  Filter remarks by type with the following options.
198*0fae9a24SZain Jaffal
19931c2cf11SZain Jaffal  * ``unknown``
20031c2cf11SZain Jaffal  * ``passed``
20131c2cf11SZain Jaffal  * ``missed``
20231c2cf11SZain Jaffal  * ``analysis``
20331c2cf11SZain Jaffal  * ``analysis-fp-commute``
20431c2cf11SZain Jaffal  * ``analysis-aliasing``
20531c2cf11SZain Jaffal  * ``failure``
20631c2cf11SZain Jaffal
20724f320e4SZain Jaffal.. _size-diff_subcommand:
20824f320e4SZain Jaffal
20924f320e4SZain Jaffalsize-diff
21024f320e4SZain Jaffal~~~~~~~~~
21124f320e4SZain Jaffal.. program:: llvm-remarkutil size-diff
21224f320e4SZain Jaffal
21324f320e4SZain JaffalUSAGE: :program:`llvm-remarkutil` size-diff [*options*] *file_a* *file_b* **--parser** *parser*
21424f320e4SZain Jaffal
21524f320e4SZain JaffalSummary
21624f320e4SZain Jaffal^^^^^^^
21724f320e4SZain Jaffal
21824f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` diffs size `remarks <https://llvm.org/docs/Remarks.html>`_ in two remark files: ``file_a``
21924f320e4SZain Jaffaland ``file_b``.
22024f320e4SZain Jaffal
22124f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` can be used to gain insight into which
22224f320e4SZain Jaffalfunctions were impacted the most by code generation changes.
22324f320e4SZain Jaffal
22424f320e4SZain JaffalIn most common use-cases ``file_a`` and ``file_b`` will be remarks output by
22524f320e4SZain Jaffalcompiling a **fixed source** with **differing compilers** or
22624f320e4SZain Jaffal**differing optimization settings**.
22724f320e4SZain Jaffal
22824f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` handles both
22924f320e4SZain Jaffal`YAML <https://llvm.org/docs/Remarks.html#yaml-remarks>`_ and
23024f320e4SZain Jaffal`bitstream <https://llvm.org/docs/Remarks.html#llvm-bitstream-remarks>`_
23124f320e4SZain Jaffalremarks.
23224f320e4SZain Jaffal
233*0fae9a24SZain JaffalOptions
234*0fae9a24SZain Jaffal^^^^^^^
23524f320e4SZain Jaffal
23624f320e4SZain Jaffal.. option:: --parser=<yaml|bitstream>
23724f320e4SZain Jaffal
23824f320e4SZain JaffalSelect the type of input remark parser. Required.
239*0fae9a24SZain Jaffal
24024f320e4SZain Jaffal* ``yaml`` : The tool will parse YAML remarks.
24124f320e4SZain Jaffal* ``bitstream`` : The tool will parse bitstream remarks.
24224f320e4SZain Jaffal
24324f320e4SZain Jaffal.. option:: --report-style=<human|json>
24424f320e4SZain Jaffal
24524f320e4SZain Jaffal  Output style.
246*0fae9a24SZain Jaffal
24724f320e4SZain Jaffal  * ``human`` : Human-readable textual report. Default option.
24824f320e4SZain Jaffal  * ``json`` : JSON report.
24924f320e4SZain Jaffal
25024f320e4SZain Jaffal.. option:: --pretty
25124f320e4SZain Jaffal
25224f320e4SZain Jaffal  Pretty-print JSON output. Optional.
25324f320e4SZain Jaffal
25424f320e4SZain Jaffal  If output is not set to JSON, this does nothing.
25524f320e4SZain Jaffal
25624f320e4SZain Jaffal.. option:: -o=<file>
25724f320e4SZain Jaffal
25824f320e4SZain Jaffal  Output file for the report. Outputs to stdout by default.
25924f320e4SZain Jaffal
260*0fae9a24SZain JaffalHuman-Readable Output
261*0fae9a24SZain Jaffal^^^^^^^^^^^^^^^^^^^^^
26224f320e4SZain Jaffal
26324f320e4SZain JaffalThe human-readable format for :program:`llvm-remarkutil size-diff` is composed of
26424f320e4SZain Jaffaltwo sections:
26524f320e4SZain Jaffal
26624f320e4SZain Jaffal* Per-function changes.
26724f320e4SZain Jaffal* A high-level summary of all changes.
26824f320e4SZain Jaffal
26924f320e4SZain JaffalChanged Function Section
270*0fae9a24SZain Jaffal^^^^^^^^^^^^^^^^^^^^^^^^
27124f320e4SZain Jaffal
27224f320e4SZain JaffalSuppose you are comparing two remark files OLD and NEW.
27324f320e4SZain Jaffal
27424f320e4SZain JaffalFor each function with a **changed instruction count** in OLD and NEW,
27524f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` will emit a line like below:
27624f320e4SZain Jaffal
27724f320e4SZain Jaffal::
27824f320e4SZain Jaffal
27924f320e4SZain Jaffal  (++|--|==) (>|<) function_name, N instrs, M stack B
28024f320e4SZain Jaffal
28124f320e4SZain JaffalA breakdown of the format is below:
28224f320e4SZain Jaffal
28324f320e4SZain Jaffal``(++|--|==)``
28424f320e4SZain Jaffal  Which of OLD and NEW the ``function_name`` is present in.
28524f320e4SZain Jaffal
28624f320e4SZain Jaffal  * ``++``: Only in NEW. ("Added")
28724f320e4SZain Jaffal  * ``--``: Only in OLD. ("Removed")
28824f320e4SZain Jaffal  * ``==``: In both.
28924f320e4SZain Jaffal
29024f320e4SZain Jaffal``(>|<)``
29124f320e4SZain Jaffal  Denotes if ``function_name`` has more instructions or fewer instructions in
29224f320e4SZain Jaffal  the second file.
29324f320e4SZain Jaffal
29424f320e4SZain Jaffal  *  ``>``: More instructions in second file than first file.
29524f320e4SZain Jaffal  *  ``<``: Fewer instructions in second file than in first file.
29624f320e4SZain Jaffal
29724f320e4SZain Jaffal``function_name``
29824f320e4SZain Jaffal  The name of the changed function.
29924f320e4SZain Jaffal
30024f320e4SZain Jaffal``N instrs``
30124f320e4SZain Jaffal  Second file instruction count - first file instruction count.
30224f320e4SZain Jaffal
30324f320e4SZain Jaffal``M stack B``
30424f320e4SZain Jaffal  Second file stack byte count - first file stack byte count.
30524f320e4SZain Jaffal
30624f320e4SZain JaffalSummary Section
307*0fae9a24SZain Jaffal^^^^^^^^^^^^^^^
30824f320e4SZain Jaffal
30924f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` will output a high-level summary after
31024f320e4SZain Jaffalprinting all changed functions.
31124f320e4SZain Jaffal
31224f320e4SZain Jaffal::
31324f320e4SZain Jaffal
31424f320e4SZain Jaffal  instruction count: N (inst_pct_change%)
31524f320e4SZain Jaffal  stack byte usage: M (sb_pct_change%)
31624f320e4SZain Jaffal
31724f320e4SZain Jaffal``N``
31824f320e4SZain Jaffal  Sum of all instruction count changes between the second and first file.
31924f320e4SZain Jaffal
32024f320e4SZain Jaffal``inst_pct_change%``
32124f320e4SZain Jaffal  Percent increase or decrease in instruction count between the second and first
32224f320e4SZain Jaffal  file.
32324f320e4SZain Jaffal
32424f320e4SZain Jaffal``M``
32524f320e4SZain Jaffal  Sum of all stack byte count changes between the second and first file.
32624f320e4SZain Jaffal
32724f320e4SZain Jaffal``sb_pct_change%``
32824f320e4SZain Jaffal  Percent increase or decrease in stack byte usage between the second and first
32924f320e4SZain Jaffal  file.
33024f320e4SZain Jaffal
33124f320e4SZain JaffalJSON OUTPUT
332*0fae9a24SZain Jaffal^^^^^^^^^^^^
33324f320e4SZain Jaffal
33424f320e4SZain JaffalHigh-Level view
335*0fae9a24SZain Jaffal^^^^^^^^^^^^^^^
33624f320e4SZain Jaffal
33724f320e4SZain JaffalSuppose we are comparing two files, OLD and NEW.
33824f320e4SZain Jaffal
33924f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` will output JSON as follows.
34024f320e4SZain Jaffal
34124f320e4SZain Jaffal::
34224f320e4SZain Jaffal
34324f320e4SZain Jaffal  "Files": [
34424f320e4SZain Jaffal    "A": "path/to/OLD",
34524f320e4SZain Jaffal    "B": "path/to/NEW"
34624f320e4SZain Jaffal  ]
34724f320e4SZain Jaffal
34824f320e4SZain Jaffal  "InBoth": [
34924f320e4SZain Jaffal    ...
35024f320e4SZain Jaffal  ],
35124f320e4SZain Jaffal
35224f320e4SZain Jaffal  "OnlyInA": [
35324f320e4SZain Jaffal    ...
35424f320e4SZain Jaffal  ],
35524f320e4SZain Jaffal
35624f320e4SZain Jaffal  "OnlyInB": [
35724f320e4SZain Jaffal    ...
35824f320e4SZain Jaffal  ]
35924f320e4SZain Jaffal
36024f320e4SZain Jaffal
36124f320e4SZain Jaffal``Files``
36224f320e4SZain Jaffal  Original paths to remark files.
36324f320e4SZain Jaffal
36424f320e4SZain Jaffal  * ``A``: Path to the first file.
36524f320e4SZain Jaffal  * ``B``: Path to the second file.
36624f320e4SZain Jaffal
36724f320e4SZain Jaffal``InBoth``
36824f320e4SZain Jaffal  Functions present in both files.
36924f320e4SZain Jaffal
37024f320e4SZain Jaffal``OnlyInA``
37124f320e4SZain Jaffal  Functions only present in the first file.
37224f320e4SZain Jaffal
37324f320e4SZain Jaffal``OnlyInB``
37424f320e4SZain Jaffal  Functions only present in the second file.
37524f320e4SZain Jaffal
37624f320e4SZain JaffalFunction JSON
377*0fae9a24SZain Jaffal^^^^^^^^^^^^^
37824f320e4SZain Jaffal
37924f320e4SZain JaffalThe ``InBoth``, ``OnlyInA``, and ``OnlyInB`` sections contain size information
38024f320e4SZain Jaffalfor each function in the input remark files.
38124f320e4SZain Jaffal
38224f320e4SZain Jaffal::
38324f320e4SZain Jaffal
38424f320e4SZain Jaffal  {
38524f320e4SZain Jaffal    "FunctionName" : "function_name"
38624f320e4SZain Jaffal    "InstCount": [
38724f320e4SZain Jaffal        INST_COUNT_A,
38824f320e4SZain Jaffal        INST_COUNT_B
38924f320e4SZain Jaffal      ],
39024f320e4SZain Jaffal    "StackSize": [
39124f320e4SZain Jaffal        STACK_BYTES_A,
39224f320e4SZain Jaffal        STACK_BYTES_B
39324f320e4SZain Jaffal      ],
39424f320e4SZain Jaffal  }
39524f320e4SZain Jaffal
39624f320e4SZain Jaffal``FunctionName``
39724f320e4SZain Jaffal  Name of the function.
39824f320e4SZain Jaffal
39924f320e4SZain Jaffal``InstCount``
40024f320e4SZain Jaffal  Instruction counts for the function.
40124f320e4SZain Jaffal
40224f320e4SZain Jaffal  * ``INST_COUNT_A``: Instruction count in OLD.
40324f320e4SZain Jaffal  * ``INST_COUNT_B``: Instruction count in NEW.
40424f320e4SZain Jaffal
40524f320e4SZain Jaffal``StackSize``
40624f320e4SZain Jaffal  Stack byte counts for the function.
40724f320e4SZain Jaffal
40824f320e4SZain Jaffal  * ``STACK_BYTES_A``: Stack bytes in OLD.
40924f320e4SZain Jaffal  *  ``STACK_BYTES_B``: Stack bytes in NEW.
41024f320e4SZain Jaffal
41124f320e4SZain JaffalComputing Diffs From Function JSON
412*0fae9a24SZain Jaffal^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
41324f320e4SZain Jaffal
41424f320e4SZain JaffalFunction JSON does not contain the diffs. Tools consuming JSON output from
41524f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` are responsible for computing the diffs
41624f320e4SZain Jaffalseparately.
41724f320e4SZain Jaffal
41824f320e4SZain Jaffal**To compute the diffs:**
41924f320e4SZain Jaffal
42024f320e4SZain Jaffal* Instruction count diff: ``INST_COUNT_B - INST_COUNT_A``
42124f320e4SZain Jaffal* Stack byte count diff: ``STACK_BYTES_B - STACK_BYTES_A``
42224f320e4SZain Jaffal
42324f320e4SZain JaffalEXIT STATUS
424*0fae9a24SZain Jaffal^^^^^^^^^^^
42524f320e4SZain Jaffal
42624f320e4SZain Jaffal:program:`llvm-remarkutil size-diff` returns 0 on success, and a non-zero value
42724f320e4SZain Jaffalotherwise.
428