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