13216 Commits

Author SHA1 Message Date
Mehdi Amini
8f4320cf1d Fix MLIR Build with some version of GCC
mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp:67:30: error: use 'template' keyword to treat 'dyn_cast_or_null' as a dependent template name
                            .dyn_cast_or_null<arith::FastMathFlagsAttr>();
                             ^
                             template
2022-10-26 23:22:44 +00:00
Quentin Colombet
55d08a8670 [mlir][MemRefToLLVM] Lower extract_strided_metadata
The `extract_strided_metadata` operation literally breaks down a memory
descriptor into its different components.
Teach the MemRefToLLVM conversion framework this fact.

Differential Revision: https://reviews.llvm.org/D136304
2022-10-26 21:29:35 +00:00
Jeremy Furtek
b56e65d318 [mlir][arith] Initial support for fastmath flag attributes in the Arithmetic dialect (v2)
This diff adds initial (partial) support for "fastmath" attributes for floating
point operations in the arithmetic dialect. The "fastmath" attributes are
implemented using a default-valued bit enum. The defined flags currently mirror
the fastmath flags in the LLVM dialect (and in LLVM itself). Extending the
set of flags (if necessary) is left as a future task.

In this diff:
- Definition of FastMathAttr as a custom attribute in the Arithmetic dialect
  that inherits from the EnumAttr class.
- Definition of ArithFastMathInterface, which is an interface that is
  implemented by operations that have an arith::fastmath attribute.
- Declaration of a default-valued fastmath attribute for unary and (some) binary
  floating point operations in the Arithmetic dialect.
- Conversion code to lower arithmetic fastmath flags to LLVM fastmath flags

NOT in this diff (but planned or currently in progress):
- Documentation of flag meanings
- Addition of FastMathAttr attributes to other dialects that might lower to the
  Arithmetic dialect (e.g. Math and Complex)
- Folding/rewrite implementations that are enabled by fastmath flags
- Specification of fastmath values from Python bindings (pending other in-
  progress diffs)

Reviewed By: mehdi_amini, vzakhari

Differential Revision: https://reviews.llvm.org/D126305
2022-10-26 11:56:16 -07:00
bixia1
14504cae9a [mlir][sparse] Extend sparse_tensor.push_back to allow push_back a value n times.
Reviewed By: aartbik, Peiming

Differential Revision: https://reviews.llvm.org/D136653
2022-10-26 09:21:03 -07:00
jackalcooper
5fcf3e8b4e [mlir][spirv] Flip createConvertGPUToSPIRVPass mapMemorySpace default
Some down-stream libraries only have access to CAPI, setting
default value of mapMemorySpace to true will help them convert IR
to SPIR-V.

Reviewed By: antiagainst

Differential Revision: https://reviews.llvm.org/D136739
2022-10-26 11:09:28 -04:00
Tobias Gysi
606634967d [mlir][llvm] Tighten LLVM dialect intrinsic type constraints.
The revision specifies more precise argument and result type
constraints for many of the llvm intrinsics. Additionally, add
tests to verify intrinsics with invalid arguments/result result
in a verification error.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D136360
2022-10-26 11:27:06 +03:00
Peiming Liu
b0f8057e4c [mlir][sparse] use loop emitter to generate loop in sparsification
Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D136185
2022-10-26 00:27:56 +00:00
Alexander Belyaev
c34de60ea3 Revert "[mlir] Add vectorization tests for linalg.map,reduce,transpose."
This reverts commit 2f88268fc109a1845285e125dfc19b8b75c137a0.

I will take a look what's happening with vectorization.mlir and why it
works on my machine and not upstream. Reverting for now.
2022-10-25 19:18:02 +02:00
Alexander Belyaev
451b1ff376 [mlir] Add lower-to-loops tests for linalg.map/reduce/transpose.
Differential Revision: https://reviews.llvm.org/D136691
2022-10-25 17:10:43 +02:00
Alexander Belyaev
2f88268fc1 [mlir] Add vectorization tests for linalg.map,reduce,transpose.
Differential Revision: https://reviews.llvm.org/D136688
2022-10-25 17:10:04 +02:00
Johannes de Fine Licht
14de3d5c63 [mlir][llvm] Don't return a dangling reference in getCallableResults().
Use the `getReturnTypes()` API (which returns an `ArrayRef<Type>`)
rather than the `getReturnType()` API (which returns a `Type`) to avoid
returning a dangling reference in `LLVMFuncOp::getCallableResults()`.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D136669
2022-10-25 16:05:33 +03:00
River Riddle
9af92ed8a0 [mlir:LLVM] Rewrite the LLVMIR export to use the debug info attributes
This has been a long standing TODO, and actually enables users to generate
debug information for LLVM using the LLVM dialect; as opposed to our
dummy placeholder that generated just enough for line table information.

