5 This documentation discusses how Polly can be used in Clang to automatically
6 optimize C/C++ code during compilation.
11 Warning: clang/LLVM/Polly need to be in sync (compiled from the same SVN
14 Make Polly available from Clang
15 ===============================
17 Polly is available through clang, opt, and bugpoint, if Polly was checked out
18 into tools/polly before compilation. No further configuration is needed.
23 Optimizing with Polly is as easy as adding -O3 -mllvm -polly to your compiler
24 flags (Polly is only available at -O3).
26 .. code-block:: console
28 clang -O3 -mllvm -polly file.c
30 Automatic OpenMP code generation
31 ================================
33 To automatically detect parallel loops and generate OpenMP code for them you
34 also need to add -mllvm -polly-parallel -lgomp to your CFLAGS.
36 .. code-block:: console
38 clang -O3 -mllvm -polly -mllvm -polly-parallel -lgomp file.c
40 Automatic Vector code generation
41 ================================
43 Automatic vector code generation can be enabled by adding -mllvm
44 -polly-vectorizer=stripmine to your CFLAGS.
46 .. code-block:: console
48 clang -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine file.c
50 Extract a preoptimized LLVM-IR file
51 ===================================
53 Often it is useful to derive from a C-file the LLVM-IR code that is actually
54 optimized by Polly. Normally the LLVM-IR is automatically generated from the C
55 code by first lowering C to LLVM-IR (clang) and by subsequently applying a set
56 of preparing transformations on the LLVM-IR. To get the LLVM-IR after the
57 preparing transformations have been applied run Polly with '-O0'.
59 .. code-block:: console
61 clang -O0 -mllvm -polly -S -emit-llvm file.c
65 Polly supports further options that are mainly useful for the development or the
66 analysis of Polly. The relevant options can be added to clang by appending
67 -mllvm -option-name to the CFLAGS or the clang command line.
69 Limit Polly to a single function
70 --------------------------------
72 To limit the execution of Polly to a single function, use the option
73 -polly-only-func=functionname.
75 Disable LLVM-IR generation
76 --------------------------
78 Polly normally regenerates LLVM-IR from the Polyhedral representation. To only
79 see the effects of the preparing transformation, but to disable Polly code
80 generation add the option polly-no-codegen.
82 Graphical view of the SCoPs
83 ---------------------------
84 Polly can use graphviz to show the SCoPs it detects in a program. The relevant
85 options are -polly-show, -polly-show-only, -polly-dot and -polly-dot-only. The
86 'show' options automatically run dotty or another graphviz viewer to show the
87 scops graphically. The 'dot' options store for each function a dot file that
88 highlights the detected SCoPs. If 'only' is appended at the end of the option,
89 the basic blocks are shown without the statements the contain.
91 Change/Disable the Optimizer
92 ----------------------------
94 Polly uses by default the isl scheduling optimizer. The isl optimizer optimizes
95 for data-locality and parallelism using the Pluto algorithm.
96 To disable the optimizer entirely use the option -polly-optimizer=none.
98 Disable tiling in the optimizer
99 -------------------------------
101 By default both optimizers perform tiling, if possible. In case this is not
102 wanted the option -polly-tiling=false can be used to disable it. (This option
103 disables tiling for both optimizers).
108 The flags -polly-import and -polly-export allow the export and reimport of the
109 polyhedral representation. By exporting, modifying and reimporting the
110 polyhedral representation externally calculated transformations can be
111 applied. This enables external optimizers or the manual optimization of
114 Viewing Polly Diagnostics with opt-viewer
115 -----------------------------------------
117 The flag -fsave-optimization-record will generate .opt.yaml files when compiling
118 your program. These yaml files contain information about each emitted remark.
119 Ensure that you have Python 2.7 with PyYaml and Pygments Python Packages.
122 .. code-block:: console
124 llvm/tools/opt-viewer/opt-viewer.py -source-dir /path/to/program/src/ \
125 /path/to/program/src/foo.opt.yaml \
126 /path/to/program/src/bar.opt.yaml \
129 Include all yaml files (use \*.opt.yaml when specifying which yaml files to view)
130 to view all diagnostics from your program in opt-viewer. Compile with `PGO
131 <https://clang.llvm.org/docs/UsersManual.html#profiling-with-instrumentation>`_ to view
132 Hotness information in opt-viewer. Resulting html files can be viewed in an internet browser.