|
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, llvmorg-14.0.6 |
|
| #
6d5fc1e3 |
| 21-Jun-2022 |
Kazu Hirata <[email protected]> |
[mlir] Don't use Optional::getValue (NFC)
|
| #
30c67587 |
| 19-Jun-2022 |
Kazu Hirata <[email protected]> |
Use value_or instead of getValueOr (NFC)
|
|
Revision tags: llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
ea64828a |
| 19-Mar-2022 |
River Riddle <[email protected]> |
[mlir:PDL] Expand how native constraint/rewrite functions can be defined
This commit refactors the expected form of native constraint and rewrite functions, and greatly reduces the necessary user co
[mlir:PDL] Expand how native constraint/rewrite functions can be defined
This commit refactors the expected form of native constraint and rewrite functions, and greatly reduces the necessary user complexity required when defining a native function. Namely, this commit adds in automatic processing of the necessary PDLValue glue code, and allows for users to define constraint/rewrite functions using the C++ types that they actually want to use.
As an example, lets see a simple example rewrite defined today:
``` static void rewriteFn(PatternRewriter &rewriter, PDLResultList &results, ArrayRef<PDLValue> args) { ValueRange operandValues = args[0].cast<ValueRange>(); TypeRange typeValues = args[1].cast<TypeRange>(); ... // Create an operation at some point and pass it back to PDL. Operation *op = rewriter.create<SomeOp>(...); results.push_back(op); } ```
After this commit, that same rewrite could be defined as:
``` static Operation *rewriteFn(PatternRewriter &rewriter ValueRange operandValues, TypeRange typeValues) { ... // Create an operation at some point and pass it back to PDL. return rewriter.create<SomeOp>(...); } ```
Differential Revision: https://reviews.llvm.org/D122086
show more ...
|
| #
4a3460a7 |
| 16-Mar-2022 |
River Riddle <[email protected]> |
[mlir:FunctionOpInterface] Rename the "type" attribute to "function_type"
This removes any potential confusion with the `getType` accessors which correspond to SSA results of an operation, and makes
[mlir:FunctionOpInterface] Rename the "type" attribute to "function_type"
This removes any potential confusion with the `getType` accessors which correspond to SSA results of an operation, and makes it clear what the intent is (i.e. to represent the type of the function).
Differential Revision: https://reviews.llvm.org/D121762
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
d4a53f3b |
| 16-Feb-2022 |
Alex Zinenko <[email protected]> |
[mlir] call target materialization more in dialect conversion
During dialect conversion, target materialization is triggered to create cast-like operations when a type mismatch occurs between the va
[mlir] call target materialization more in dialect conversion
During dialect conversion, target materialization is triggered to create cast-like operations when a type mismatch occurs between the value that replaces a rewritten operation and the type that another operations expects as operands processed by the type conversion. First, a dummy cast is inserted to make sure the pattern application can proceed. The decision to trigger the user-provided materialization hook is taken later based on the result of the dummy cast having uses. However, it only has uses if other patterns constructed new operations using the casted value as operand. If existing (legal) operations use the replaced value, they may have not been updated to use the casted value yet. The conversion infra would then delete the dummy cast first, and then would replace the uses with now-invalid (null in the bast case) value. When deciding whether to trigger cast materialization, check for liveness the uses not only of the casted value, but also of all the values that it replaces.
This was discovered in the finalizing bufferize pass that cleans up mutually-cancelling casts without touching other operations. It is not impossible that there are other scenarios where the dialect converison infra could produce invalid operand uses because of dummy casts erased too eagerly.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D119937
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init |
|
| #
a70aa7bb |
| 21-Jan-2022 |
River Riddle <[email protected]> |
[mlir:Transforms] Move out the remaining non-dialect independent transforms and utilities
This has been a major TODO for a very long time, and is necessary for establishing a proper dialect-free dep
[mlir:Transforms] Move out the remaining non-dialect independent transforms and utilities
This has been a major TODO for a very long time, and is necessary for establishing a proper dialect-free dependency layering for the Transforms library. Code was moved to effectively two main locations:
* Affine/ There was quite a bit of affine dialect related code in Transforms/ do to historical reasons (of a time way into MLIR's past). The following headers were moved to: Transforms/LoopFusionUtils.h -> Dialect/Affine/LoopFusionUtils.h Transforms/LoopUtils.h -> Dialect/Affine/LoopUtils.h Transforms/Utils.h -> Dialect/Affine/Utils.h
The following transforms were also moved: AffineLoopFusion, AffinePipelineDataTransfer, LoopCoalescing
* SCF/ Only one SCF pass was in Transforms/ (likely accidentally placed here): ParallelLoopCollapsing The SCF specific utilities in LoopUtils have been moved to SCF/Utils.h
* Misc: mlir::moveLoopInvariantCode was also moved to LoopLikeInterface.h given that it is a simple utility defined in terms of LoopLikeOpInterface.
Differential Revision: https://reviews.llvm.org/D117848
show more ...
|
|
Revision tags: llvmorg-13.0.1, llvmorg-13.0.1-rc3 |
|
| #
e084679f |
| 19-Jan-2022 |
River Riddle <[email protected]> |
[mlir] Make locations required when adding/creating block arguments
BlockArguments gained the ability to have locations attached a while ago, but they have always been optional. This goes against th
[mlir] Make locations required when adding/creating block arguments
BlockArguments gained the ability to have locations attached a while ago, but they have always been optional. This goes against the core tenant of MLIR where location information is a requirement, so this commit updates the API to require locations.
Fixes #53279
Differential Revision: https://reviews.llvm.org/D117633
show more ...
|
| #
7ceffae1 |
| 14-Jan-2022 |
River Riddle <[email protected]> |
[mlir] Convert OpTrait::FunctionLike to FunctionOpInterface
This commit refactors the FunctionLike trait into an interface (FunctionOpInterface). FunctionLike as it is today is already a pseudo-inte
[mlir] Convert OpTrait::FunctionLike to FunctionOpInterface
This commit refactors the FunctionLike trait into an interface (FunctionOpInterface). FunctionLike as it is today is already a pseudo-interface, with many users checking the presence of the trait and then manually into functionality implemented in the function_like_impl namespace. By transitioning to an interface, these accesses are much cleaner (ideally with no direct calls to the impl namespace outside of the implementation of the derived function operations, e.g. for parsing/printing utilities).
I've tried to maintain as much compatability with the current state as possible, while also trying to clean up as much of the cruft as possible. The general migration plan for current users of FunctionLike is as follows:
* function_like_impl -> function_interface_impl Realistically most user calls should remove references to functions within this namespace outside of a vary narrow set (e.g. parsing/printing utilities). Calls to the attribute name accessors should be migrated to the `FunctionOpInterface::` equivalent, most everything else should be updated to be driven through an instance of the interface.
* OpTrait::FunctionLike -> FunctionOpInterface `hasTrait` checks will need to be moved to isa, along with the other various Trait vs Interface API differences.
* populateFunctionLikeTypeConversionPattern -> populateFunctionOpInterfaceTypeConversionPattern
Fixes #52917
Differential Revision: https://reviews.llvm.org/D117272
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc2 |
|
| #
d4d01686 |
| 04-Jan-2022 |
River Riddle <[email protected]> |
[mlir] Remove populateFuncOpTypeConversionPattern
This method simply forwards to populateFunctionLikeTypeConversionPattern, which is more general. This also helps to remove special treatment of Func
[mlir] Remove populateFuncOpTypeConversionPattern
This method simply forwards to populateFunctionLikeTypeConversionPattern, which is more general. This also helps to remove special treatment of FuncOp from DialectConversion.
Differential Revision: https://reviews.llvm.org/D116624
show more ...
|
| #
e49c0e48 |
| 22-Dec-2021 |
Uday Bondhugula <[email protected]> |
[MLIR] Fix confusing diagnostic during dialect conversion
Fix confusing diagnostic during partial dialect conversion. A failure to legalize is not the same as an operation being illegal: for eg. an
[MLIR] Fix confusing diagnostic during dialect conversion
Fix confusing diagnostic during partial dialect conversion. A failure to legalize is not the same as an operation being illegal: for eg. an operation neither explicity marked legal nor explicitly marked illegal could have been generated and may have failed to legalize further. The op isn't an illegal one per https://mlir.llvm.org/docs/DialectConversion/#conversion-target which is an op that is explicitly marked illegal.
Differential Revision: https://reviews.llvm.org/D116152
show more ...
|
| #
e4853be2 |
| 02-Jan-2022 |
Mehdi Amini <[email protected]> |
Apply clang-tidy fixes for performance-for-range-copy to MLIR (NFC)
|
| #
e5639b3f |
| 22-Dec-2021 |
Mehdi Amini <[email protected]> |
Fix more clang-tidy cleanups in mlir/ (NFC)
|
| #
be0a7e9f |
| 07-Dec-2021 |
Mehdi Amini <[email protected]> |
Adjust "end namespace" comment in MLIR to match new agree'd coding style
See D115115 and this mailing list discussion: https://lists.llvm.org/pipermail/llvm-dev/2021-December/154199.html
Differenti
Adjust "end namespace" comment in MLIR to match new agree'd coding style
See D115115 and this mailing list discussion: https://lists.llvm.org/pipermail/llvm-dev/2021-December/154199.html
Differential Revision: https://reviews.llvm.org/D115309
show more ...
|
| #
b8c6b152 |
| 04-Dec-2021 |
Chia-hung Duan <[email protected]> |
[mlir] Support collecting logs from notifyMatchFailure().
Let the user registers their own handler to processing the matching failure information.
Reviewed By: rriddle
Differential Revision: https
[mlir] Support collecting logs from notifyMatchFailure().
Let the user registers their own handler to processing the matching failure information.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D110896
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
9c5982ef |
| 22-Nov-2021 |
Alex Zinenko <[email protected]> |
[mlir] support recursive types in type conversion infra
MLIR supports recursive types but they could not be handled by the conversion infrastructure directly as it would result in infinite recursion
[mlir] support recursive types in type conversion infra
MLIR supports recursive types but they could not be handled by the conversion infrastructure directly as it would result in infinite recursion in `convertType` for elemental types. Support this case by keeping the "call stack" of nested type conversions in the TypeConverter class and by passing it as an optional argument to the individual conversion callback. The callback can then check if a specific type is present on the stack more than once to detect and handle the recursive case.
This approach is preferred to the alternative approach of having a separate callback dedicated to handling only the recursive case as the latter was observed to introduce ~3% time overhead on a 50MB IR file even if it did not contain recursive types.
This approach is also preferred to keeping a local stack in type converters that need to handle recursive types as that would compose poorly in case of out-of-tree or cross-project extensions.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D113579
show more ...
|
| #
2a3878ea |
| 28-Oct-2021 |
Butygin <[email protected]> |
[mlir] DialectConversion: fix OperationLegalizer::isIllegal result when legality callback returns None
OperationLegalizer::isIllegal returns false if operation legality wasn't registered by user and
[mlir] DialectConversion: fix OperationLegalizer::isIllegal result when legality callback returns None
OperationLegalizer::isIllegal returns false if operation legality wasn't registered by user and we expect same behaviour when dynamic legality callback return None, but instead true was returned.
Differential Revision: https://reviews.llvm.org/D113267
show more ...
|
| #
4070f305 |
| 05-Nov-2021 |
River Riddle <[email protected]> |
[mlir][DialectConversion] Legalize all live argument conversions
Previously we didn't materialize conversions for arguments in certain cases as the implicit type propagation was being heavily relied
[mlir][DialectConversion] Legalize all live argument conversions
Previously we didn't materialize conversions for arguments in certain cases as the implicit type propagation was being heavily relied on by many patterns. Now that those patterns have been fixed to properly handle type conversions, we can drop the special behavior.
Differential Revision: https://reviews.llvm.org/D113233
show more ...
|
| #
db2b1e96 |
| 27-Oct-2021 |
Kazu Hirata <[email protected]> |
[Utils] Fix a warning in DialectConversion.cpp
This patch fixes:
mlir/lib/Transforms/Utils/DialectConversion.cpp:2775:5: error: default label in switch which covers all enumeration values [-W
[Utils] Fix a warning in DialectConversion.cpp
This patch fixes:
mlir/lib/Transforms/Utils/DialectConversion.cpp:2775:5: error: default label in switch which covers all enumeration values [-Werror,-Wcovered-switch-default]
by removing the default case. This way, the compiler should issue a warning in the future when somebody adds a new enum value without a corresponding case in the switch statement.
show more ...
|
| #
015192c6 |
| 27-Oct-2021 |
River Riddle <[email protected]> |
[mlir:DialectConversion] Restructure how argument/target materializations get invoked
The current implementation invokes materializations whenever an input operand does not have a mapping for the de
[mlir:DialectConversion] Restructure how argument/target materializations get invoked
The current implementation invokes materializations whenever an input operand does not have a mapping for the desired type, i.e. it requires materialization at the earliest possible point. This conflicts with goal of dialect conversion (and also the current documentation) which states that a materialization is only required if the materialization is supposed to persist after the conversion process has finished.
This revision refactors this such that whenever a target materialization "might" be necessary, we insert an unrealized_conversion_cast to act as a temporary materialization. This allows for deferring the invocation of the user materialization hooks until the end of the conversion process, where we actually have a better sense if it's actually necessary. This has several benefits:
* In some cases a target materialization hook is no longer necessary When performing a full conversion, there are some situations where a temporary materialization is necessary. Moving forward, these users won't need to provide any target materializations, as the temporary materializations do not require the user to provide materialization hooks.
* getRemappedValue can now handle values that haven't been converted yet Before this commit, it wasn't well supported to get the remapped value of a value that hadn't been converted yet (making it difficult/impossible to convert multiple operations in many situations). This commit updates getRemappedValue to properly handle this case by inserting temporary materializations when necessary.
Another code-health related benefit is that with this change we can move a majority of the complexity related to materializations to the end of the conversion process, instead of handling adhoc while conversion is happening.
Differential Revision: https://reviews.llvm.org/D111620
show more ...
|
| #
01b55f16 |
| 27-Oct-2021 |
River Riddle <[email protected]> |
[NFC] Tidy up DialectConversion.cpp
This file has gotten a bit crusty over the years, and has outdated stylistic decisions.
|
|
Revision tags: 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 |
|
| #
c6828e0c |
| 01-Jul-2021 |
Caitlyn Cano <[email protected]> |
[mlir] Make ConversionTarget dynamic legality callbacks composable
* Change callback signature `bool(Operation *)` -> `Optional<bool>(Operation *)` * addDynamicallyLegalOp add callback to the chain
[mlir] Make ConversionTarget dynamic legality callbacks composable
* Change callback signature `bool(Operation *)` -> `Optional<bool>(Operation *)` * addDynamicallyLegalOp add callback to the chain * If callback returned empty `Optional` next callback in chain will be called
Differential Revision: https://reviews.llvm.org/D110487
show more ...
|
| #
56272257 |
| 06-Oct-2021 |
Stella Laurenzo <[email protected]> |
Return failure on failure in convertBlockSignature.
This was causing a subsequent assert/crash when a type converter failed to convert a block argument.
Reviewed By: rriddle
Differential Revision:
Return failure on failure in convertBlockSignature.
This was causing a subsequent assert/crash when a type converter failed to convert a block argument.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D110985
show more ...
|
| #
b2b63d1b |
| 22-Sep-2021 |
Yi Zhang <[email protected]> |
Reset operation when canceling root update transaction
Should reset the operation to original state when canceling the updates.
Reviewed By: rriddle, ftynse
Differential Revision: https://reviews.
Reset operation when canceling root update transaction
Should reset the operation to original state when canceling the updates.
Reviewed By: rriddle, ftynse
Differential Revision: https://reviews.llvm.org/D110176
show more ...
|
| #
ec03bbe8 |
| 20-Aug-2021 |
Vladislav Vinogradov <[email protected]> |
[mlir] Fix bug in partial dialect conversion
The discussion on forum: https://llvm.discourse.group/t/bug-in-partial-dialect-conversion/4115
The `applyPartialConversion` didn't handle the operations
[mlir] Fix bug in partial dialect conversion
The discussion on forum: https://llvm.discourse.group/t/bug-in-partial-dialect-conversion/4115
The `applyPartialConversion` didn't handle the operations, that were marked as illegal inside dynamic legality callback. Instead of reporting error, if such operation was not converted to legal set, the method just added it to `unconvertedSet` in the same way as unknown operations.
This patch fixes that and handle dynamically illegal operations as well.
The patch includes 2 fixes for existing passes:
* `tensor-bufferize` - explicitly mark `std.return` as legal. * `convert-parallel-loops-to-gpu` - ugly fix with marking visited operations to avoid recursive legality checks.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D108505
show more ...
|
| #
1c9c2c91 |
| 26-Jul-2021 |
Benjamin Kramer <[email protected]> |
[mlir] Remove the default isDynamicallyLegal hook
This is redundant with the callback variant and untested. Also remove the callback-less methods for adding a dynamically legal op, as they are no lo
[mlir] Remove the default isDynamicallyLegal hook
This is redundant with the callback variant and untested. Also remove the callback-less methods for adding a dynamically legal op, as they are no longer useful.
Differential Revision: https://reviews.llvm.org/D106786
show more ...
|