Differential Revision: https://reviews.llvm.org/D136543
2022-10-24 22:31:41 -07:00
Sanjoy Das
49e2d361c9 Add a document on side effects & speculation in MLIR
Differential Revision: https://reviews.llvm.org/D136316
2022-10-24 22:03:29 -07:00
Nick Kreeger
18066b52c2 [mlir] Update Location to use new casting infra
This allows for using the llvm namespace cast methods instead of the ones on the Location class. The Location class method are kept for now, but we'll want to remove these eventually (with a really long lead time).

Related change: https://reviews.llvm.org/D135870

Differential Revision: https://reviews.llvm.org/D136520
2022-10-24 14:32:12 -05:00
Manish Gupta
9c68f8ea66 [mlir][NVGPU] Documentation only update to nvgpu dialect (NFC).
Differential Revision: https://reviews.llvm.org/D136313
2022-10-24 12:13:34 -07:00
Peiming Liu
5f5e0199c1 [mlir][sparse] add some APIs for merger to query the tensor id for output tensor and synthetic tensor.
Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D136630
2022-10-24 18:49:53 +00:00
rkayaith
d30727fb6c [mlir][Translation] Make commandline option registration optional
This moves the commandline option registration into its own function, so
that users can register translations without registering the options.

Reviewed By: cota

Differential Revision: https://reviews.llvm.org/D136561
2022-10-24 14:40:07 -04:00
Michał Górny
12281099dc [mlir] Fix INSTALL_INTERFACE path for MLIRSparseTensorEnums
Fix INSTALL_INTERFACE path for exported MLIRSparseTensorEnums target
to include the include directory.  Otherwise, CMake attempts to find it
relatively to CMAKE_INSTALL_PREFIX rather than the include directory,
resulting in flang failing to configure with the following error:

    CMake Error at /usr/lib/llvm/16/lib64/cmake/llvm/AddLLVM.cmake:581 (add_library):
      Cannot find source file:

        /usr/lib/llvm/16/mlir/Dialect/SparseTensor/IR/Enums.h

      Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
      .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc
    Call Stack (most recent call first):
      cmake/modules/AddFlang.cmake:64 (llvm_add_library)
      lib/Lower/CMakeLists.txt:3 (add_flang_library)

Differential Revision: https://reviews.llvm.org/D136590
2022-10-24 20:27:40 +02:00
Mahesh Ravishankar
94b8469a88 [mlir][Tensor] Add a helper build method for pad operations with constant padding.
Drop the `createPadScalarOp` from Utils.h since it is a duplicate of
the `build` method added here.

Differential Revision: https://reviews.llvm.org/D136493
2022-10-24 18:11:53 +00:00
Peiming Liu
bca2b14a59 [mlir][sparse] fix bufferizableOpInterface for InsertOp
Address comments in D136372

Reviewed By: aartbik, springerm

Differential Revision: https://reviews.llvm.org/D136510
2022-10-24 16:45:21 +00:00
Adrian Kuegel
d84e4f0829 [mlir] Apply ClangTidy performance fix (NFC) 2022-10-24 15:24:42 +02:00
Matthias Springer
c9b3638126 [mlir][scf][bufferize] Fix bufferizesToMemoryRead with 0 loop iterations
There was a bug in scf.for loop bufferization that could lead to a missing buffer copy (alloc was there, but not the copy).

Differential Revision: https://reviews.llvm.org/D135053
2022-10-24 14:34:41 +02:00
Benjamin Maxwell
fc28971fb9 Add nocapture to pointer parameters of masked stores/loads
The lack of this attribute (particularly on the load intrinsics)
prevented InstCombine from optimizing away allocas and memcpys
for arrays that could be read directly from rodata.

This now also includes a new test to check the masked load/store
intrinsics have the expected attributes (specifically nocapture).

Differential Revision: https://reviews.llvm.org/D135656
2022-10-24 11:15:55 +00:00
Matthias Springer
b169643f3a [mlir][interfaces] Remove getDestinationOperands from TilingInterface
`getDestinationOperands` was almost a duplicate of `DestinationStyleOpInterface::getOutputOperands`. Now that the interface has been moved to mlir/Interfaces, it is no longer needed.

Differential Revision: https://reviews.llvm.org/D136240
2022-10-24 09:26:19 +02:00
River Riddle
3bef1e0f4c [mlir:LLVM] Add attribute/op definitions for debug info
This adds a subset of the necessary metadata for defining
debug info in the LLVM dialect. It doesn't import everything,
but just enough to start actually generating LLVM debug info
the expected way. Export/Import to LLVMIR will be added in a
followup.

