File: llvm-opt-report.rst

package info (click to toggle)
llvm-toolchain-16 1%3A16.0.6-15~deb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,634,820 kB
  • sloc: cpp: 6,179,261; ansic: 1,216,205; asm: 741,319; python: 196,614; objc: 75,325; f90: 49,640; lisp: 32,396; pascal: 12,286; sh: 9,394; perl: 7,442; ml: 5,494; awk: 3,523; makefile: 2,723; javascript: 1,206; xml: 886; fortran: 581; cs: 573
file content (112 lines) | stat: -rw-r--r-- 2,887 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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=<string>

 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=<string>

 Output file.

.. option:: -r=<string>

 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.