xref: /llvm-project/llvm/docs/CommandGuide/llvm-opt-report.rst (revision 40847375d8de63d30b791a1a29d25e29d83a5497)
14c443eb8SMasahiro ARAKAWAllvm-opt-report - generate optimization report from YAML
24c443eb8SMasahiro ARAKAWA========================================================
34c443eb8SMasahiro ARAKAWA
44c443eb8SMasahiro ARAKAWA.. program:: llvm-opt-report
54c443eb8SMasahiro ARAKAWA
64c443eb8SMasahiro ARAKAWASYNOPSIS
74c443eb8SMasahiro ARAKAWA--------
84c443eb8SMasahiro ARAKAWA
94c443eb8SMasahiro ARAKAWA:program:`llvm-opt-report` [*options*] [input]
104c443eb8SMasahiro ARAKAWA
114c443eb8SMasahiro ARAKAWADESCRIPTION
124c443eb8SMasahiro ARAKAWA-----------
134c443eb8SMasahiro ARAKAWA
144c443eb8SMasahiro ARAKAWA:program:`llvm-opt-report` is a tool to generate an optimization report from YAML optimization record files.
154c443eb8SMasahiro ARAKAWA
164c443eb8SMasahiro ARAKAWAYou need to create an input YAML optimization record file before running :program:`llvm-opt-report`.
174c443eb8SMasahiro ARAKAWA
18*40847375SaabhinavgIt provides information on the execution time, memory usage, and other details of each optimization pass.
19*40847375Saabhinavg
20*40847375Saabhinavg
214c443eb8SMasahiro ARAKAWA.. code-block:: console
224c443eb8SMasahiro ARAKAWA
234c443eb8SMasahiro ARAKAWA $ clang -c foo.c -o foo.o -O3 -fsave-optimization-record
244c443eb8SMasahiro ARAKAWA
254c443eb8SMasahiro ARAKAWAThen, you create a report using the :program:`llvm-opt-report` command with the YAML optimization record file :file:`foo.opt.yaml` as input.
264c443eb8SMasahiro ARAKAWA
274c443eb8SMasahiro ARAKAWA.. code-block:: console
284c443eb8SMasahiro ARAKAWA
294c443eb8SMasahiro ARAKAWA $ llvm-opt-report foo.opt.yaml -o foo.lst
304c443eb8SMasahiro ARAKAWA
314c443eb8SMasahiro ARAKAWAfoo.lst is the generated optimization report.
324c443eb8SMasahiro ARAKAWA
334c443eb8SMasahiro ARAKAWA.. code-block::
344c443eb8SMasahiro ARAKAWA
354c443eb8SMasahiro ARAKAWA < foo.c
364c443eb8SMasahiro ARAKAWA  1          | void bar();
374c443eb8SMasahiro ARAKAWA  2          | void foo() { bar(); }
384c443eb8SMasahiro ARAKAWA  3          |
394c443eb8SMasahiro ARAKAWA  4          | void Test(int *res, int *c, int *d, int *p, int n) {
404c443eb8SMasahiro ARAKAWA  5          |   int i;
414c443eb8SMasahiro ARAKAWA  6          |
424c443eb8SMasahiro ARAKAWA  7          | #pragma clang loop vectorize(assume_safety)
434c443eb8SMasahiro ARAKAWA  8     V4,1 |   for (i = 0; i < 1600; i++) {
444c443eb8SMasahiro ARAKAWA  9          |     res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
454c443eb8SMasahiro ARAKAWA 10          |   }
464c443eb8SMasahiro ARAKAWA 11          |
474c443eb8SMasahiro ARAKAWA 12  U16     |   for (i = 0; i < 16; i++) {
484c443eb8SMasahiro ARAKAWA 13          |     res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
494c443eb8SMasahiro ARAKAWA 14          |   }
504c443eb8SMasahiro ARAKAWA 15          |
514c443eb8SMasahiro ARAKAWA 16 I        |   foo();
524c443eb8SMasahiro ARAKAWA 17          |
534c443eb8SMasahiro ARAKAWA 18          |   foo(); bar(); foo();
544c443eb8SMasahiro ARAKAWA    I        |   ^
554c443eb8SMasahiro ARAKAWA    I        |                 ^
564c443eb8SMasahiro ARAKAWA 19          | }
574c443eb8SMasahiro ARAKAWA 20          |
584c443eb8SMasahiro ARAKAWA
594c443eb8SMasahiro ARAKAWASymbols printed on the left side of the program indicate what kind of optimization was performed.
604c443eb8SMasahiro ARAKAWAThe meanings of the symbols are as follows:
614c443eb8SMasahiro ARAKAWA
624c443eb8SMasahiro ARAKAWA- I: The function is inlined.
634c443eb8SMasahiro ARAKAWA- U: The loop is unrolled. The following number indicates the unroll factor.
644c443eb8SMasahiro ARAKAWA- V: The loop is vectorized. The following numbers indicate the vector length and the interleave factor.
654c443eb8SMasahiro ARAKAWA
66*40847375Saabhinavg.. note::
67*40847375Saabhinavg
68*40847375Saabhinavg    If a specific line of code is output twice, it means that the same optimization pass was applied to that
69*40847375Saabhinavg    line of code twice, and the pass was able to further optimize the code on the second iteration.
70*40847375Saabhinavg
71*40847375Saabhinavg
724c443eb8SMasahiro ARAKAWAOPTIONS
734c443eb8SMasahiro ARAKAWA-------
744c443eb8SMasahiro ARAKAWA
754c443eb8SMasahiro ARAKAWAIf ``input`` is "``-``" or omitted, :program:`llvm-opt-report` reads from standard
764c443eb8SMasahiro ARAKAWAinput. Otherwise, it will read from the specified filename.
774c443eb8SMasahiro ARAKAWA
784c443eb8SMasahiro ARAKAWAIf the :option:`-o` option is omitted, then :program:`llvm-opt-report` will send its output
794c443eb8SMasahiro ARAKAWAto standard output.  If the :option:`-o` option specifies "``-``", then the output will also
804c443eb8SMasahiro ARAKAWAbe sent to standard output.
814c443eb8SMasahiro ARAKAWA
824c443eb8SMasahiro ARAKAWA
834c443eb8SMasahiro ARAKAWA.. option:: --help
844c443eb8SMasahiro ARAKAWA
854c443eb8SMasahiro ARAKAWA Display available options.
864c443eb8SMasahiro ARAKAWA
874c443eb8SMasahiro ARAKAWA.. option:: --version
884c443eb8SMasahiro ARAKAWA
894c443eb8SMasahiro ARAKAWA Display the version of this program.
904c443eb8SMasahiro ARAKAWA
914c443eb8SMasahiro ARAKAWA.. option:: --format=<string>
924c443eb8SMasahiro ARAKAWA
934c443eb8SMasahiro ARAKAWA The format of the optimization record file.
944c443eb8SMasahiro ARAKAWA The Argument is one of the following:
954c443eb8SMasahiro ARAKAWA
964c443eb8SMasahiro ARAKAWA - yaml
974c443eb8SMasahiro ARAKAWA - yaml-strtab
984c443eb8SMasahiro ARAKAWA - bitstream
994c443eb8SMasahiro ARAKAWA
1004c443eb8SMasahiro ARAKAWA.. option:: --no-demangle
1014c443eb8SMasahiro ARAKAWA
1024c443eb8SMasahiro ARAKAWA Do not demangle function names.
1034c443eb8SMasahiro ARAKAWA
1044c443eb8SMasahiro ARAKAWA.. option:: -o=<string>
1054c443eb8SMasahiro ARAKAWA
1064c443eb8SMasahiro ARAKAWA Output file.
1074c443eb8SMasahiro ARAKAWA
1084c443eb8SMasahiro ARAKAWA.. option:: -r=<string>
1094c443eb8SMasahiro ARAKAWA
1104c443eb8SMasahiro ARAKAWA Root for relative input paths.
1114c443eb8SMasahiro ARAKAWA
1124c443eb8SMasahiro ARAKAWA.. option:: -s
1134c443eb8SMasahiro ARAKAWA
1144c443eb8SMasahiro ARAKAWA Do not include vectorization factors, etc.
1154c443eb8SMasahiro ARAKAWA
1164c443eb8SMasahiro ARAKAWAEXIT STATUS
1174c443eb8SMasahiro ARAKAWA-----------
1184c443eb8SMasahiro ARAKAWA
1194c443eb8SMasahiro ARAKAWA:program:`llvm-opt-report` returns 0 on success. Otherwise, an error message is printed
1204c443eb8SMasahiro ARAKAWAto standard error, and the tool returns 1.
1214c443eb8SMasahiro ARAKAWA
122