diff --git a/llvm/docs/CommandGuide/index.rst b/llvm/docs/CommandGuide/index.rst --- a/llvm/docs/CommandGuide/index.rst +++ b/llvm/docs/CommandGuide/index.rst @@ -31,6 +31,7 @@ llvm-link llvm-lipo llvm-mca + llvm-opt-report llvm-otool llvm-profdata llvm-readobj diff --git a/llvm/docs/CommandGuide/llvm-opt-report.rst b/llvm/docs/CommandGuide/llvm-opt-report.rst new file mode 100644 --- /dev/null +++ b/llvm/docs/CommandGuide/llvm-opt-report.rst @@ -0,0 +1,112 @@ +llvm-opt-report - generate optimization report from YAML +======================================================== + +.. program:: llvm-opt-report + +SYNOPSIS +-------- + +:program:`llvm-opt-report` [*options*] [input] + +DESCRIPTION +----------- + +:program:`llvm-opt-report` is a tool to generate an optimization report from YAML optimization record files. + +You need to create an input YAML optimization record file before running :program:`llvm-opt-report`. + +.. code-block:: console + + $ clang -c foo.c -o foo.o -O3 -fsave-optimization-record + +Then, you create a report using the :program:`llvm-opt-report` command with the YAML optimization record file :file:`foo.opt.yaml` as input. + +.. code-block:: console + + $ llvm-opt-report foo.opt.yaml -o foo.lst + +foo.lst is the generated optimization report. + +.. code-block:: + + < foo.c + 1 | void bar(); + 2 | void foo() { bar(); } + 3 | + 4 | void Test(int *res, int *c, int *d, int *p, int n) { + 5 | int i; + 6 | + 7 | #pragma clang loop vectorize(assume_safety) + 8 V4,1 | for (i = 0; i < 1600; i++) { + 9 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; + 10 | } + 11 | + 12 U16 | for (i = 0; i < 16; i++) { + 13 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; + 14 | } + 15 | + 16 I | foo(); + 17 | + 18 | foo(); bar(); foo(); + I | ^ + I | ^ + 19 | } + 20 | + +Symbols printed on the left side of the program indicate what kind of optimization was performed. +The meanings of the symbols are as follows: + +- I: The function is inlined. +- U: The loop is unrolled. The following number indicates the unroll factor. +- V: The loop is vectorized. The following numbers indicate the vector length and the interleave factor. + +OPTIONS +------- + +If ``input`` is "``-``" or omitted, :program:`llvm-opt-report` reads from standard +input. Otherwise, it will read from the specified filename. + +If the :option:`-o` option is omitted, then :program:`llvm-opt-report` will send its output +to standard output. If the :option:`-o` option specifies "``-``", then the output will also +be sent to standard output. + + +.. option:: --help + + Display available options. + +.. option:: --version + + Display the version of this program. + +.. option:: --format= + + The format of the optimization record file. + The Argument is one of the following: + + - yaml + - yaml-strtab + - bitstream + +.. option:: --no-demangle + + Do not demangle function names. + +.. option:: -o= + + Output file. + +.. option:: -r= + + Root for relative input paths. + +.. option:: -s + + Do not include vectorization factors, etc. + +EXIT STATUS +----------- + +:program:`llvm-opt-report` returns 0 on success. Otherwise, an error message is printed +to standard error, and the tool returns 1. +