Integrate LLVM to llvm/llvm-project@e7fac4e39085 (#24765)

Adapted optimize_int_arithmetic.mlir to prevent folding math ops to
constants (claude assisted).
Regenerated CAPI export files.

Keeping/carrying-over existing reverts:
 - [bazel] Correct config.h definitions for musl (#207295)
 - [AlwaysInliner] Do not inline on attribute mismatches (#209345)

Signed-off-by: Tobias Fuchs <fuchs@roofline.ai>
diff --git a/compiler/src/iree/compiler/API/api_exports.c b/compiler/src/iree/compiler/API/api_exports.c
index 31250e7..f7f5e1b 100644
--- a/compiler/src/iree/compiler/API/api_exports.c
+++ b/compiler/src/iree/compiler/API/api_exports.c
@@ -322,6 +322,7 @@
 extern void mlirContextEnableMultithreading();
 extern void mlirContextEqual();
 extern void mlirContextGetAllowUnregisteredDialects();
+extern void mlirContextGetLoadedDialect();
 extern void mlirContextGetNumLoadedDialects();
 extern void mlirContextGetNumRegisteredDialects();
 extern void mlirContextGetNumThreads();
@@ -786,8 +787,19 @@
 extern void mlirMemRefTypeGetName();
 extern void mlirMemRefTypeGetStridesAndOffset();
 extern void mlirMemRefTypeGetTypeID();
+extern void mlirMemoryEffectInstanceCreate();
+extern void mlirMemoryEffectInstanceCreateForBlockArgument();
+extern void mlirMemoryEffectInstanceCreateForOpOperand();
+extern void mlirMemoryEffectInstanceCreateForOpResult();
+extern void mlirMemoryEffectInstanceCreateForSymbol();
+extern void mlirMemoryEffectInstanceDestroy();
+extern void mlirMemoryEffectInstancesListAppend();
+extern void mlirMemoryEffectsAllocateGet();
+extern void mlirMemoryEffectsFreeGet();
 extern void mlirMemoryEffectsOpInterfaceAttachFallbackModel();
 extern void mlirMemoryEffectsOpInterfaceTypeID();
+extern void mlirMemoryEffectsReadGet();
+extern void mlirMemoryEffectsWriteGet();
 extern void mlirMergeSymbolsIntoFromClone();
 extern void mlirModuleCreateEmpty();
 extern void mlirModuleCreateParse();
@@ -1015,6 +1027,7 @@
 extern void mlirShapedTypeIsStaticDim();
 extern void mlirShapedTypeIsStaticSize();
 extern void mlirShapedTypeIsStaticStrideOrOffset();
+extern void mlirSideEffectsDefaultResourceGet();
 extern void mlirSimplifyAffineExpr();
 extern void mlirSparseElementsAttrGetIndices();
 extern void mlirSparseElementsAttrGetTypeID();
@@ -1528,6 +1541,7 @@
   x += (uintptr_t)&mlirContextEnableMultithreading;
   x += (uintptr_t)&mlirContextEqual;
   x += (uintptr_t)&mlirContextGetAllowUnregisteredDialects;
+  x += (uintptr_t)&mlirContextGetLoadedDialect;
   x += (uintptr_t)&mlirContextGetNumLoadedDialects;
   x += (uintptr_t)&mlirContextGetNumRegisteredDialects;
   x += (uintptr_t)&mlirContextGetNumThreads;
@@ -1992,8 +2006,19 @@
   x += (uintptr_t)&mlirMemRefTypeGetName;
   x += (uintptr_t)&mlirMemRefTypeGetStridesAndOffset;
   x += (uintptr_t)&mlirMemRefTypeGetTypeID;
+  x += (uintptr_t)&mlirMemoryEffectInstanceCreate;
+  x += (uintptr_t)&mlirMemoryEffectInstanceCreateForBlockArgument;
+  x += (uintptr_t)&mlirMemoryEffectInstanceCreateForOpOperand;
+  x += (uintptr_t)&mlirMemoryEffectInstanceCreateForOpResult;
+  x += (uintptr_t)&mlirMemoryEffectInstanceCreateForSymbol;
+  x += (uintptr_t)&mlirMemoryEffectInstanceDestroy;
+  x += (uintptr_t)&mlirMemoryEffectInstancesListAppend;
+  x += (uintptr_t)&mlirMemoryEffectsAllocateGet;
+  x += (uintptr_t)&mlirMemoryEffectsFreeGet;
   x += (uintptr_t)&mlirMemoryEffectsOpInterfaceAttachFallbackModel;
   x += (uintptr_t)&mlirMemoryEffectsOpInterfaceTypeID;
+  x += (uintptr_t)&mlirMemoryEffectsReadGet;
+  x += (uintptr_t)&mlirMemoryEffectsWriteGet;
   x += (uintptr_t)&mlirMergeSymbolsIntoFromClone;
   x += (uintptr_t)&mlirModuleCreateEmpty;
   x += (uintptr_t)&mlirModuleCreateParse;
@@ -2221,6 +2246,7 @@
   x += (uintptr_t)&mlirShapedTypeIsStaticDim;
   x += (uintptr_t)&mlirShapedTypeIsStaticSize;
   x += (uintptr_t)&mlirShapedTypeIsStaticStrideOrOffset;
+  x += (uintptr_t)&mlirSideEffectsDefaultResourceGet;
   x += (uintptr_t)&mlirSimplifyAffineExpr;
   x += (uintptr_t)&mlirSparseElementsAttrGetIndices;
   x += (uintptr_t)&mlirSparseElementsAttrGetTypeID;
diff --git a/compiler/src/iree/compiler/API/api_exports.def b/compiler/src/iree/compiler/API/api_exports.def
index 738bcf2..d04c6a8 100644
--- a/compiler/src/iree/compiler/API/api_exports.def
+++ b/compiler/src/iree/compiler/API/api_exports.def
@@ -312,6 +312,7 @@
   mlirContextEnableMultithreading
   mlirContextEqual
   mlirContextGetAllowUnregisteredDialects
+  mlirContextGetLoadedDialect
   mlirContextGetNumLoadedDialects
   mlirContextGetNumRegisteredDialects
   mlirContextGetNumThreads
@@ -776,8 +777,19 @@
   mlirMemRefTypeGetName
   mlirMemRefTypeGetStridesAndOffset
   mlirMemRefTypeGetTypeID
+  mlirMemoryEffectInstanceCreate
+  mlirMemoryEffectInstanceCreateForBlockArgument
+  mlirMemoryEffectInstanceCreateForOpOperand
+  mlirMemoryEffectInstanceCreateForOpResult
+  mlirMemoryEffectInstanceCreateForSymbol
+  mlirMemoryEffectInstanceDestroy
+  mlirMemoryEffectInstancesListAppend
+  mlirMemoryEffectsAllocateGet
+  mlirMemoryEffectsFreeGet
   mlirMemoryEffectsOpInterfaceAttachFallbackModel
   mlirMemoryEffectsOpInterfaceTypeID
+  mlirMemoryEffectsReadGet
+  mlirMemoryEffectsWriteGet
   mlirMergeSymbolsIntoFromClone
   mlirModuleCreateEmpty
   mlirModuleCreateParse
@@ -1005,6 +1017,7 @@
   mlirShapedTypeIsStaticDim
   mlirShapedTypeIsStaticSize
   mlirShapedTypeIsStaticStrideOrOffset
+  mlirSideEffectsDefaultResourceGet
   mlirSimplifyAffineExpr
   mlirSparseElementsAttrGetIndices
   mlirSparseElementsAttrGetTypeID
diff --git a/compiler/src/iree/compiler/API/api_exports.ld b/compiler/src/iree/compiler/API/api_exports.ld
index 66d031a..621aeec 100644
--- a/compiler/src/iree/compiler/API/api_exports.ld
+++ b/compiler/src/iree/compiler/API/api_exports.ld
@@ -313,6 +313,7 @@
     mlirContextEnableMultithreading;
     mlirContextEqual;
     mlirContextGetAllowUnregisteredDialects;
+    mlirContextGetLoadedDialect;
     mlirContextGetNumLoadedDialects;
     mlirContextGetNumRegisteredDialects;
     mlirContextGetNumThreads;
@@ -777,8 +778,19 @@
     mlirMemRefTypeGetName;
     mlirMemRefTypeGetStridesAndOffset;
     mlirMemRefTypeGetTypeID;
+    mlirMemoryEffectInstanceCreate;
+    mlirMemoryEffectInstanceCreateForBlockArgument;
+    mlirMemoryEffectInstanceCreateForOpOperand;
+    mlirMemoryEffectInstanceCreateForOpResult;
+    mlirMemoryEffectInstanceCreateForSymbol;
+    mlirMemoryEffectInstanceDestroy;
+    mlirMemoryEffectInstancesListAppend;
+    mlirMemoryEffectsAllocateGet;
+    mlirMemoryEffectsFreeGet;
     mlirMemoryEffectsOpInterfaceAttachFallbackModel;
     mlirMemoryEffectsOpInterfaceTypeID;
+    mlirMemoryEffectsReadGet;
+    mlirMemoryEffectsWriteGet;
     mlirMergeSymbolsIntoFromClone;
     mlirModuleCreateEmpty;
     mlirModuleCreateParse;
@@ -1006,6 +1018,7 @@
     mlirShapedTypeIsStaticDim;
     mlirShapedTypeIsStaticSize;
     mlirShapedTypeIsStaticStrideOrOffset;
+    mlirSideEffectsDefaultResourceGet;
     mlirSimplifyAffineExpr;
     mlirSparseElementsAttrGetIndices;
     mlirSparseElementsAttrGetTypeID;
diff --git a/compiler/src/iree/compiler/API/api_exports.macos.lst b/compiler/src/iree/compiler/API/api_exports.macos.lst
index 9c3804f..5078892 100644
--- a/compiler/src/iree/compiler/API/api_exports.macos.lst
+++ b/compiler/src/iree/compiler/API/api_exports.macos.lst
@@ -311,6 +311,7 @@
 _mlirContextEnableMultithreading
 _mlirContextEqual
 _mlirContextGetAllowUnregisteredDialects
+_mlirContextGetLoadedDialect
 _mlirContextGetNumLoadedDialects
 _mlirContextGetNumRegisteredDialects
 _mlirContextGetNumThreads
@@ -775,8 +776,19 @@
 _mlirMemRefTypeGetName
 _mlirMemRefTypeGetStridesAndOffset
 _mlirMemRefTypeGetTypeID
+_mlirMemoryEffectInstanceCreate
+_mlirMemoryEffectInstanceCreateForBlockArgument
+_mlirMemoryEffectInstanceCreateForOpOperand
+_mlirMemoryEffectInstanceCreateForOpResult
+_mlirMemoryEffectInstanceCreateForSymbol
+_mlirMemoryEffectInstanceDestroy
+_mlirMemoryEffectInstancesListAppend
+_mlirMemoryEffectsAllocateGet
+_mlirMemoryEffectsFreeGet
 _mlirMemoryEffectsOpInterfaceAttachFallbackModel
 _mlirMemoryEffectsOpInterfaceTypeID
+_mlirMemoryEffectsReadGet
+_mlirMemoryEffectsWriteGet
 _mlirMergeSymbolsIntoFromClone
 _mlirModuleCreateEmpty
 _mlirModuleCreateParse
@@ -1004,6 +1016,7 @@
 _mlirShapedTypeIsStaticDim
 _mlirShapedTypeIsStaticSize
 _mlirShapedTypeIsStaticStrideOrOffset
+_mlirSideEffectsDefaultResourceGet
 _mlirSimplifyAffineExpr
 _mlirSparseElementsAttrGetIndices
 _mlirSparseElementsAttrGetTypeID
diff --git a/compiler/src/iree/compiler/Dialect/Util/Transforms/test/optimize_int_arithmetic.mlir b/compiler/src/iree/compiler/Dialect/Util/Transforms/test/optimize_int_arithmetic.mlir
index fa4ecac..c7c8133 100644
--- a/compiler/src/iree/compiler/Dialect/Util/Transforms/test/optimize_int_arithmetic.mlir
+++ b/compiler/src/iree/compiler/Dialect/Util/Transforms/test/optimize_int_arithmetic.mlir
@@ -133,47 +133,53 @@
 
 // -----
 // CHECK-LABEL: @to_unsigned_ceildivsi
-util.func @to_unsigned_ceildivsi(%arg0 : i64, %arg1 : i64) -> i64, i64, i64 {
+util.func @to_unsigned_ceildivsi(%arg0 : i64, %arg1 : i64, %arg2 : i64) -> i64, i64, i64 {
   %0 = util.assume.int %arg0<umin=10, umax=100> : i64
   // One greater than the signed maximum.
   %1 = util.assume.int %arg1<umin=10, umax=9223372036854775808> : i64
+  // Same range as %arg0.
+  %2 = util.assume.int %arg2<umin=10, umax=100> : i64
   // CHECK: ceildivui
   // CHECK: ceildivsi
   // CHECK: ceildivsi
-  %2 = arith.ceildivsi %0, %0 : i64
-  %3 = arith.ceildivsi %0, %1 : i64
-  %4 = arith.ceildivsi %1, %0 : i64
-  util.return %2, %3, %4 : i64, i64, i64
+  %3 = arith.ceildivsi %0, %2 : i64
+  %4 = arith.ceildivsi %0, %1 : i64
+  %5 = arith.ceildivsi %1, %0 : i64
+  util.return %3, %4, %5 : i64, i64, i64
 }
 
 // -----
 // CHECK-LABEL: @to_unsigned_divsi
-util.func @to_unsigned_divsi(%arg0 : i64, %arg1 : i64) -> i64, i64, i64 {
+util.func @to_unsigned_divsi(%arg0 : i64, %arg1 : i64, %arg2 : i64) -> i64, i64, i64 {
   %0 = util.assume.int %arg0<umin=10, umax=100> : i64
   // One greater than the signed maximum.
   %1 = util.assume.int %arg1<umin=10, umax=9223372036854775808> : i64
+  // Same range as %arg0.
+  %2 = util.assume.int %arg2<umin=10, umax=100> : i64
   // CHECK: divui
   // CHECK: divsi
   // CHECK: divsi
-  %2 = arith.divsi %0, %0 : i64
-  %3 = arith.divsi %0, %1 : i64
-  %4 = arith.divsi %1, %0 : i64
-  util.return %2, %3, %4 : i64, i64, i64
+  %3 = arith.divsi %0, %2 : i64
+  %4 = arith.divsi %0, %1 : i64
+  %5 = arith.divsi %1, %0 : i64
+  util.return %3, %4, %5 : i64, i64, i64
 }
 
 // -----
 // CHECK-LABEL: @to_unsigned_floordivsi
-util.func @to_unsigned_floordivsi(%arg0 : i64, %arg1 : i64) -> i64, i64, i64 {
+util.func @to_unsigned_floordivsi(%arg0 : i64, %arg1 : i64, %arg2 : i64) -> i64, i64, i64 {
   %0 = util.assume.int %arg0<umin=10, umax=100> : i64
   // One greater than the signed maximum.
   %1 = util.assume.int %arg1<umin=10, umax=9223372036854775808> : i64
+  // Same range as %arg0.
+  %2 = util.assume.int %arg2<umin=10, umax=100> : i64
   // CHECK: divui
   // CHECK: divsi
   // CHECK: divsi
-  %2 = arith.floordivsi %0, %0 : i64
-  %3 = arith.floordivsi %0, %1 : i64
-  %4 = arith.floordivsi %1, %0 : i64
-  util.return %2, %3, %4 : i64, i64, i64
+  %3 = arith.floordivsi %0, %2 : i64
+  %4 = arith.floordivsi %0, %1 : i64
+  %5 = arith.floordivsi %1, %0 : i64
+  util.return %3, %4, %5 : i64, i64, i64
 }
 
 // -----
@@ -191,17 +197,19 @@
 
 // -----
 // CHECK-LABEL: @to_unsigned_remsi
-util.func @to_unsigned_remsi(%arg0 : i64, %arg1 : i64) -> i64, i64, i64 {
+util.func @to_unsigned_remsi(%arg0 : i64, %arg1 : i64, %arg2 : i64) -> i64, i64, i64 {
   %0 = util.assume.int %arg0<umin=10, umax=100> : i64
   // One greater than the signed maximum.
   %1 = util.assume.int %arg1<umin=10, umax=9223372036854775808> : i64
+  // Same range as %arg0.
+  %2 = util.assume.int %arg2<umin=10, umax=100> : i64
   // CHECK: remui
   // CHECK: remsi
   // CHECK: remsi
-  %2 = arith.remsi %0, %0 : i64
-  %3 = arith.remsi %0, %1 : i64
-  %4 = arith.remsi %1, %0 : i64
-  util.return %2, %3, %4 : i64, i64, i64
+  %3 = arith.remsi %0, %2 : i64
+  %4 = arith.remsi %0, %1 : i64
+  %5 = arith.remsi %1, %0 : i64
+  util.return %3, %4, %5 : i64, i64, i64
 }
 
 // -----
@@ -287,25 +295,31 @@
 // -----
 // CHECK-LABEL: @index_cast_i64_to_index_ceildivsi
 util.func @index_cast_i64_to_index_ceildivsi(%arg0 : index, %arg1 : index) -> index {
-  // CHECK: %[[ASSUME:.*]] = util.assume.int
+  // CHECK: %[[ASSUME0:.*]] = util.assume.int %arg0
   %0 = util.assume.int %arg0<umin=10, umax=100> : index
-  %1 = arith.index_cast %0 : index to i64
-  // CHECK: arith.ceildivui %[[ASSUME]], %[[ASSUME]] : index
-  %2 = arith.ceildivsi %1, %1 : i64
-  %3 = arith.index_cast %2 : i64 to index
-  util.return %3 : index
+  // CHECK: %[[ASSUME1:.*]] = util.assume.int %arg1
+  %1 = util.assume.int %arg1<umin=10, umax=100> : index
+  %2 = arith.index_cast %0 : index to i64
+  %3 = arith.index_cast %1 : index to i64
+  // CHECK: arith.ceildivui %[[ASSUME0]], %[[ASSUME1]] : index
+  %4 = arith.ceildivsi %2, %3 : i64
+  %5 = arith.index_cast %4 : i64 to index
+  util.return %5 : index
 }
 
 // -----
 // CHECK-LABEL: @index_cast_i64_to_index_floordivsi
 util.func @index_cast_i64_to_index_floordivsi(%arg0 : index, %arg1 : index) -> index {
-  // CHECK: %[[ASSUME:.*]] = util.assume.int
+  // CHECK: %[[ASSUME0:.*]] = util.assume.int %arg0
   %0 = util.assume.int %arg0<umin=10, umax=100> : index
-  %1 = arith.index_cast %0 : index to i64
-  // CHECK: arith.divui %[[ASSUME]], %[[ASSUME]] : index
-  %2 = arith.floordivsi %1, %1 : i64
-  %3 = arith.index_cast %2 : i64 to index
-  util.return %3 : index
+  // CHECK: %[[ASSUME1:.*]] = util.assume.int %arg1
+  %1 = util.assume.int %arg1<umin=10, umax=100> : index
+  %2 = arith.index_cast %0 : index to i64
+  %3 = arith.index_cast %1 : index to i64
+  // CHECK: arith.divui %[[ASSUME0]], %[[ASSUME1]] : index
+  %4 = arith.floordivsi %2, %3 : i64
+  %5 = arith.index_cast %4 : i64 to index
+  util.return %5 : index
 }
 
 // -----
@@ -349,13 +363,16 @@
 // -----
 // CHECK-LABEL: @index_cast_i64_to_index_remsi
 util.func @index_cast_i64_to_index_remsi(%arg0 : index, %arg1 : index) -> index {
-  // CHECK: %[[ASSUME:.*]] = util.assume.int
+  // CHECK: %[[ASSUME0:.*]] = util.assume.int %arg0
   %0 = util.assume.int %arg0<umin=10, umax=100> : index
-  %1 = arith.index_cast %0 : index to i64
-  // CHECK: arith.remui %[[ASSUME]], %[[ASSUME]] : index
-  %2 = arith.remsi %1, %1 : i64
-  %3 = arith.index_cast %2 : i64 to index
-  util.return %3 : index
+  // CHECK: %[[ASSUME1:.*]] = util.assume.int %arg1
+  %1 = util.assume.int %arg1<umin=10, umax=100> : index
+  %2 = arith.index_cast %0 : index to i64
+  %3 = arith.index_cast %1 : index to i64
+  // CHECK: arith.remui %[[ASSUME0]], %[[ASSUME1]] : index
+  %4 = arith.remsi %2, %3 : i64
+  %5 = arith.index_cast %4 : i64 to index
+  util.return %5 : index
 }
 
 // -----
@@ -401,13 +418,16 @@
 // -----
 // CHECK-LABEL: @index_cast_i64_to_index_remsi
 util.func @index_cast_i64_to_index_remsi(%arg0 : index, %arg1 : index) -> index {
-  // CHECK: %[[ASSUME:.*]] = util.assume.int
+  // CHECK: %[[ASSUME0:.*]] = util.assume.int %arg0
   %0 = util.assume.int %arg0<umin=10, umax=100> : index
-  %1 = arith.index_cast %0 : index to i64
-  // CHECK: arith.remui %[[ASSUME]], %[[ASSUME]] : index
-  %2 = arith.remsi %1, %1 : i64
-  %3 = arith.index_cast %2 : i64 to index
-  util.return %3 : index
+  // CHECK: %[[ASSUME1:.*]] = util.assume.int %arg1
+  %1 = util.assume.int %arg1<umin=10, umax=100> : index
+  %2 = arith.index_cast %0 : index to i64
+  %3 = arith.index_cast %1 : index to i64
+  // CHECK: arith.remui %[[ASSUME0]], %[[ASSUME1]] : index
+  %4 = arith.remsi %2, %3 : i64
+  %5 = arith.index_cast %4 : i64 to index
+  util.return %5 : index
 }
 
 // -----
diff --git a/third_party/llvm-project b/third_party/llvm-project
index a3ae499..e7fac4e 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit a3ae4996bb220f9ec2c5450f2f2d3fb2e5ffe42e
+Subproject commit e7fac4e39085e03399f11fd30f9e1fbe631071eb