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