summaryrefslogtreecommitdiffstats
path: root/llvm/docs/Passes.rst
Commit message (Collapse)AuthorAgeFilesLines
* [Unroll/UnrollAndJam/Vectorizer/Distribute] Add followup loop attributes.Michael Kruse2018-12-121-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When multiple loop transformation are defined in a loop's metadata, their order of execution is defined by the order of their respective passes in the pass pipeline. For instance, e.g. #pragma clang loop unroll_and_jam(enable) #pragma clang loop distribute(enable) is the same as #pragma clang loop distribute(enable) #pragma clang loop unroll_and_jam(enable) and will try to loop-distribute before Unroll-And-Jam because the LoopDistribute pass is scheduled after UnrollAndJam pass. UnrollAndJamPass only supports one inner loop, i.e. it will necessarily fail after loop distribution. It is not possible to specify another execution order. Also,t the order of passes in the pipeline is subject to change between versions of LLVM, optimization options and which pass manager is used. This patch adds 'followup' attributes to various loop transformation passes. These attributes define which attributes the resulting loop of a transformation should have. For instance, !0 = !{!0, !1, !2} !1 = !{!"llvm.loop.unroll_and_jam.enable"} !2 = !{!"llvm.loop.unroll_and_jam.followup_inner", !3} !3 = !{!"llvm.loop.distribute.enable"} defines a loop ID (!0) to be unrolled-and-jammed (!1) and then the attribute !3 to be added to the jammed inner loop, which contains the instruction to distribute the inner loop. Currently, in both pass managers, pass execution is in a fixed order and UnrollAndJamPass will not execute again after LoopDistribute. We hope to fix this in the future by allowing pass managers to run passes until a fixpoint is reached, use Polly to perform these transformations, or add a loop transformation pass which takes the order issue into account. For mandatory/forced transformations (e.g. by having been declared by #pragma omp simd), the user must be notified when a transformation could not be performed. It is not possible that the responsible pass emits such a warning because the transformation might be 'hidden' in a followup attribute when it is executed, or it is not present in the pipeline at all. For this reason, this patche introduces a WarnMissedTransformations pass, to warn about orphaned transformations. Since this changes the user-visible diagnostic message when a transformation is applied, two test cases in the clang repository need to be updated. To ensure that no other transformation is executed before the intended one, the attribute `llvm.loop.disable_nonforced` can be added which should disable transformation heuristics before the intended transformation is applied. E.g. it would be surprising if a loop is distributed before a #pragma unroll_and_jam is applied. With more supported code transformations (loop fusion, interchange, stripmining, offloading, etc.), transformations can be used as building blocks for more complex transformations (e.g. stripmining+stripmining+interchange -> tiling). Reviewed By: hfinkel, dmgreen Differential Revision: https://reviews.llvm.org/D49281 Differential Revision: https://reviews.llvm.org/D55288 llvm-svn: 348944
* [stack-safety] Analysis documentationVitaly Buka2018-11-261-0/+9
| | | | | | | | | | | | | | | | Summary: Basic documentation of the Stack Safety Analysis. It will be improved during review and upstream of an implementation. Reviewers: kcc, eugenis, vlad.tsyrklevich, glider Reviewed By: vlad.tsyrklevich Subscribers: arphaman, llvm-commits Differential Revision: https://reviews.llvm.org/D53336 llvm-svn: 347612
* [UnJ] Document unroll and jam pass and loop metadataDavid Green2018-07-191-0/+23
| | | | | | | | | Add some quick words for unroll and jam to the list of passes and add unroll_and_jam metadata to the language ref. Differential Revision: https://reviews.llvm.org/D49349 llvm-svn: 337448
* Another try to commit 323321 (aggressive instruction combine).Amjad Aboud2018-01-251-0/+15
| | | | llvm-svn: 323416
* Reverted 323321.Amjad Aboud2018-01-241-15/+0
| | | | llvm-svn: 323326
* [InstCombine] Introducing Aggressive Instruction Combine pass ↵Amjad Aboud2018-01-241-0/+15
| | | | | | | | | | | | | | | | | | (-aggressive-instcombine). Combine expression patterns to form expressions with fewer, simple instructions. This pass does not modify the CFG. For example, this pass reduce width of expressions post-dominated by TruncInst into smaller width when applicable. It differs from instcombine pass in that it contains pattern optimization that requires higher complexity than the O(1), thus, it should run fewer times than instcombine pass. Differential Revision: https://reviews.llvm.org/D38313 llvm-svn: 323321
* Remove the ScalarReplAggregates passDavid Majnemer2016-06-151-7/+1
| | | | | | | | | | Nearly all the changes to this pass have been done while maintaining and updating other parts of LLVM. LLVM has had another pass, SROA, which has superseded ScalarReplAggregates for quite some time. Differential Revision: http://reviews.llvm.org/D21316 llvm-svn: 272737
* Remove stale documentation on -no-aaSanjoy Das2016-04-291-8/+0
| | | | | | The pass itself was removed in rL247167. llvm-svn: 267978
* Remove the preverify pass from the documentation now that it has been removedYunzhong Gao2015-01-301-7/+0
| | | | | | since r199487. llvm-svn: 227608
* Added documentation for MergeFunctions pass:Stepan Dyatkovskiy2014-12-101-9/+16
| | | | | | Pass looks for equivalent functions that are mergable and folds them. llvm-svn: 223931
* docs: Remove documentation for legacy PGO optionsJustin Bogner2014-06-041-41/+0
| | | | | | | | Late last year r191835 removed a largely unmaintained legacy PGO infrastructure, but some of the docs were missed. Since these docs are for things that don't actually exist anymore, they should be removed. llvm-svn: 210165
* Remove -simplify-libcalls pass form Passes documentationReid Kleckner2014-04-181-9/+10
| | | | | | | | | | | | This pass was removed in r184459. Also added note that the InstCombine pass does library call simplification. Patch slightly modified from one by Daniel Liew <daniel.liew@imperial.ac.uk>! llvm-svn: 206650
* Remove documentation for a deleted pass.Eric Christopher2014-04-121-9/+0
| | | | llvm-svn: 206097
* Remove LowerInvoke's obsolete "-enable-correct-eh-support" optionMark Seaborn2014-03-201-25/+6
| | | | | | | | | | | | | | | This option caused LowerInvoke to generate code using SJLJ-based exception handling, but there is no code left that interprets the jmp_buf stack that the resulting code maintained (llvm.sjljeh.jblist). This option has been obsolete for a while, and replaced by SjLjEHPrepare. This leaves the default behaviour of LowerInvoke, which is to convert invokes to calls. Differential Revision: http://llvm-reviews.chandlerc.com/D3136 llvm-svn: 204388
* Typos. (Test commit.)Paul Robinson2013-11-141-1/+1
| | | | llvm-svn: 194720
* docs/Passes: fix some typosDmitri Gribenko2013-05-181-4/+4
| | | | | | Patch by Yacine Belkadi. llvm-svn: 182197
* Missing wordEli Bendersky2013-04-041-2/+2
| | | | llvm-svn: 178774
* [docs] Remove explicit authorship.Sean Silva2013-03-111-3/+0
| | | | | | | In the spirit of r172109. Version control keeps a far more detailed record of authorship anyways. llvm-svn: 176807
* Documentation: convert Passes.html to reST.Dmitri Gribenko2012-12-111-0/+1264
Since now we have an autogenerated TOC, a manually written table of all passes was removed. Patch by Anthony Mykhailenko with small fixes by me. llvm-svn: 169867
OpenPOWER on IntegriCloud