|
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 |
|
| #
0db084d4 |
| 12-Jul-2022 |
Jacques Pienaar <[email protected]> |
[mlir] Switch create to use NamedAttrList&&
Avoids needing the two parallel functions as NamedAttrList already takes care of caching DictionaryAttr and implicitly can convert from either.
Different
[mlir] Switch create to use NamedAttrList&&
Avoids needing the two parallel functions as NamedAttrList already takes care of caching DictionaryAttr and implicitly can convert from either.
Differential Revision: https://reviews.llvm.org/D129527
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4 |
|
| #
122e6858 |
| 19-May-2022 |
Alex Zinenko <[email protected]> |
[mlir] do not elide dialect prefix for ops with dots in the name
For the hypothetical "a.b.c" op printed within a region that declares "a" as the default dialect, MLIR would currently elide the "a."
[mlir] do not elide dialect prefix for ops with dots in the name
For the hypothetical "a.b.c" op printed within a region that declares "a" as the default dialect, MLIR would currently elide the "a." prefix and only print "b.c". However, this becomes ambiguous while parsing as "b.c" may be exist as the "c" op in the "b" dialect. If it does not, the parsing currently fails. Do not elide the default dialect if the op name contains further dots to avoid the ambiguity.
See https://discourse.llvm.org/t/dropping-dialect-prefix-for-ops-with-multiple-dots-in-the-name/62562
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D125975
show more ...
|
| #
70b69c54 |
| 14-May-2022 |
Mogball <[email protected]> |
[mlir] Rename Zero* traits to Zero*s
Rename ZeroResult -> ZeroResults ZeroSuccessor -> ZeroSuccessors ZeroRegion -> ZeroRegions
to be in line with ZeroOperands and grammatically correct.
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2 |
|
| #
a8308020 |
| 21-Apr-2022 |
River Riddle <[email protected]> |
[mlir] Remove special case parsing/printing of `func` operations
This was leftover from when the standard dialect was destroyed, and when FuncOp moved to the func dialect. Now that these transitions
[mlir] Remove special case parsing/printing of `func` operations
This was leftover from when the standard dialect was destroyed, and when FuncOp moved to the func dialect. Now that these transitions have settled a bit we can drop these.
Most updates were handled using a simple regex: replace `^( *)func` with `$1func.func`
Differential Revision: https://reviews.llvm.org/D124146
show more ...
|
| #
a41aaf16 |
| 21-Apr-2022 |
Markus Böck <[email protected]> |
[mlir] Make `Regions`s `cloneInto` multithread-readable
Prior to this patch, `cloneInto` would do a simple walk over the blocks and contained operations and clone and map them as it encounters them.
[mlir] Make `Regions`s `cloneInto` multithread-readable
Prior to this patch, `cloneInto` would do a simple walk over the blocks and contained operations and clone and map them as it encounters them. As finishing touch it then remaps any successor and operands it has remapped during that process.
This is generally fine, but sadly leads to a lot of uses of both operations and blocks from the source region, in the cloned operations in the target region. Those uses lead to writes in the use-def list of the operations, making `cloneInto` never thread safe.
This patch reimplements `cloneInto` in three steps to avoid ever creating any extra uses on elements in the source region: * It first creates the mapping of all blocks and block operands * It then clones all operations to create the mapping of all operation results, but does not yet clone any regions or set the operands * After all operation results have been mapped, it now sets the operations operands and clones their regions.
That way it is now possible to call `cloneInto` from multiple threads if the Region or Operation is isolated-from-above. This allows creating copies of functions or to use `mlir::inlineCall` with the same source region from multiple threads. In the general case, the method is thread-safe if through cloning, no new uses of `Value`s from outside the cloned Operation/Region are created. This can be ensured by mapping any outside operands via the `BlockAndValueMapping` to `Value`s owned by the caller thread.
While I was at it, I also reworked the `clone` method of `Operation` a little bit and added a proper options class to avoid having a `cloneWithoutRegionsAndOperands` method, and be more extensible in the future. `cloneWithoutRegions` is now also a simple wrapper that calls `clone` with the proper options set. That way all the operation cloning code is now contained solely within `clone`.
Differential Revision: https://reviews.llvm.org/D123917
show more ...
|
| #
9a8bb4bc |
| 15-Apr-2022 |
William S. Moses <[email protected]> |
[NFC] Update comments
|
|
Revision tags: llvmorg-14.0.1 |
|
| #
ed499ddc |
| 26-Mar-2022 |
William S. Moses <[email protected]> |
[MLIR] Fix operation clone
Operation clone is currently faulty.
Suppose you have a block like as follows:
``` (%x0 : i32) { %x1 = f(%x0) return %x1 } ```
The test case we have is that we wa
[MLIR] Fix operation clone
Operation clone is currently faulty.
Suppose you have a block like as follows:
``` (%x0 : i32) { %x1 = f(%x0) return %x1 } ```
The test case we have is that we want to "unroll" this, in which we want to change this to compute `f(f(x0))` instead of just `f(x0)`. We do so by making a copy of the body at the end of the block and set the uses of the argument in the copy operations with the value returned from the original block. This is implemented as follows: 1) map to the block arguments to the returned value (`map[x0] = x1`). 2) clone the body
Now for this small example, this works as intended and we get the following.
``` (%x0 : i32) { %x1 = f(%x0) %x2 = f(%x1) return %x2 } ```
This is because the current logic to clone `x1 = f(x0)` first looks up the arguments in the map (which finds `x0` maps to `x1` from the initialization), and then sets the map of the result to the cloned result (`map[x1] = x2`).
However, this fails if `x0` is not an argument to the op, but instead used inside the region, like below.
``` (%x0 : i32) { %x1 = f() { yield %x0 } return %x1 } ```
This is because cloning an op currently first looks up the args (none), sets the map of the result (`map[%x1] = %x2`), and then clones the regions. This results in the following, which is clearly illegal:
``` (%x0 : i32) { %x1 = f() { yield %x0 } %x2 = f() { yield %x2 } return %x2 } ```
Diving deeper, this is partially due to the ordering (how this PR fixes it), as well as how region cloning works. Namely it will first clone with the mapping, and then it will remap all operands. Since the ordering above now has a map of `x0 -> x1` and `x1 -> x2`, we end up with the incorrect behavior here.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D122531
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4 |
|
| #
ed645f63 |
| 10-Mar-2022 |
Chia-hung Duan <[email protected]> |
[mlir] Support verification order (3/3)
In this CL, update the function name of verifier according to the behavior. If a verifier needs to access the region then it'll be updated to `verifyRegions`.
[mlir] Support verification order (3/3)
In this CL, update the function name of verifier according to the behavior. If a verifier needs to access the region then it'll be updated to `verifyRegions`.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D120373
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc3 |
|
| #
27df7158 |
| 07-Mar-2022 |
Sergei Grechanik <[email protected]> |
[mlir] Fix dumping invalid ops
This patch fixes the crash when printing some ops (like affine.for and scf.for) when they are dumped in invalid state, e.g. during pattern application. Now the AsmStat
[mlir] Fix dumping invalid ops
This patch fixes the crash when printing some ops (like affine.for and scf.for) when they are dumped in invalid state, e.g. during pattern application. Now the AsmState constructor verifies the operation first and switches to generic operation printing when the verification fails. Also operations are now printed in generic form when emitting diagnostics and the severity level is Error.
Reviewed By: rriddle, mehdi_amini
Differential Revision: https://reviews.llvm.org/D117834
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc2 |
|
| #
23aa5a74 |
| 26-Feb-2022 |
River Riddle <[email protected]> |
[mlir] Rename the Standard dialect to the Func dialect
The last remaining operations in the standard dialect all revolve around FuncOp/function related constructs. This patch simply handles the init
[mlir] Rename the Standard dialect to the Func dialect
The last remaining operations in the standard dialect all revolve around FuncOp/function related constructs. This patch simply handles the initial renaming (which by itself is already huge), but there are a large number of cleanups unlocked/necessary afterwards:
* Removing a bunch of unnecessary dependencies on Func * Cleaning up the From/ToStandard conversion passes * Preparing for the move of FuncOp to the Func dialect
See the discussion at https://discourse.llvm.org/t/standard-dialect-the-final-chapter/6061
Differential Revision: https://reviews.llvm.org/D120624
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1 |
|
| #
60cac0c0 |
| 06-Feb-2022 |
River Riddle <[email protected]> |
[mlir][NFC] Remove deprecated/old build/fold/parser utilities from OpDefinition
These have generally been replaced by better ODS functionality, and do not need to be explicitly provided anymore.
Di
[mlir][NFC] Remove deprecated/old build/fold/parser utilities from OpDefinition
These have generally been replaced by better ODS functionality, and do not need to be explicitly provided anymore.
Differential Revision: https://reviews.llvm.org/D119065
show more ...
|
|
Revision tags: llvmorg-15-init |
|
| #
58e7bf78 |
| 21-Jan-2022 |
River Riddle <[email protected]> |
[mlir] Add isa/dyn_cast support for dialect interfaces
This matches the same API usage as attributes/ops/types. For example:
```c++ Dialect *dialect = ...;
// Instead of this: if (auto *interface
[mlir] Add isa/dyn_cast support for dialect interfaces
This matches the same API usage as attributes/ops/types. For example:
```c++ Dialect *dialect = ...;
// Instead of this: if (auto *interface = dialect->getRegisteredInterface<DialectInlinerInterface>())
// You can do this: if (auto *interface = dyn_cast<DialectInlinerInterface>(dialect)) ```
Differential Revision: https://reviews.llvm.org/D117859
show more ...
|
| #
6842ec42 |
| 26-Jan-2022 |
River Riddle <[email protected]> |
[mlir][NFC] Add a using for llvm::SMLoc/llvm::SMRange to LLVM.h
These are used pervasively during parsing.
Differential Revision: https://reviews.llvm.org/D118291
|
|
Revision tags: llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
1fc096af |
| 02-Jan-2022 |
Mehdi Amini <[email protected]> |
Apply clang-tidy fixes for performance-unnecessary-value-param to MLIR (NFC)
Reviewed By: Mogball
Differential Revision: https://reviews.llvm.org/D116250
|
| #
02b6fb21 |
| 20-Dec-2021 |
Mehdi Amini <[email protected]> |
Fix clang-tidy issues in mlir/ (NFC)
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D115956
|
| #
0845635e |
| 10-Dec-2021 |
Mogball <[email protected]> |
[mlir][ir] Custom ops' parse/print fall back to dialect hooks
Custom ops that have no parser or printer should fall back to the dialect's parser and/or printer hooks. This avoids the need to define
[mlir][ir] Custom ops' parse/print fall back to dialect hooks
Custom ops that have no parser or printer should fall back to the dialect's parser and/or printer hooks. This avoids the need to define parsers and printers that simply dispatch to the dialect hook.
Reviewed By: mehdi_amini, rriddle
Differential Revision: https://reviews.llvm.org/D115481
show more ...
|
| #
344eee6f |
| 26-Nov-2021 |
Chris Jones <[email protected]> |
[MLIR] Allow `Idempotent` trait to be applied to binary ops.
Add `Idempotent` trait to `arith.{andi,ori}`.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D114574
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
edc6c0ec |
| 17-Nov-2021 |
River Riddle <[email protected]> |
[mlir] Refactor AbstractOperation and OperationName
The current implementation is quite clunky; OperationName stores either an Identifier or an AbstractOperation that corresponds to an operation. Th
[mlir] Refactor AbstractOperation and OperationName
The current implementation is quite clunky; OperationName stores either an Identifier or an AbstractOperation that corresponds to an operation. This has several problems:
* OperationNames created before and after an operation are registered are different * Accessing the identifier name/dialect/etc. from an OperationName are overly branchy - they need to dyn_cast a PointerUnion to check the state
This commit refactors this such that we create a single information struct for every operation name, even operations that aren't registered yet. When an OperationName is created for an unregistered operation, we only populate the name field. When the operation is registered, we populate the remaining fields. With this we now have two new classes: OperationName and RegisteredOperationName. These both point to the same underlying operation information struct, but only RegisteredOperationName can assume that the operation is actually registered. This leads to a much cleaner API, and we can also move some AbstractOperation functionality directly to OperationName.
Differential Revision: https://reviews.llvm.org/D114049
show more ...
|
| #
195730a6 |
| 16-Nov-2021 |
River Riddle <[email protected]> |
[mlir][NFC] Replace references to Identifier with StringAttr
This is part of the replacement of Identifier with StringAttr.
Differential Revision: https://reviews.llvm.org/D113953
|
| #
a0391134 |
| 03-Nov-2021 |
River Riddle <[email protected]> |
[mlir] Move the Operation OperandStorage to the first trailing object
The main benefits of this change are faster access to operands (no need to compute the offset, as it is now right after the oper
[mlir] Move the Operation OperandStorage to the first trailing object
The main benefits of this change are faster access to operands (no need to compute the offset, as it is now right after the operation), simpler code(no need to manage a lot of the "is the operand storage trailing" logic we had to before). The major downside to this though, is that operand holding operations now grow in size by 1 word (as no matter how we do this change, there will need to be some additional book keeping).
Differential Revision: https://reviews.llvm.org/D111695
show more ...
|
| #
24685aae |
| 31-Oct-2021 |
Alex Zinenko <[email protected]> |
[mlir][python] allow for detaching operations from a block
Provide support for removing an operation from the block that contains it and moving it back to detached state. This allows for the operati
[mlir][python] allow for detaching operations from a block
Provide support for removing an operation from the block that contains it and moving it back to detached state. This allows for the operation to be moved to a different block, a common IR manipulation for, e.g., module merging.
Also fix a potential one-past-end iterator dereference in Operation::moveAfter discovered in the process.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D112700
show more ...
|
| #
a77cd55d |
| 18-Oct-2021 |
River Riddle <[email protected]> |
[mlir] Add support for specifying printing flags when adding an op to a Diagnostic
This removes edge cases where the default flags we want to use during printing (e.g. local scope, eliding attribute
[mlir] Add support for specifying printing flags when adding an op to a Diagnostic
This removes edge cases where the default flags we want to use during printing (e.g. local scope, eliding attributes, etc.) get missed/dropped.
Differential Revision: https://reviews.llvm.org/D111761
show more ...
|
| #
05fb2606 |
| 12-Oct-2021 |
Uday Bondhugula <[email protected]> |
[MLIR] Fix assert crash when an unregistered dialect op is encountered
Fix assert crash when an unregistered dialect op is encountered during parsing and `-allow-unregistered-dialect' isn't on. Inst
[MLIR] Fix assert crash when an unregistered dialect op is encountered
Fix assert crash when an unregistered dialect op is encountered during parsing and `-allow-unregistered-dialect' isn't on. Instead, emit an error.
While on this, clean up "registered" vs "loaded" on `getDialect()` and local clang-tidy warnings.
https://llvm.discourse.group/t/assert-behavior-on-unregistered-dialect-ops/4402
Differential Revision: https://reviews.llvm.org/D111628
show more ...
|
| #
00b7d951 |
| 06-Oct-2021 |
Mehdi Amini <[email protected]> |
Stop stripping the `std.` prefix when printing operations in a region with a defined default dialect
This fixes round-trip / ambiguity when an operation in the standard dialect would have the same n
Stop stripping the `std.` prefix when printing operations in a region with a defined default dialect
This fixes round-trip / ambiguity when an operation in the standard dialect would have the same name as an operation in the default dialect.
Differential Revision: https://reviews.llvm.org/D111204
show more ...
|
| #
53120631 |
| 24-Sep-2021 |
River Riddle <[email protected]> |
[mlir:OpAsm] Factor out the common bits of (Op/Dialect)Asm(Parser/Printer)
This has a few benefits: * It allows for defining parsers/printer code blocks that can be shared between operations and a
[mlir:OpAsm] Factor out the common bits of (Op/Dialect)Asm(Parser/Printer)
This has a few benefits: * It allows for defining parsers/printer code blocks that can be shared between operations and attribute/types. * It removes the weird duplication of generic parser/printer hooks, which means that newly added hooks only require touching one class.
Differential Revision: https://reviews.llvm.org/D110375
show more ...
|