Differential Revision: https://reviews.llvm.org/D136542
2022-10-23 23:59:55 -07:00
River Riddle
c8496d292e [mlir] Refactor alias generation to support nested aliases
We currently only support one level of aliases, which isn't great
in situations where an attribute/type can have multiple duplicated
components nested within it(e.g. debuginfo metadata). This commit
refactors alias generation to support nested aliases, which requires
changing alias grouping to take into account the depth of child
aliases, to ensure that attributes/types aren't printed before the
aliases they use.

The only real user facing change here was that we no longer print
0 as an alias suffix, which would be unnecessarily expensive to keep
in the new alias generation method (and isn't that valuable of a
behavior to preserve).

Differential Revision: https://reviews.llvm.org/D136541
2022-10-23 23:59:55 -07:00
River Riddle
82c6f10052 [mlir] Better handling for bit groups in enum parser/printer
We currently wrap all multi-bit cases with a string, but this is
overly restrictive. This commit refactors to use keywords when
we know they are valid, and only degrade to string when the validity
of the bitgroup is unknown.

Differential Revision: https://reviews.llvm.org/D136540
2022-10-23 23:59:55 -07:00
Kazu Hirata
0dce4cc34e [mlir] Fix a warning
This patch fixes:

  mlir/include/mlir/IR/PatternMatch.h:1092:63: warning: parameter
  ‘values’ set but not used [-Wunused-but-set-parameter]
2022-10-23 23:24:59 -07:00
Michał Górny
f3713a9047 [mlir] Support overriding LLVM_LIT_ARGS in standalone builds
Introduce LLVM_LIT_ARGS cache variable in standalone builds, to let
the caller override the options passed by LLVM to lit calls.  Once
defined, this is automatically handled by LLVM's cmake logic.

Differential Revision: https://reviews.llvm.org/D136556
2022-10-24 05:14:51 +02:00
Kazu Hirata
430cbd5401 [mlir] Fix a warning
This patch fixes:

  mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp:128:10: warning:
  variable ‘llvm2xI32’ set but not used [-Wunused-but-set-variable]

The last use of llvm2xI32 was removed on July 6, 2022 in commit
63295622491a31eaccb6c534ba5caa836beb843f.
2022-10-23 10:11:20 -07:00
Benjamin Kramer
6e920e8881 [spirv] Remove unused include 2022-10-23 13:24:16 +02:00
Kazu Hirata
b34ea58277 [mlir] Fix a warning
This patch fixes:

  mlir/include/mlir/Tools/mlir-translate/Translation.h:93:35: warning:
  extra ‘;’ [-Wpedantic]
2022-10-23 01:03:56 -07:00
Nirvedh Meshram
c441070665 [mlir][spirv] Add conversion from GPU WMMA ops to SPIRV Cooperative matrix
Reviewed By: ThomasRaoux

Differential Revision: https://reviews.llvm.org/D136521
2022-10-22 18:29:40 -07:00
Tomás Longeri
0580901bbb Fix #58322: Handlers for debug actions with equal parameter types must not override each other
Also clean up redundant public access specifiers.

Reviewed By: mehdi_amini, rriddle

Differential Revision: https://reviews.llvm.org/D135924
2022-10-22 14:18:00 -07:00
Christopher Bate
446981bdb6 [mlir][tensor] ExtractSliceFromReshape: handle collapsing of unit dim edge cases
Prior to this change, the "ExtractSliceFromReshape" pattern would transform

```
%collapsed = tensor.collapse_shape %input [[0, 1], [2]]
                : tensor<1x11x100xf32> into tensor<11x100xf32>
%slice = tensor.extract_slice %collapsed [%offt, 0] [%size, 100] [1, 1]
                : tensor<11x100xf32> to tensor<?x100xf32>
```

into a loop that iterated over the range `%size - %offt`, that pieces
together multiple sub-slices of `%input` along the first dimension. This
is correct but obviously inefficient. The technical condition is that
collapsing at-most-one non-unit dimension of `%src` will not result in a
subsequent slice along the corresponding dimension of `%collapsed`
mapping across discontinuities in the index space of `%src`. Thus, the
definition of a "linearized dimension" (from the perspective of
`tensor.collapse_shape`) is updated to reflect this condition.

The transform will now generate

```
%slice = tensor.extract_slice %input [0, %offt, 0][1, %size, 100] [1, 1]
            : tensor<1x11x100xf32> to tensor<1x?x100xf32>
%result = tensor.collapse_shape [[0, 1], [2]]
            : tensor<1x?x100xf32> to tensor<?x100xf32>
```

