|
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 |
|
| #
bffec215 |
| 26-Jul-2022 |
Matthias Springer <[email protected]> |
[mlir][transform] Add ForeachOp to transform dialect
This op "unbatches" an op handle and executes the loop body for each payload op.
Differential Revision: https://reviews.llvm.org/D130257
|
| #
491d2701 |
| 13-Jul-2022 |
Kazu Hirata <[email protected]> |
[mlir] Use has_value instead of hasValue (NFC)
|
| #
e15b855e |
| 08-Jul-2022 |
Alex Zinenko <[email protected]> |
[mlir] Use semantically readable functions for transform op effects
A recent commit introduced helper functions with semantically meaningful names to populate the lists of memory effects in transfor
[mlir] Use semantically readable functions for transform op effects
A recent commit introduced helper functions with semantically meaningful names to populate the lists of memory effects in transform ops, use them whenever possible.
Depends On D129287
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D129365
show more ...
|
| #
00d1a1a2 |
| 07-Jul-2022 |
Alex Zinenko <[email protected]> |
[mlir] Add ReplicateOp to the Transform dialect
This handle manipulation operation allows one to define a new handle that is associated with a the same payload IR operations N times, where N can be
[mlir] Add ReplicateOp to the Transform dialect
This handle manipulation operation allows one to define a new handle that is associated with a the same payload IR operations N times, where N can be driven by the size of payload IR operation list associated with another handle. This can be seen as a sort of broadcast that can be used to ensure the lists associated with two handles have equal numbers of payload IR ops as expected by many pairwise transform operations.
Introduce an additional "expensive" check that guards against consuming a handle that is assocaited with the same payload IR operation more than once as this is likely to lead to double-free or other undesired effects.
Depends On D129110
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D129216
show more ...
|
| #
8e03bfc3 |
| 07-Jul-2022 |
Alex Zinenko <[email protected]> |
[mlir] Transform dialect: introduce merge_handles op
This Transform dialect op allows one to merge the lists of Payload IR operations pointed to by several handles into a single list associated with
[mlir] Transform dialect: introduce merge_handles op
This Transform dialect op allows one to merge the lists of Payload IR operations pointed to by several handles into a single list associated with one handle. This is an important Transform dialect usability improvement for cases where transformations may temporarily diverge for different groups of Payload IR ops before converging back to the same script. Without this op, several copies of the trailing transformations would have to be present in the transformation script.
Depends On D129090
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D129110
show more ...
|
| #
3b7c3a65 |
| 25-Jun-2022 |
Kazu Hirata <[email protected]> |
Revert "Don't use Optional::hasValue (NFC)"
This reverts commit aa8feeefd3ac6c78ee8f67bf033976fc7d68bc6d.
|
| #
aa8feeef |
| 25-Jun-2022 |
Kazu Hirata <[email protected]> |
Don't use Optional::hasValue (NFC)
|
|
Revision tags: llvmorg-14.0.6 |
|
| #
037f0995 |
| 20-Jun-2022 |
Kazu Hirata <[email protected]> |
[mlir] Don't use Optional::hasValue (NFC)
|
| #
1d45282a |
| 15-Jun-2022 |
Alex Zinenko <[email protected]> |
[mlir] address post-commit review for D127724
- make transform.alternatives op apply only to isolated-from-above payload IR scopes; - fix potential leak; - fix several typos.
|
| #
069ca6f7 |
| 14-Jun-2022 |
Alex Zinenko <[email protected]> |
[mlir] fix compiler error due to commit landing race
|
| #
e3890b7f |
| 14-Jun-2022 |
Alex Zinenko <[email protected]> |
[mlir] Introduce transform.alternatives op
Introduce a transform dialect op that allows one to attempt different transformation sequences on the same piece of payload IR until one of them succeeds.
[mlir] Introduce transform.alternatives op
Introduce a transform dialect op that allows one to attempt different transformation sequences on the same piece of payload IR until one of them succeeds. This op fundamentally expands the scope of possibilities in the transform dialect that, until now, could only propagate transformation failure, at least using in-tree operations. This requires a more detailed specification of the execution model for the transform dialect that now indicates how failure is handled and propagated.
Transformations described by transform operations now have tri-state results, with some errors being fundamentally irrecoverable (e.g., generating malformed IR) and some others being recoverable by containing ops. Existing transform ops directly implementing the `apply` interface method are updated to produce this directly. Transform ops with the `TransformEachTransformOpTrait` are currently considered to produce only irrecoverable failures and will be updated separately.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D127724
show more ...
|
| #
537f2208 |
| 13-Jun-2022 |
Mogball <[email protected]> |
[mlir] Support getSuccessorInputs from parent op
Ops that implement `RegionBranchOpInterface` are allowed to indicate that they can branch back to themselves in `getSuccessorRegions`, but there is n
[mlir] Support getSuccessorInputs from parent op
Ops that implement `RegionBranchOpInterface` are allowed to indicate that they can branch back to themselves in `getSuccessorRegions`, but there is no API that allows them to specify the forwarded operands. This patch enables that by changing `getSuccessorEntryOperands` to accept `None`.
Fixes #54928
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D127239
show more ...
|
|
Revision tags: llvmorg-14.0.5 |
|
| #
5f0d4f20 |
| 09-Jun-2022 |
Alex Zinenko <[email protected]> |
[mlir] Introduce Transform ops for loops
Introduce transform ops for "for" loops, in particular for peeling, software pipelining and unrolling, along with a couple of "IR navigation" ops. These ops
[mlir] Introduce Transform ops for loops
Introduce transform ops for "for" loops, in particular for peeling, software pipelining and unrolling, along with a couple of "IR navigation" ops. These ops are intended to be generalized to different kinds of loops when possible and therefore use the "loop" prefix. They currently live in the SCF dialect as there is no clear place to put transform ops that may span across several dialects, this decision is postponed until the ops actually need to handle non-SCF loops.
Additionally refactor some common utilities for transform ops into trait or interface methods, and change the loop pipelining to be a returning pattern.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D127300
show more ...
|
| #
cc6c1592 |
| 30-May-2022 |
Alex Zinenko <[email protected]> |
[mlir] add VectorizeOp to structured transform ops
Vectorization is a key transformation to achieve high performance on most architectures. In the transform dialect, vectorization is implemented as
[mlir] add VectorizeOp to structured transform ops
Vectorization is a key transformation to achieve high performance on most architectures. In the transform dialect, vectorization is implemented as a parameterizable transform op. It currently applies to a scope of payload IR delimited by some isolated-from-above op, mainly because several enabling transformations (such as affine simplification) are needed to perform vectorization and these transformation would apply to ops other than the "main" computational payload op. A separate "navigation" transform op that obtains the isolated-from-above ancestor of an op is introduced in the core transform dialect. Even though it is currently only useful for vectorization, isolated-from-above ops are a common anchor for transformations (usually implemented as passes) that is likely to be reused in the future.
Depends On D126374
Reviewed By: nicolasvasilache
Differential Revision: https://reviews.llvm.org/D126542
show more ...
|
| #
73c3dff1 |
| 25-May-2022 |
Alex Zinenko <[email protected]> |
[mlir] Use-after-free checker for the Transform dialect
The Transform dialect uses the side effect modeling mechanism to record the effects of the transform ops on the mapping between Transform IR v
[mlir] Use-after-free checker for the Transform dialect
The Transform dialect uses the side effect modeling mechanism to record the effects of the transform ops on the mapping between Transform IR values and Payload IR ops. Introduce a checker pass that warns if a Transform IR value is used after it has been freed (consumed). This pass is mostly intended as a debugging aid in addition to the verification/assertion mechanisms in the transform interpreter. It reports all potential use-after-free situations. The implementation makes a series of simplifying assumptions to be simple and conservative. A more advanced implementation would rely on the data flow-like analysis associated with a side-effect resource rather than a value, which is currently not supported by the analysis infrastructure.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D126381
show more ...
|
|
Revision tags: llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2 |
|
| #
40a8bd63 |
| 22-Apr-2022 |
Alex Zinenko <[email protected]> |
[mlir] use side effects in the Transform dialect
Currently, the sequence of Transform dialect operations only supports a single use of each operand (verified by the `transform.sequence` operation).
[mlir] use side effects in the Transform dialect
Currently, the sequence of Transform dialect operations only supports a single use of each operand (verified by the `transform.sequence` operation). This was originally motivated by the need to guard against accessing a payload IR operation associated with a transform IR value after this operation has likely been rewritten by a transformation. However, not all Transform dialect operations rewrite payload IR, in particular the "navigation" operation such as `transform.pdl_match` do not.
Introduce memory effects to the Transform dialect operations to describe their effect on the payload IR and the mapping between payload IR opreations and transform IR values. Use these effects to replace the single-use rule, allowing repeated reads and disallowing use-after-free, where operations with the "free" effect are considered to "consume" the transform IR value and rewrite the corresponding payload IR operations). As an additional improvement, this enables code motion transformation on the transform IR itself.
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D124181
show more ...
|
| #
30f22429 |
| 20-Apr-2022 |
Alex Zinenko <[email protected]> |
[mlir] Connect Transform dialect to PDL
This introduces a pair of ops to the Transform dialect that connect it to PDL patterns. Transform dialect relies on PDL for matching the Payload IR ops that a
[mlir] Connect Transform dialect to PDL
This introduces a pair of ops to the Transform dialect that connect it to PDL patterns. Transform dialect relies on PDL for matching the Payload IR ops that are about to be transformed. For this purpose, it provides a container op for patterns, a "pdl_match" op and transform interface implementations that call into the pattern matching infrastructure.
To enable the caching of compiled patterns, this also provides the extension mechanism for TransformState. Extensions allow one to store additional information in the TransformState and thus communicate it between different Transform dialect operations when they are applied. They can be added and removed when applying transform ops. An extension containing a symbol table in which the pattern names are resolved and a pattern compilation cache is introduced as the first client.
Depends On D123664
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D124007
show more ...
|
| #
0eb403ad |
| 19-Apr-2022 |
Alex Zinenko <[email protected]> |
[mlir][transform] Introduce transform.sequence op
Sequence is an important transform combination primitive that just indicates transform ops being applied in a row. The simplest version requires fai
[mlir][transform] Introduce transform.sequence op
Sequence is an important transform combination primitive that just indicates transform ops being applied in a row. The simplest version requires fails immediately if any transformation in the sequence fails. Introducing this operation allows one to start placing transform IR within other IR.
Depends On D123135
Reviewed By: Mogball, rriddle
Differential Revision: https://reviews.llvm.org/D123664
show more ...
|