Integrate LLVM to llvm/llvm-project@bb315b7e2953 (#24666)
Cherry-picked https://github.com/iree-org/iree/pull/24634 (forward
InnerTileAlignment overloads on IREE TilingInterface ops) for
https://github.com/llvm/llvm-project/pull/204007.
Regenerated CAPI exports
---------
Signed-off-by: Tobias Fuchs <fuchs@roofline.ai>
Co-authored-by: Ege Beysel <beyselege@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
diff --git a/compiler/src/iree/compiler/API/api_exports.c b/compiler/src/iree/compiler/API/api_exports.c
index b56f439..9b1be67 100644
--- a/compiler/src/iree/compiler/API/api_exports.c
+++ b/compiler/src/iree/compiler/API/api_exports.c
@@ -341,12 +341,16 @@
extern void mlirConversionPatternGetTypeConverter();
extern void mlirConversionPatternRewriterAsPatternRewriter();
extern void mlirConversionPatternRewriterConvertRegionTypes();
+extern void mlirConversionTargetAddDynamicallyLegalDialect();
+extern void mlirConversionTargetAddDynamicallyLegalOp();
extern void mlirConversionTargetAddIllegalDialect();
extern void mlirConversionTargetAddIllegalOp();
extern void mlirConversionTargetAddLegalDialect();
extern void mlirConversionTargetAddLegalOp();
extern void mlirConversionTargetCreate();
extern void mlirConversionTargetDestroy();
+extern void mlirConversionTargetMarkOpRecursivelyLegal();
+extern void mlirConversionTargetMarkUnknownOpDynamicallyLegal();
extern void mlirCreateExternalPass();
extern void mlirDenseArrayAttrGetTypeID();
extern void mlirDenseArrayGetNumElements();
@@ -1537,12 +1541,16 @@
x += (uintptr_t)&mlirConversionPatternGetTypeConverter;
x += (uintptr_t)&mlirConversionPatternRewriterAsPatternRewriter;
x += (uintptr_t)&mlirConversionPatternRewriterConvertRegionTypes;
+ x += (uintptr_t)&mlirConversionTargetAddDynamicallyLegalDialect;
+ x += (uintptr_t)&mlirConversionTargetAddDynamicallyLegalOp;
x += (uintptr_t)&mlirConversionTargetAddIllegalDialect;
x += (uintptr_t)&mlirConversionTargetAddIllegalOp;
x += (uintptr_t)&mlirConversionTargetAddLegalDialect;
x += (uintptr_t)&mlirConversionTargetAddLegalOp;
x += (uintptr_t)&mlirConversionTargetCreate;
x += (uintptr_t)&mlirConversionTargetDestroy;
+ x += (uintptr_t)&mlirConversionTargetMarkOpRecursivelyLegal;
+ x += (uintptr_t)&mlirConversionTargetMarkUnknownOpDynamicallyLegal;
x += (uintptr_t)&mlirCreateExternalPass;
x += (uintptr_t)&mlirDenseArrayAttrGetTypeID;
x += (uintptr_t)&mlirDenseArrayGetNumElements;
diff --git a/compiler/src/iree/compiler/API/api_exports.def b/compiler/src/iree/compiler/API/api_exports.def
index ce8965f..306a79c 100644
--- a/compiler/src/iree/compiler/API/api_exports.def
+++ b/compiler/src/iree/compiler/API/api_exports.def
@@ -331,12 +331,16 @@
mlirConversionPatternGetTypeConverter
mlirConversionPatternRewriterAsPatternRewriter
mlirConversionPatternRewriterConvertRegionTypes
+ mlirConversionTargetAddDynamicallyLegalDialect
+ mlirConversionTargetAddDynamicallyLegalOp
mlirConversionTargetAddIllegalDialect
mlirConversionTargetAddIllegalOp
mlirConversionTargetAddLegalDialect
mlirConversionTargetAddLegalOp
mlirConversionTargetCreate
mlirConversionTargetDestroy
+ mlirConversionTargetMarkOpRecursivelyLegal
+ mlirConversionTargetMarkUnknownOpDynamicallyLegal
mlirCreateExternalPass
mlirDenseArrayAttrGetTypeID
mlirDenseArrayGetNumElements
diff --git a/compiler/src/iree/compiler/API/api_exports.ld b/compiler/src/iree/compiler/API/api_exports.ld
index 3ee4fc9..c129fe7 100644
--- a/compiler/src/iree/compiler/API/api_exports.ld
+++ b/compiler/src/iree/compiler/API/api_exports.ld
@@ -332,12 +332,16 @@
mlirConversionPatternGetTypeConverter;
mlirConversionPatternRewriterAsPatternRewriter;
mlirConversionPatternRewriterConvertRegionTypes;
+ mlirConversionTargetAddDynamicallyLegalDialect;
+ mlirConversionTargetAddDynamicallyLegalOp;
mlirConversionTargetAddIllegalDialect;
mlirConversionTargetAddIllegalOp;
mlirConversionTargetAddLegalDialect;
mlirConversionTargetAddLegalOp;
mlirConversionTargetCreate;
mlirConversionTargetDestroy;
+ mlirConversionTargetMarkOpRecursivelyLegal;
+ mlirConversionTargetMarkUnknownOpDynamicallyLegal;
mlirCreateExternalPass;
mlirDenseArrayAttrGetTypeID;
mlirDenseArrayGetNumElements;
diff --git a/compiler/src/iree/compiler/API/api_exports.macos.lst b/compiler/src/iree/compiler/API/api_exports.macos.lst
index d0ac36c..bbcfd89 100644
--- a/compiler/src/iree/compiler/API/api_exports.macos.lst
+++ b/compiler/src/iree/compiler/API/api_exports.macos.lst
@@ -330,12 +330,16 @@
_mlirConversionPatternGetTypeConverter
_mlirConversionPatternRewriterAsPatternRewriter
_mlirConversionPatternRewriterConvertRegionTypes
+_mlirConversionTargetAddDynamicallyLegalDialect
+_mlirConversionTargetAddDynamicallyLegalOp
_mlirConversionTargetAddIllegalDialect
_mlirConversionTargetAddIllegalOp
_mlirConversionTargetAddLegalDialect
_mlirConversionTargetAddLegalOp
_mlirConversionTargetCreate
_mlirConversionTargetDestroy
+_mlirConversionTargetMarkOpRecursivelyLegal
+_mlirConversionTargetMarkUnknownOpDynamicallyLegal
_mlirCreateExternalPass
_mlirDenseArrayAttrGetTypeID
_mlirDenseArrayGetNumElements
diff --git a/compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/TilingInterfaceImpl.cpp b/compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/TilingInterfaceImpl.cpp
index 6eb1c3b..ecd3166 100644
--- a/compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/TilingInterfaceImpl.cpp
+++ b/compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/TilingInterfaceImpl.cpp
@@ -161,4 +161,12 @@
return success();
}
+// Only `linalg.pack/unpack` ops utilize the InnerTileAlignment parameter. We
+// forward to the overload without the parameter.
+FailureOr<TilingResult> InnerTiledOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
} // namespace mlir::iree_compiler::IREE::Codegen
diff --git a/compiler/src/iree/compiler/Dialect/LinalgExt/IR/TilingInterfaceImpl.cpp b/compiler/src/iree/compiler/Dialect/LinalgExt/IR/TilingInterfaceImpl.cpp
index d51bf6e..96fa8b7 100644
--- a/compiler/src/iree/compiler/Dialect/LinalgExt/IR/TilingInterfaceImpl.cpp
+++ b/compiler/src/iree/compiler/Dialect/LinalgExt/IR/TilingInterfaceImpl.cpp
@@ -4005,6 +4005,216 @@
// tensor::ConcatOp
//===---------------------------------------------------------------------===//
+// TilingInterface overloads with InnerTileAlignment parameter.
+// Only `linalg.pack/unpack` operations utilize this parameter, therefore,
+// these forward to the overloads without the parameter.
+FailureOr<TilingResult> ArgCompareOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> AttentionOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> CustomOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> ExpReductionOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> FftOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> GatherOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> MapLoadOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> MapStoreOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> OnlineAttentionOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> ScanOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> ScatterOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> SortOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> TopkOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> WinogradInputTransformOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> ArgCompareOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> AttentionOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> ExpReductionOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> GatherOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> MapLoadOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> Im2colOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> TopkV2Op::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> WinogradFilterTransformOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> WinogradOutputTransformOp::getTiledImplementation(
+ OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementation(builder, offsets, sizes);
+}
+
+FailureOr<TilingResult> Im2colOp::generateResultTileValue(
+ OpBuilder &builder, unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) {
+ return generateResultTileValue(builder, resultNumber, offsets, sizes);
+}
+
+FailureOr<TilingResult> MapLoadOp::getTiledImplementationFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementationFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes);
+}
+
+LogicalResult MapLoadOp::getIterationDomainTileFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ SmallVectorImpl<OpFoldResult> &iterDomainOffsets,
+ SmallVectorImpl<OpFoldResult> &iterDomainSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getIterationDomainTileFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes, iterDomainOffsets,
+ iterDomainSizes);
+}
+
+FailureOr<TilingResult> MapStoreOp::getTiledImplementationFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementationFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes);
+}
+
+LogicalResult MapStoreOp::getIterationDomainTileFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ SmallVectorImpl<OpFoldResult> &iterDomainOffsets,
+ SmallVectorImpl<OpFoldResult> &iterDomainSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getIterationDomainTileFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes, iterDomainOffsets,
+ iterDomainSizes);
+}
+
+FailureOr<TilingResult> ScatterOp::getTiledImplementationFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getTiledImplementationFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes);
+}
+
+LogicalResult ScatterOp::getIterationDomainTileFromOperandTiles(
+ OpBuilder &b, ArrayRef<unsigned> operandNumbers,
+ ArrayRef<SmallVector<OpFoldResult>> allOffsets,
+ ArrayRef<SmallVector<OpFoldResult>> allSizes,
+ SmallVectorImpl<OpFoldResult> &iterDomainOffsets,
+ SmallVectorImpl<OpFoldResult> &iterDomainSizes,
+ ArrayRef<mlir::InnerTileAlignment>) {
+ return getIterationDomainTileFromOperandTiles(b, operandNumbers, allOffsets,
+ allSizes, iterDomainOffsets,
+ iterDomainSizes);
+}
+
namespace {
struct ConcatOpTilingExternalModel
: TilingInterface::ExternalModel<ConcatOpTilingExternalModel,
@@ -4030,6 +4240,20 @@
return getTiledImplementation(op, builder, offsets, sizes);
}
+ FailureOr<TilingResult> getTiledImplementation(
+ Operation *op, OpBuilder &builder, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes, ArrayRef<mlir::InnerTileAlignment>) const {
+ return getTiledImplementation(op, builder, offsets, sizes);
+ }
+
+ FailureOr<TilingResult>
+ generateResultTileValue(Operation *op, OpBuilder &builder,
+ unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
+ ArrayRef<OpFoldResult> sizes,
+ ArrayRef<mlir::InnerTileAlignment>) const {
+ return generateResultTileValue(op, builder, resultNumber, offsets, sizes);
+ }
+
LogicalResult
getResultTilePosition(Operation *op, OpBuilder &builder,
unsigned resultNumber, ArrayRef<OpFoldResult> offsets,
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 9c51ed3..bb315b7 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 9c51ed38f1e25a5a9c3c766ed1b2b8198021b5dd
+Subproject commit bb315b7e2953f02e1c8996b110752610e2187ce0