- May 21, 2021
-
-
Nicolas Vasilache authored
Drop the remaining EDSC subdirectories and update all uses. Differential Revision: https://reviews.llvm.org/D102911
-
Adrian Kuegel authored
Differential Revision: https://reviews.llvm.org/D102902
-
Konrad Kleine authored
I noticed while packaging mlir that most mlir library names start with `libMLIR`. The only different libary was `libMlirLspServerLib.a`. That's why I changed the library to be similarly named to the others. Differential Revision: https://reviews.llvm.org/D102881
-
- May 20, 2021
-
-
Nicolas Vasilache authored
Drop the Affine dialect EDSC subdirectory and update all uses. Differential Revision: https://reviews.llvm.org/D102878
-
Nicolas Vasilache authored
Drop the MemRef dialect EDSC subdirectory and update all uses. Differential Revision: https://reviews.llvm.org/D102868
-
Nicolas Vasilache authored
Drop the Linalg dialect EDSC subdirectory and update all uses. Differential Revision: https://reviews.llvm.org/D102848
-
Adrian Kuegel authored
This adds the straightforward conversion for EqualOp (two complex numbers are equal if both the real and the imaginary part are equal). Differential Revision: https://reviews.llvm.org/D102840
-
Adrian Kuegel authored
-
Nicolas Vasilache authored
Instead, use createOrFold builders which result in more static information available. Differential Revision: https://reviews.llvm.org/D102832
-
River Riddle authored
The current implementation has several key limitations and weirdness, e.g local reproducers don't support dynamic pass pipelines, error messages don't include the passes that failed, etc. This revision refactors the implementation to support more use cases, and also be much cleaner. The main change in this revision, aside from moving the implementation out of Pass.cpp and into its own file, is the addition of a crash recovery pass instrumentation. For local reproducers, this instrumentation handles setting up the recovery context before executing each pass. For global reproducers, the instrumentation is used to provide a more detailed error message, containing information about which passes are running and on which operations. Example of new message: ``` error: Failures have been detected while processing an MLIR pass pipeline note: Pipeline failed while executing [`TestCrashRecoveryPass` on 'module' operation: @foo]: reproducer generated at `crash-recovery.mlir.tmp` ``` Differential Revision: https://reviews.llvm.org/D101854
-
River Riddle authored
This flag will print the IR after a pass only in the case where the pass failed. This can be useful to more easily view the invalid IR, without needing to print after every pass in the pipeline. Differential Revision: https://reviews.llvm.org/D101853
-
- May 19, 2021
-
-
Aart Bik authored
Skip the sparsification pass for Linalg ops without annotated tensors (or cases that are not properly handled yet). Reviewed By: bixia Differential Revision: https://reviews.llvm.org/D102787
-
Sean Silva authored
Also, fix a small typo where the "unsigned" splat variants were not being created with an unsigned type. Differential Revision: https://reviews.llvm.org/D102797
-
River Riddle authored
Reland Note: This was accidentally reverted in 80d981ed, but is an important improvement even outside of the driving motivator in D102567. We currently use SourceMgr::getLineAndColumn to get the line and column for an SMLoc, but this includes a call to StringRef::find_last_of that ends up dominating compile time. In D102567, we start creating locations from the input file for block arguments which resulted in an extreme performance regression for modules with very large amounts of block arguments. This revision switches to just using a pointer offset from the beginning of the line to calculate the column(all MLIR files are simple ascii), resulting in a compile time reduction from 4700 seconds (1 hour and 18 minutes) to 8 seconds.
-
Stephen Neuendorffer authored
vector.transfer_read and vector.transfer_write operations are converted to llvm intrinsics with specific alignment information, however there doesn't seem to be a way in llvm to take information from llvm.assume intrinsics and change this alignment information. In any event, due the to the structure of the llvm.assume instrinsic, applying this information at the llvm level is more cumbersome. Instead, let's generate the masked vector load and store instrinsic with the right alignment information from MLIR in the first place. Since we're bothering to do this, lets just emit the proper alignment for loads, stores, scatter, and gather ops too. Differential Revision: https://reviews.llvm.org/D100444
-
Nicolas Vasilache authored
Drop the SCF dialect EDSC subdirectory and update all uses. Differential Revision: https://reviews.llvm.org/D102780
-
Tobias Gysi authored
The patch extends the yaml code generation to support the following new OpDSL constructs: - captures - constants - iteration index accesses - predefined types These changes have been introduced by revision https://reviews.llvm.org/D101364. Differential Revision: https://reviews.llvm.org/D102075
-
Nicolas Vasilache authored
Drop the vector dialect EDSC subdirectory and update all uses.
-
Matthias Springer authored
VectorTransferPermutationMapLoweringPatterns can be enabled via a pass option. These additional patterns lower permutation maps to minor identity maps with broadcasting, if possible, allowing for more efficient vector load/stores. The option is deactivated by default. Differential Revision: https://reviews.llvm.org/D102593
-
MaheshRavishankar authored
LinalgOps that are all parallel do not use the value of `outs` tensor. The semantics is that the `outs` tensor is fully overwritten. Using anything other than `init_tensor` can add false dependencies between operations, when the use is just for the shape of the tensor. Adding a canonicalization to always use `init_tensor` in such cases, breaks this dependence. Differential Revision: https://reviews.llvm.org/D102561
-
Wenyi Zhao authored
Original interfaces are not safe to be called during dialect conversion. This is because some ops (e.g. `dynamic_reshape(input, target_shape)`) depend on the values of their operands to calculate the output shape. However the operands may be out of reach during dialect conversion (e.g. converting from tensor world to buffer world). This patch provides a new kind of interface which accpets user-provided operands to solve this problem. Reviewed By: herhut Differential Revision: https://reviews.llvm.org/D102317
-
Richard Smith authored
"[mlir] Speed up Lexer::getEncodedSourceLocation" This reverts commit 3043be9d and commit 861d69a5. This change resulted in printing textual MLIR that can't be parsed; see review thread https://reviews.llvm.org/D102567 for details.
-
River Riddle authored
We currently use SourceMgr::getLineAndColumn to get the line and column for an SMLoc, but this includes a call to StringRef::find_last_of that ends up dominating compile time. In D102567, we start creating locations from the input file for block arguments which resulted in an extreme performance regression for modules with very large amounts of block arguments. This revision switches to just using a pointer offset from the beginning of the line to calculate the column(all MLIR files are simple ascii), resulting in a compile time reduction from 4700 seconds (1 hour and 18 minutes) to 8 seconds. Differential Revision: https://reviews.llvm.org/D102734
-
- May 18, 2021
-
-
River Riddle authored
This is a hook that allows for providing custom initialization of the pattern, e.g. if it has bounded recursion, setting the debug name, etc., without needing to define a custom constructor. A non-virtual hook was chosen to avoid polluting the vtable with code that we really just want to be inlined when constructing the pattern. The alternative to this would be to just define a constructor for each pattern, this unfortunately creates a lot of otherwise unnecessary boiler plate for a lot of patterns and a hook provides a much simpler/cleaner interface for the very common case. Differential Revision: https://reviews.llvm.org/D102440
-
River Riddle authored
The version is used by LSP clients to ignore stale diagnostics, and can be used in a followup to help verify incremental changes. Differential Revision: https://reviews.llvm.org/D102644
-
Chris Lattner authored
The FIRRTL dialect in CIRCT uses inherently signful types, and APSInt is the best way to model that. Add a couple of helpers that make it easier to work with an IntegerAttr that carries a sign. This follows the example of getZExt() and getSExt() which assert when the underlying type of the attribute is unexpected. In this case we assert fail when the underlying type of the attribute is signless. This is strictly additive, so it is NFC. It is tested in the CIRCT repo. Differential Revision: https://reviews.llvm.org/D102701
-
Chris Lattner authored
This adds the ability to specify a location when creating BlockArguments. Notably Value::getLoc() will return this correctly, which makes diagnostics more precise (e.g. the example in test-legalize-type-conversion.mlir). This is currently optional to avoid breaking any existing code - if absent, the BlockArgument defaults to using the location of its enclosing operation (preserving existing behavior). The bulk of this change is plumbing location tracking through the parser and printer to make sure it can round trip (in -mlir-print-debuginfo mode). This is complete for generic operations, but requires manual adoption for custom ops. I added support for function-like ops to round trip their argument locations - they print correctly, but when parsing the locations are dropped on the floor. I intend to fix this, but it will require more invasive plumbing through "function_like_impl" stuff so I think it best to split it out to its own patch. Differential Revision: https://reviews.llvm.org/D102567
-
Vinayaka Bandishti authored
During affine loop fusion, create private memrefs for escaping memrefs too under the conditions that: -- the source is not removed after fusion, and -- the destination does not write to the memref. This creates more fusion opportunities as illustrated in the test case. Reviewed By: bondhugula, ayzhuang Differential Revision: https://reviews.llvm.org/D102604
-
Adrian Kuegel authored
Now that complex constants are supported, we can also fold. Differential Revision: https://reviews.llvm.org/D102616
-
Rob Suderman authored
Comment was poorly written. Changed to bail on contradictory information in the double round. Reviewed By: NatashaKnk Differential Revision: https://reviews.llvm.org/D102651
-
- May 17, 2021
-
-
Jacques Pienaar authored
- Enables inferring return type for ConstShape, takes into account valid return types; - The compatible return type function could be reused, leaving that for next use refactoring; Differential Revision: https://reviews.llvm.org/D102182
-
Aart Bik authored
The experimental flag for "inplace" bufferization in the sparse compiler can be replaced with the new inplace attribute. This gives a uniform way of expressing the more efficient way of bufferization. Reviewed By: bixia Differential Revision: https://reviews.llvm.org/D102538
-
Chris Lattner authored
Differential Revision: https://reviews.llvm.org/D102636
-
Rob Suderman authored
Initial version of pooling assumed normalization was accross all elements equally. TOSA actually requires the noramalization is perform by how many elements were summed (edges are not artifically dimmer). Updated the lowering to reflect this change with corresponding tests. Reviewed By: NatashaKnk Differential Revision: https://reviews.llvm.org/D102540
-
Valentin Clement authored
Translate ExitDataOp with delete and copyout operands to runtime call. This is done in a similar way as D101504. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D102381
-
Matthias Springer authored
Broadcast dimensions of vector transfer ops are always in-bounds. This is consistent with the fact that the starting position of a transfer is always in-bounds. Differential Revision: https://reviews.llvm.org/D102566
-
Adrian Kuegel authored
This reverts commit 6b49834d. Some tests fail.
-
Adrian Kuegel authored
Now that complex constants are supported, we can also fold. Differential Revision: https://reviews.llvm.org/D102609
-
Adam Paszke authored
At the moment `MlirModule`s can be converted to `MlirOperation`s, but not the other way around (at least not without going around the C API). This makes it impossible to e.g. run passes over a `ModuleOp` created through `mlirOperationCreate`. Reviewed By: nicolasvasilache, mehdi_amini Differential Revision: https://reviews.llvm.org/D102497
-
Julian Gross authored
Splitting the memref dialect lead to an introduction of several dependencies to avoid compilation issues. The canonicalize pass also depends on the memref dialect, but it shouldn't. This patch resolves the dependencies and the unintuitive includes are removed. However, the dependency moves to the constructor of the std dialect. Differential Revision: https://reviews.llvm.org/D102060
-