|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
7225213c |
| 23-Jul-2022 |
Fangrui Song <[email protected]> |
[LegacyPM] Remove {,PostInline}EntryExitInstrumenterPass
Following recent changes removing non-core features of the legacy PM/optimization pipeline.
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4 |
|
| #
fb4113ef |
| 29-Apr-2022 |
Florian Hahn <[email protected]> |
[Passes] Remove legacy LoopUnswitch pass.
The legacy LoopUnswitch pass is only used in the legacy pass manager pipeline, which is deprecated.
The NewPM replacement is SimpleLoopUnswitch and I think
[Passes] Remove legacy LoopUnswitch pass.
The legacy LoopUnswitch pass is only used in the legacy pass manager pipeline, which is deprecated.
The NewPM replacement is SimpleLoopUnswitch and I think it is time to remove the legacy LoopUnswitch code.
Fixes #31000.
Reviewed By: aeubanks, Meinersbur, asbirlea
Differential Revision: https://reviews.llvm.org/D124376
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3 |
|
| #
c3101432 |
| 02-Mar-2022 |
Xiang1 Zhang <[email protected]> |
TLS loads opimization (hoist)
Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D120000
|
| #
59630917 |
| 02-Mar-2022 |
serge-sans-paille <[email protected]> |
Cleanup includes: Transform/Scalar
Estimated impact on preprocessor output line: before: 1062981579 after: 1062494547
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cl
Cleanup includes: Transform/Scalar
Estimated impact on preprocessor output line: before: 1062981579 after: 1062494547
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup Differential Revision: https://reviews.llvm.org/D120817
show more ...
|
| #
65588a07 |
| 02-Mar-2022 |
Xiang1 Zhang <[email protected]> |
Revert "TLS loads opimization (hoist)" Revert for more reviews
This reverts commit 30e612ebdfb0f243eb63d93487790a53c26ae873.
|
|
Revision tags: llvmorg-14.0.0-rc2 |
|
| #
30e612eb |
| 25-Feb-2022 |
Xiang1 Zhang <[email protected]> |
TLS loads opimization (hoist) Reviewed By: Wang Pheobe, Topper Craig
Differential Revision: https://reviews.llvm.org/D120000
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
eb87f668 |
| 08-Dec-2021 |
Fraser Cormack <[email protected]> |
[NewPM] Port FlattenCFGPass to NPM
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D115361
|
|
Revision tags: llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init |
|
| #
02077da7 |
| 27-Jul-2021 |
Alexey Zhikhartsev <[email protected]> |
Add jump-threading optimization for deterministic finite automata
The current JumpThreading pass does not jump thread loops since it can result in irreducible control flow that harms other optimizat
Add jump-threading optimization for deterministic finite automata
The current JumpThreading pass does not jump thread loops since it can result in irreducible control flow that harms other optimizations. This prevents switch statements inside a loop from being optimized to use unconditional branches.
This code pattern occurs in the core_state_transition function of Coremark. The state machine can be implemented manually with goto statements resulting in a large runtime improvement, and this transform makes the switch implementation match the goto version in performance.
This patch specifically targets switch statements inside a loop that have the opportunity to be threaded. Once it identifies an opportunity, it creates new paths that branch directly to the correct code block. For example, the left CFG could be transformed to the right CFG:
``` sw.bb sw.bb / | \ / | \ case1 case2 case3 case1 case2 case3 \ | / / | \ latch.bb latch.2 latch.3 latch.1 br sw.bb / | \ sw.bb.2 sw.bb.3 sw.bb.1 br case2 br case3 br case1 ```
Co-author: Justin Kreiner @jkreiner Co-author: Ehsan Amiri @amehsan
Reviewed By: SjoerdMeijer
Differential Revision: https://reviews.llvm.org/D99205
show more ...
|
|
Revision tags: llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2 |
|
| #
29356e32 |
| 07-Dec-2020 |
Anna Thomas <[email protected]> |
[ScalarizeMaskedMemIntrin] Add new PM support
This patch adds new PM support for the pass and the pass can be now used during middle-end transforms. The old pass is remamed to ScalarizeMaskedMemIntr
[ScalarizeMaskedMemIntrin] Add new PM support
This patch adds new PM support for the pass and the pass can be now used during middle-end transforms. The old pass is remamed to ScalarizeMaskedMemIntrinLegacyPass.
Reviewed-By: skatkov, aeubanks Differential Revision: https://reviews.llvm.org/D92743
show more ...
|
| #
09f2f960 |
| 02-Dec-2020 |
Anna Thomas <[email protected]> |
[ScalarizeMaskedMemIntrinsic] Move from CodeGen into Transforms
ScalarizeMaskedMemIntrinsic is currently a codeGen level pass. The pass is actually operating on IR level and does not use any code ge
[ScalarizeMaskedMemIntrinsic] Move from CodeGen into Transforms
ScalarizeMaskedMemIntrinsic is currently a codeGen level pass. The pass is actually operating on IR level and does not use any code gen specific passes. It is useful to move it into transforms directory so that it can be more widely used as a mid-level transform as well (apart from usage in codegen pipeline). In particular, we have a usecase downstream where we would like to use this pass in our mid-level pipeline which operates on IR level.
The next change will be to add support for new PM.
Reviewers: craig.topper, apilipenko, skatkov Reviewed-By: skatkov Differential Revision: https://reviews.llvm.org/D92407
show more ...
|
|
Revision tags: llvmorg-11.0.1-rc1 |
|
| #
8bb63479 |
| 13-Nov-2020 |
Florian Hahn <[email protected]> |
Add !annotation metadata and remarks pass.
This patch adds a new !annotation metadata kind which can be used to attach annotation strings to instructions.
It also adds a new pass that emits summary
Add !annotation metadata and remarks pass.
This patch adds a new !annotation metadata kind which can be used to attach annotation strings to instructions.
It also adds a new pass that emits summary remarks per function with the counts for each annotation kind.
The intended uses cases for this new metadata is annotating 'interesting' instructions and the remarks should provide additional insight into transformations applied to a program.
To motivate this, consider these specific questions we would like to get answered:
* How many stores added for automatic variable initialization remain after optimizations? Where are they? * How many runtime checks inserted by a frontend could be eliminated? Where are the ones that did not get eliminated?
Discussed on llvm-dev as part of 'RFC: Combining Annotation Metadata and Remarks' (http://lists.llvm.org/pipermail/llvm-dev/2020-November/146393.html)
Reviewed By: thegameg, jdoerfert
Differential Revision: https://reviews.llvm.org/D91188
show more ...
|
| #
1cbf8e89 |
| 09-Nov-2020 |
Arthur Eubanks <[email protected]> |
[NewPM] Port -separate-const-offset-from-gep
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D91095
|
| #
5e8ecff0 |
| 05-Nov-2020 |
Pedro Tammela <[email protected]> |
[Reg2Mem] add support for the new pass manager
This patch refactors the pass to accomodate the new pass manager boilerplate.
Differential Revision: https://reviews.llvm.org/D91005
|
| #
0efbfa38 |
| 27-Oct-2020 |
TaWeiTu <[email protected]> |
[NPM] Port -slsr to NPM
`-separate-const-offset-from-gep` has not yet be ported, so some tests are not updated.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D90149
|
| #
65a36bbc |
| 24-Oct-2020 |
TaWeiTu <[email protected]> |
[NPM] Port -loop-versioning-licm to NPM
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D89371
|
| #
baffd052 |
| 08-Oct-2020 |
Arthur Eubanks <[email protected]> |
[StructurizeCFG][NewPM] Port -structurizecfg to NPM
This doesn't support -structurizecfg-skip-uniform-regions since that would require porting LegacyDivergenceAnalysis.
The NPM doesn't support addi
[StructurizeCFG][NewPM] Port -structurizecfg to NPM
This doesn't support -structurizecfg-skip-uniform-regions since that would require porting LegacyDivergenceAnalysis.
The NPM doesn't support adding a non-analysis pass as a dependency of another, so I had to add -lowerswitch to some tests or pin them to the legacy PM.
This is the only RegionPass in tree, so I simply copied the logic for finding all Regions from the legacy PM's RGManager into StructurizeCFG::run().
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D89026
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
| #
9c21c6c9 |
| 17-Sep-2020 |
Arthur Eubanks <[email protected]> |
[LoopInterchange][NewPM] Port -loop-interchange to NPM
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D89058
|
| #
d53b4bee |
| 30-Sep-2020 |
Sjoerd Meijer <[email protected]> |
[LoopFlatten] Add a loop-flattening pass
This is a simple pass that flattens nested loops. The intention is to optimise loop nests like this, which together access an array linearly:
for (int i
[LoopFlatten] Add a loop-flattening pass
This is a simple pass that flattens nested loops. The intention is to optimise loop nests like this, which together access an array linearly:
for (int i = 0; i < N; ++i) for (int j = 0; j < M; ++j) f(A[i*M+j]);
into one loop:
for (int i = 0; i < (N*M); ++i) f(A[i]);
It can also flatten loops where the induction variables are not used in the loop. This can help with codesize and runtime, especially on simple cpus without advanced branch prediction.
This is only worth flattening if the induction variables are only used in an expression like i*M+j. If they had any other uses, we would have to insert a div/mod to reconstruct the original values, so this wouldn't be profitable.
This partially fixes PR40581 as this pass triggers on one of the two cases. I will follow up on this to learn LoopFlatten a few more (small) tricks. Please note that LoopFlatten is not yet enabled by default.
Patch by Oliver Stannard, with minor tweaks from Dave Green and myself.
Differential Revision: https://reviews.llvm.org/D42365
show more ...
|
| #
d3f6972a |
| 19-Sep-2020 |
Arthur Eubanks <[email protected]> |
[LoopReroll][NewPM] Port -loop-reroll to NPM
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D87957
|
| #
f4f7df03 |
| 18-Sep-2020 |
Arthur Eubanks <[email protected]> |
[DIE] Remove DeadInstEliminationPass
This pass is like DeadCodeEliminationPass, but only does one pass through a function instead of iterating on users of eliminated instructions.
DeadCodeEliminati
[DIE] Remove DeadInstEliminationPass
This pass is like DeadCodeEliminationPass, but only does one pass through a function instead of iterating on users of eliminated instructions.
DeadCodeEliminationPass should be used in all cases.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D87933
show more ...
|
| #
3d42d549 |
| 15-Sep-2020 |
Florian Hahn <[email protected]> |
[ConstraintElimination] Add constraint elimination pass.
This patch is a first draft of a new pass that adds a more flexible way to eliminate compares based on more complex constraints collected fro
[ConstraintElimination] Add constraint elimination pass.
This patch is a first draft of a new pass that adds a more flexible way to eliminate compares based on more complex constraints collected from dominating conditions.
In particular, it aims at simplifying conditions of the forms below using a forward propagation approach, rather than instcomine-style ad-hoc backwards walking of def-use chains.
if (x < y) if (y < z) if (x < z) <- simplify
or
if (x + 2 < y) if (x + 1 < y) <- simplify assuming no wraps
The general approach is to collect conditions and blocks, sort them by dominance and then iterate over the sorted list. Conditions are turned into a linear inequality and add it to a system containing the linear inequalities that hold on entry to the block. For blocks, we check each compare against the system and see if it is implied by the constraints in the system.
We also keep a stack of processed conditions and remove conditions from the stack and the constraint system once they go out-of-scope (= do not dominate the current block any longer).
Currently there still are the least the following areas for improvements
* Currently large unsigned constants cannot be added to the system (coefficients must be represented as integers) * The way constraints are managed currently is not very optimized.
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D84547
show more ...
|
| #
352cf57c |
| 02-Sep-2020 |
Arthur Eubanks <[email protected]> |
[Bindings] Move LLVMAddInstructionSimplifyPass to Scalar.cpp
Should not be with the pass, but alongside all the other C bindings.
Reviewed By: sroland
Differential Revision: https://reviews.llvm.o
[Bindings] Move LLVMAddInstructionSimplifyPass to Scalar.cpp
Should not be with the pass, but alongside all the other C bindings.
Reviewed By: sroland
Differential Revision: https://reviews.llvm.org/D87041
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc2 |
|
| #
486ed885 |
| 03-Aug-2020 |
Arthur Eubanks <[email protected]> |
[ConstProp] Remove ConstantPropagation
As discussed in http://lists.llvm.org/pipermail/llvm-dev/2020-July/143801.html.
Currently no users outside of unit tests.
Replace all instances in tests of -
[ConstProp] Remove ConstantPropagation
As discussed in http://lists.llvm.org/pipermail/llvm-dev/2020-July/143801.html.
Currently no users outside of unit tests.
Replace all instances in tests of -constprop with -instsimplify. Notable changes in tests: * vscale.ll - @llvm.sadd.sat.nxv16i8 is evaluated by instsimplify, use a fake intrinsic instead * InsertElement.ll - insertelement undef is removed by instsimplify in @insertelement_undef llvm/test/Transforms/ConstProp moved to llvm/test/Transforms/InstSimplify/ConstProp
Reviewed By: lattner, nikic
Differential Revision: https://reviews.llvm.org/D85159
show more ...
|
| #
7c19c89d |
| 01-Aug-2020 |
Arthur Eubanks <[email protected]> |
[NewPM][LoopVersioning] Port LoopVersioning to NPM
Reviewed By: ychen, fhahn
Differential Revision: https://reviews.llvm.org/D85063
|
|
Revision tags: llvmorg-11.0.0-rc1 |
|
| #
dc1087d4 |
| 20-Jul-2020 |
Florian Hahn <[email protected]> |
[Matrix] Add minimal lowering pass that only requires TTI.
This patch adds a new variant of the matrix lowering pass that only does a minimal lowering and only depends on TTI. The main purpose of th
[Matrix] Add minimal lowering pass that only requires TTI.
This patch adds a new variant of the matrix lowering pass that only does a minimal lowering and only depends on TTI. The main purpose of this pass is to have a pass with minimal dependencies to run as part of the backend pipeline.
At the moment, the only difference to the regular lowering pass is that it does not support remarks. But in subsequent patches add support for tiling to the lowering pass which will require more analysis, which we do not want to run in the backend, as the lowering should happen in the middle-end in practice and running it in the backend is mostly for convenience when running llc.
Reviewers: anemet, Gerolf, efriedma, hfinkel
Reviewed By: anemet
Differential Revision: https://reviews.llvm.org/D76867
show more ...
|