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