Integrate LLVM to llvm/llvm-project@9c51ed38f1e2 (#24662)

Adapted compiler/src/iree/compiler/Codegen/Common/FoldTensorExtractOp.td
to specify invariant argument to memref.load, required due to:
f9f52bbcbc55 [mlir][memref] Add invariant attribute to memref.load
(#206197)
    
Re-generating the CAPI export files was required due to:
9889e626983f [mlir-c] Add IRMapping C API bindings (#206146)

Setting the module's targget triple in ROCM target due to:
00a6186128d3 AMDGPU: Prefer getting the triple from the module over the
TargetMachine (#206055)

Finding the LLVM commits and adapting the IREE code has been assistend
by Claude Code. The changes have been reviewed manually.

Signed-off-by: Stefan Schuermans <schuermans@roofline.ai>
diff --git a/compiler/plugins/target/ROCM/ROCMTarget.cpp b/compiler/plugins/target/ROCM/ROCMTarget.cpp
index 55b077f..32e74b8 100644
--- a/compiler/plugins/target/ROCM/ROCMTarget.cpp
+++ b/compiler/plugins/target/ROCM/ROCMTarget.cpp
@@ -856,6 +856,11 @@
       // on the MLIR module and propagated through MLIR->LLVM IR translation.
       if (!useSPIRV) {
         llvmModule->setDataLayout(targetMachine->createDataLayout());
+        // The AMDGPU AsmPrinter now reads the target triple from the module
+        // (not the TargetMachine) to decide whether to set up HSA metadata
+        // streaming; without this the module triple is empty and the printer
+        // null-derefs HSAMetadataStream. See llvm-project@00a6186128d3.
+        llvmModule->setTargetTriple(targetMachine->getTargetTriple());
 
         // Let the backend know what code object version we're compiling for.
         // This insulates us from changes to the default code object version
diff --git a/compiler/src/iree/compiler/API/api_exports.c b/compiler/src/iree/compiler/API/api_exports.c
index f672810..b56f439 100644
--- a/compiler/src/iree/compiler/API/api_exports.c
+++ b/compiler/src/iree/compiler/API/api_exports.c
@@ -548,6 +548,24 @@
 extern void mlirGreedyRewriteDriverConfigSetRegionSimplificationLevel();
 extern void mlirGreedyRewriteDriverConfigSetStrictness();
 extern void mlirGreedyRewriteDriverConfigSetUseTopDownTraversal();
+extern void mlirIRMappingClear();
+extern void mlirIRMappingContainsBlock();
+extern void mlirIRMappingContainsOperation();
+extern void mlirIRMappingContainsValue();
+extern void mlirIRMappingCreate();
+extern void mlirIRMappingDestroy();
+extern void mlirIRMappingEraseBlock();
+extern void mlirIRMappingEraseOperation();
+extern void mlirIRMappingEraseValue();
+extern void mlirIRMappingLookupOrDefaultBlock();
+extern void mlirIRMappingLookupOrDefaultOperation();
+extern void mlirIRMappingLookupOrDefaultValue();
+extern void mlirIRMappingLookupOrNullBlock();
+extern void mlirIRMappingLookupOrNullOperation();
+extern void mlirIRMappingLookupOrNullValue();
+extern void mlirIRMappingMapBlock();
+extern void mlirIRMappingMapOperation();
+extern void mlirIRMappingMapValue();
 extern void mlirIRRewriterCreate();
 extern void mlirIRRewriterCreateFromOp();
 extern void mlirIRRewriterDestroy();
@@ -813,6 +831,7 @@
 extern void mlirOpaqueTypeGetName();
 extern void mlirOpaqueTypeGetTypeID();
 extern void mlirOperationClone();
+extern void mlirOperationCloneWithMapping();
 extern void mlirOperationCreate();
 extern void mlirOperationCreateParse();
 extern void mlirOperationDestroy();
@@ -945,6 +964,7 @@
 extern void mlirRewriterBaseClearInsertionPoint();
 extern void mlirRewriterBaseClone();
 extern void mlirRewriterBaseCloneRegionBefore();
+extern void mlirRewriterBaseCloneWithMapping();
 extern void mlirRewriterBaseCloneWithoutRegions();
 extern void mlirRewriterBaseCreateBlockBefore();
 extern void mlirRewriterBaseEraseBlock();
@@ -1724,6 +1744,24 @@
   x += (uintptr_t)&mlirGreedyRewriteDriverConfigSetRegionSimplificationLevel;
   x += (uintptr_t)&mlirGreedyRewriteDriverConfigSetStrictness;
   x += (uintptr_t)&mlirGreedyRewriteDriverConfigSetUseTopDownTraversal;
+  x += (uintptr_t)&mlirIRMappingClear;
+  x += (uintptr_t)&mlirIRMappingContainsBlock;
+  x += (uintptr_t)&mlirIRMappingContainsOperation;
+  x += (uintptr_t)&mlirIRMappingContainsValue;
+  x += (uintptr_t)&mlirIRMappingCreate;
+  x += (uintptr_t)&mlirIRMappingDestroy;
+  x += (uintptr_t)&mlirIRMappingEraseBlock;
+  x += (uintptr_t)&mlirIRMappingEraseOperation;
+  x += (uintptr_t)&mlirIRMappingEraseValue;
+  x += (uintptr_t)&mlirIRMappingLookupOrDefaultBlock;
+  x += (uintptr_t)&mlirIRMappingLookupOrDefaultOperation;
+  x += (uintptr_t)&mlirIRMappingLookupOrDefaultValue;
+  x += (uintptr_t)&mlirIRMappingLookupOrNullBlock;
+  x += (uintptr_t)&mlirIRMappingLookupOrNullOperation;
+  x += (uintptr_t)&mlirIRMappingLookupOrNullValue;
+  x += (uintptr_t)&mlirIRMappingMapBlock;
+  x += (uintptr_t)&mlirIRMappingMapOperation;
+  x += (uintptr_t)&mlirIRMappingMapValue;
   x += (uintptr_t)&mlirIRRewriterCreate;
   x += (uintptr_t)&mlirIRRewriterCreateFromOp;
   x += (uintptr_t)&mlirIRRewriterDestroy;
@@ -1989,6 +2027,7 @@
   x += (uintptr_t)&mlirOpaqueTypeGetName;
   x += (uintptr_t)&mlirOpaqueTypeGetTypeID;
   x += (uintptr_t)&mlirOperationClone;
+  x += (uintptr_t)&mlirOperationCloneWithMapping;
   x += (uintptr_t)&mlirOperationCreate;
   x += (uintptr_t)&mlirOperationCreateParse;
   x += (uintptr_t)&mlirOperationDestroy;
@@ -2121,6 +2160,7 @@
   x += (uintptr_t)&mlirRewriterBaseClearInsertionPoint;
   x += (uintptr_t)&mlirRewriterBaseClone;
   x += (uintptr_t)&mlirRewriterBaseCloneRegionBefore;
+  x += (uintptr_t)&mlirRewriterBaseCloneWithMapping;
   x += (uintptr_t)&mlirRewriterBaseCloneWithoutRegions;
   x += (uintptr_t)&mlirRewriterBaseCreateBlockBefore;
   x += (uintptr_t)&mlirRewriterBaseEraseBlock;
diff --git a/compiler/src/iree/compiler/API/api_exports.def b/compiler/src/iree/compiler/API/api_exports.def
index d859549..ce8965f 100644
--- a/compiler/src/iree/compiler/API/api_exports.def
+++ b/compiler/src/iree/compiler/API/api_exports.def
@@ -538,6 +538,24 @@
   mlirGreedyRewriteDriverConfigSetRegionSimplificationLevel
   mlirGreedyRewriteDriverConfigSetStrictness
   mlirGreedyRewriteDriverConfigSetUseTopDownTraversal
+  mlirIRMappingClear
+  mlirIRMappingContainsBlock
+  mlirIRMappingContainsOperation
+  mlirIRMappingContainsValue
+  mlirIRMappingCreate
+  mlirIRMappingDestroy
+  mlirIRMappingEraseBlock
+  mlirIRMappingEraseOperation
+  mlirIRMappingEraseValue
+  mlirIRMappingLookupOrDefaultBlock
+  mlirIRMappingLookupOrDefaultOperation
+  mlirIRMappingLookupOrDefaultValue
+  mlirIRMappingLookupOrNullBlock
+  mlirIRMappingLookupOrNullOperation
+  mlirIRMappingLookupOrNullValue
+  mlirIRMappingMapBlock
+  mlirIRMappingMapOperation
+  mlirIRMappingMapValue
   mlirIRRewriterCreate
   mlirIRRewriterCreateFromOp
   mlirIRRewriterDestroy
@@ -803,6 +821,7 @@
   mlirOpaqueTypeGetName
   mlirOpaqueTypeGetTypeID
   mlirOperationClone
+  mlirOperationCloneWithMapping
   mlirOperationCreate
   mlirOperationCreateParse
   mlirOperationDestroy
@@ -935,6 +954,7 @@
   mlirRewriterBaseClearInsertionPoint
   mlirRewriterBaseClone
   mlirRewriterBaseCloneRegionBefore
+  mlirRewriterBaseCloneWithMapping
   mlirRewriterBaseCloneWithoutRegions
   mlirRewriterBaseCreateBlockBefore
   mlirRewriterBaseEraseBlock
diff --git a/compiler/src/iree/compiler/API/api_exports.ld b/compiler/src/iree/compiler/API/api_exports.ld
index 564618e..3ee4fc9 100644
--- a/compiler/src/iree/compiler/API/api_exports.ld
+++ b/compiler/src/iree/compiler/API/api_exports.ld
@@ -539,6 +539,24 @@
     mlirGreedyRewriteDriverConfigSetRegionSimplificationLevel;
     mlirGreedyRewriteDriverConfigSetStrictness;
     mlirGreedyRewriteDriverConfigSetUseTopDownTraversal;
+    mlirIRMappingClear;
+    mlirIRMappingContainsBlock;
+    mlirIRMappingContainsOperation;
+    mlirIRMappingContainsValue;
+    mlirIRMappingCreate;
+    mlirIRMappingDestroy;
+    mlirIRMappingEraseBlock;
+    mlirIRMappingEraseOperation;
+    mlirIRMappingEraseValue;
+    mlirIRMappingLookupOrDefaultBlock;
+    mlirIRMappingLookupOrDefaultOperation;
+    mlirIRMappingLookupOrDefaultValue;
+    mlirIRMappingLookupOrNullBlock;
+    mlirIRMappingLookupOrNullOperation;
+    mlirIRMappingLookupOrNullValue;
+    mlirIRMappingMapBlock;
+    mlirIRMappingMapOperation;
+    mlirIRMappingMapValue;
     mlirIRRewriterCreate;
     mlirIRRewriterCreateFromOp;
     mlirIRRewriterDestroy;
@@ -804,6 +822,7 @@
     mlirOpaqueTypeGetName;
     mlirOpaqueTypeGetTypeID;
     mlirOperationClone;
+    mlirOperationCloneWithMapping;
     mlirOperationCreate;
     mlirOperationCreateParse;
     mlirOperationDestroy;
@@ -936,6 +955,7 @@
     mlirRewriterBaseClearInsertionPoint;
     mlirRewriterBaseClone;
     mlirRewriterBaseCloneRegionBefore;
+    mlirRewriterBaseCloneWithMapping;
     mlirRewriterBaseCloneWithoutRegions;
     mlirRewriterBaseCreateBlockBefore;
     mlirRewriterBaseEraseBlock;
diff --git a/compiler/src/iree/compiler/API/api_exports.macos.lst b/compiler/src/iree/compiler/API/api_exports.macos.lst
index b03167c..d0ac36c 100644
--- a/compiler/src/iree/compiler/API/api_exports.macos.lst
+++ b/compiler/src/iree/compiler/API/api_exports.macos.lst
@@ -537,6 +537,24 @@
 _mlirGreedyRewriteDriverConfigSetRegionSimplificationLevel
 _mlirGreedyRewriteDriverConfigSetStrictness
 _mlirGreedyRewriteDriverConfigSetUseTopDownTraversal
+_mlirIRMappingClear
+_mlirIRMappingContainsBlock
+_mlirIRMappingContainsOperation
+_mlirIRMappingContainsValue
+_mlirIRMappingCreate
+_mlirIRMappingDestroy
+_mlirIRMappingEraseBlock
+_mlirIRMappingEraseOperation
+_mlirIRMappingEraseValue
+_mlirIRMappingLookupOrDefaultBlock
+_mlirIRMappingLookupOrDefaultOperation
+_mlirIRMappingLookupOrDefaultValue
+_mlirIRMappingLookupOrNullBlock
+_mlirIRMappingLookupOrNullOperation
+_mlirIRMappingLookupOrNullValue
+_mlirIRMappingMapBlock
+_mlirIRMappingMapOperation
+_mlirIRMappingMapValue
 _mlirIRRewriterCreate
 _mlirIRRewriterCreateFromOp
 _mlirIRRewriterDestroy
@@ -802,6 +820,7 @@
 _mlirOpaqueTypeGetName
 _mlirOpaqueTypeGetTypeID
 _mlirOperationClone
+_mlirOperationCloneWithMapping
 _mlirOperationCreate
 _mlirOperationCreateParse
 _mlirOperationDestroy
@@ -934,6 +953,7 @@
 _mlirRewriterBaseClearInsertionPoint
 _mlirRewriterBaseClone
 _mlirRewriterBaseCloneRegionBefore
+_mlirRewriterBaseCloneWithMapping
 _mlirRewriterBaseCloneWithoutRegions
 _mlirRewriterBaseCreateBlockBefore
 _mlirRewriterBaseEraseBlock
diff --git a/compiler/src/iree/compiler/Codegen/Common/FoldTensorExtractOp.td b/compiler/src/iree/compiler/Codegen/Common/FoldTensorExtractOp.td
index f7d2c88..4bf472c 100644
--- a/compiler/src/iree/compiler/Codegen/Common/FoldTensorExtractOp.td
+++ b/compiler/src/iree/compiler/Codegen/Common/FoldTensorExtractOp.td
@@ -17,6 +17,6 @@
 def : Pat<(Tensor_ExtractOp(Bufferization_ToTensorOp $value, $restrict,
                             $writable),
            $indices),
-          (LoadOp $value, $indices, ConstBoolAttrFalse, (NativeCodeCall<"::mlir::Attribute()">))>;
+          (LoadOp $value, $indices, ConstBoolAttrFalse, (NativeCodeCall<"::mlir::Attribute()">), ConstBoolAttrFalse)>;
 
 #endif // IREE_COMPILER_CODEGEN_COMMON_FOLDTENSOREXTRACTOP
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 22da7f9..9c51ed3 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 22da7f92913937b0318e3d504b2d8e90faaf2597
+Subproject commit 9c51ed38f1e25a5a9c3c766ed1b2b8198021b5dd