which can be further canonicalized.

Additional tests are added to check this family of edge cases.

Reviewed By: ThomasRaoux

Differential Revision: https://reviews.llvm.org/D135726
2022-10-22 13:29:34 -06:00
Ivan Butygin
eff54060f4 [mlir][nfc] Fully spell mlir typename in generated code.
Differential Revision: https://reviews.llvm.org/D136534
2022-10-22 20:27:41 +02:00
Hanhan Wang
00767cb452 [mlir] Delete dup code and use unified methods.
The foldMemRefCast method is defined in memref namespace; the
foldTensorCast method is defined in tensor namespace. This revision
deletes the dup code and use the unified methods.

Reviewed By: dcaballe

Differential Revision: https://reviews.llvm.org/D136379
2022-10-21 16:51:44 -07:00
Aart Bik
b430a352ef [mlir][sparse] use straightline and loop to insert into tensor
This exposed a missing type conversion for codegen

Reviewed By: Peiming

Differential Revision: https://reviews.llvm.org/D136286
2022-10-21 16:17:15 -07:00
River Riddle
0b1fe47499 [mlir:LLVM][NFC] Cleanup attribute/enum definitions
Enum definitions are currently spread throughout the op definitions
file, making it difficult to reason about both where they are, and
where to add new ones when necessary. The attribute definitions are
in a similarish case, where while they have a dedicated .td file, there
definitions/declarations are generated in the main LLVMDialect source
files. This makes it difficult to reason about how to cleanly add new
attributes/enums.

This commit adds a dedicated LLVMEnums.td file for enum definitions,
cleans up the AttrDefs.td file, and adds a new LLVMAttrs.cpp/.h file to
home enum/attr definitions moving forward. This makes it much cleaner to
add new attributes/enums to the LLVM dialect.

Differential Revision: https://reviews.llvm.org/D136409
2022-10-21 15:32:36 -07:00
River Riddle
1da1141830 [mlir] Implement the SubElement interfaces for the builtin locations
This enables find/replace of nested components for location attributes.

Differential Revision: https://reviews.llvm.org/D136408
2022-10-21 15:32:36 -07:00
River Riddle
29bb0b5e1d [mlir] Generate parser/printers for enums
This greatly simplifies composing enums in attribute/type printers,
which currently reimplement these functions as needed.

Differential Revision: https://reviews.llvm.org/D136407
2022-10-21 15:32:36 -07:00
wren romano
d8cb5d3c6e [mlir][sparse] Refining the IR/CMakeLists.txt (followup to D136477)
Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D136506
2022-10-21 15:23:50 -07:00
Jeff Niu
8dfc6042e9 [mlir][llvm] Allow literal structs to replaceImmediateSubElements
SubElementInterfaces forbids all mutable types and attributes from
implementing `replaceImmediateSubElements`. However, this prohibits
literal structs, which are immutable, from implementing that function.
This patch defers the decision on whether to support
`replaceImmediateSubElements` to the individual types/attributes.

Depends on D136505

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D136507
2022-10-21 15:13:12 -07:00
Jeff Niu
6144042c27 [mlir][llvm] More LLVMFixed/ScalableVectorType to TypeDef
This keeps the current parser, however, since the mnemonic `vec` is
overloaded for both of these types.

Depends on D136499

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D136505
2022-10-21 15:13:11 -07:00
Jeff Niu
877977bba9 [mlir][llvm] Fix replaceImmediateSubElements on LLVMPointerType
This method was assearting on opaque pointers because the element is
null.

Depends on D136498

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D136499
2022-10-21 15:13:09 -07:00
Jeff Niu
a9bde16ba5 [mlir][llvm] Move LLVMPointerType to TypeDef
Depends on D136485

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D136498
2022-10-21 15:13:08 -07:00
Jeff Niu
d9592444ce [mlir][llvm] Move LLVMFunctionType to a TypeDef
Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D136485
2022-10-21 15:13:07 -07:00
Murali Vijayaraghavan
e78247112a Fixed CMakeLists.txt to export mlir/include/mlir/Dialenct/SparseTensor/IR/Enums.h correctly for installing MLIRSparseTensorEnums as a library in other projects using MLIR
Differential Revision: https://reviews.llvm.org/D136477
2022-10-21 21:47:02 +00:00
Peiming Liu
d3f5f33067 [mlir][scf] support 1:N type conversion for scf.for.
scf.for used to only support 1:1 type conversion, this patch add support for 1:N type conversion.

Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D136314
2022-10-21 21:11:55 +00:00
Jeff Niu
dc63ca78f7 [mlir][sparse] Fix build warning (NFC) 2022-10-21 13:13:07 -07:00