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