Integrate LLVM at llvm/llvm-project@f53fafbacbc2 Updates LLVM usage to match [f53fafbacbc2](https://github.com/llvm/llvm-project/commit/f53fafbacbc2) PiperOrigin-RevId: 395832316
diff --git a/SUBMODULE_VERSIONS.txt b/SUBMODULE_VERSIONS.txt index f7925e4..c95580e 100644 --- a/SUBMODULE_VERSIONS.txt +++ b/SUBMODULE_VERSIONS.txt
@@ -4,7 +4,7 @@ aa533abfd4232b01f9e57041d70114d5a77e6de0 third_party/googletest 88b845dee001723c4a0db1fe5477de735b6d3bb0 third_party/liburing acd6f6f014c25e46363e718381e0b35205df2d83 third_party/libyaml -6c8ff4032e2bcf7dd381633b7e6294f23f0173a9 third_party/llvm-project +f53fafbacbc22bacd38fd1bdd52359156e6bfcba third_party/llvm-project 638fcee30ca9594dc30aaca282158d0ceb3c061b third_party/mlir-hlo 3f701faace7addc75d16dea8a6cd769fa5b3f260 third_party/musl 4c7697dbe973ed01ae6fbec37d186ebd05982e1f third_party/pybind11
diff --git a/iree/compiler/Codegen/LLVMCPU/BUILD b/iree/compiler/Codegen/LLVMCPU/BUILD index ad514f9..d8ee2d2 100644 --- a/iree/compiler/Codegen/LLVMCPU/BUILD +++ b/iree/compiler/Codegen/LLVMCPU/BUILD
@@ -61,6 +61,7 @@ "@llvm-project//mlir:MemRefToLLVM", "@llvm-project//mlir:MemRefTransforms", "@llvm-project//mlir:Pass", + "@llvm-project//mlir:ReconcileUnrealizedCasts", "@llvm-project//mlir:SCFDialect", "@llvm-project//mlir:StandardOps", "@llvm-project//mlir:StandardOpsTransforms",
diff --git a/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp b/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp index 04782ed..d9cac55 100644 --- a/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp +++ b/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp
@@ -23,6 +23,7 @@ #include "mlir/Conversion/LinalgToLLVM/LinalgToLLVM.h" #include "mlir/Conversion/MathToLLVM/MathToLLVM.h" #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" +#include "mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h" #include "mlir/Conversion/SCFToStandard/SCFToStandard.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" @@ -308,9 +309,9 @@ Value getIndexValue(Location loc, int64_t value, OpBuilder &builder) { SmallVector<Value> folded; - builder.createOrFold<UnrealizedConversionCastOp>( + builder.createOrFold<LLVM::ConstantOp>( folded, loc, typeConverter->convertType(builder.getIndexType()), - builder.createOrFold<ConstantIndexOp>(loc, value)); + builder.getI64IntegerAttr(value)); return folded.front(); } @@ -674,6 +675,7 @@ populateVectorToLLVMMatrixConversionPatterns(converter, patterns); populateVectorToLLVMConversionPatterns(converter, patterns); populateLinalgToLLVMConversionPatterns(converter, patterns); + populateReconcileUnrealizedCastsPatterns(patterns); // clang-format off patterns.insert<
diff --git a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_bindings.mlir b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_bindings.mlir index 5f8e1c7..11adb9a 100644 --- a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_bindings.mlir +++ b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_bindings.mlir
@@ -1,5 +1,7 @@ // RUN: iree-opt -allow-unregistered-dialect -iree-convert-to-llvm -split-input-file %s | IreeFileCheck %s +llvm.func @sink(f32) + // CHECK-LABEL: llvm.func internal @binding_ptrs func @binding_ptrs() { // CHECK-DAG: %[[C72:.+]] = llvm.mlir.constant(72 : index) : i64 @@ -7,7 +9,7 @@ // CHECK: %[[STATE:.+]] = llvm.load %arg0 : !llvm.ptr<struct<"iree_hal_executable_dispatch_state_v0_t", (array<3 x i32>, array<3 x i32>, i64, ptr<i32>, i64, ptr<ptr<i8>>, ptr<i64>)>> // CHECK: %[[PC:.+]] = llvm.extractvalue %[[STATE]][3] : !llvm.struct<"iree_hal_executable_dispatch_state_v0_t", (array<3 x i32>, array<3 x i32>, i64, ptr<i32>, i64, ptr<ptr<i8>>, ptr<i64>)> - // CHECK: %[[C0:.+]] = llvm.mlir.constant(0 : index) : i64 + // CHECK: %[[C0:.+]] = llvm.mlir.constant(0 : i64) : i64 // CHECK: %[[DIM_PTR:.+]] = llvm.getelementptr %[[PC]][%[[C0]]] : (!llvm.ptr<i32>, i64) -> !llvm.ptr<i32> // CHECK: %[[DIM_I32:.+]] = llvm.load %[[DIM_PTR]] : !llvm.ptr<i32> // CHECK: %[[DIM:.+]] = llvm.zext %[[DIM_I32]] : i32 to i64 @@ -15,7 +17,7 @@ // CHECK: %[[STATE:.+]] = llvm.load %arg0 : !llvm.ptr<struct<"iree_hal_executable_dispatch_state_v0_t", (array<3 x i32>, array<3 x i32>, i64, ptr<i32>, i64, ptr<ptr<i8>>, ptr<i64>)>> // CHECK: %[[BINDING_PTRS:.+]] = llvm.extractvalue %[[STATE]][5] : !llvm.struct<"iree_hal_executable_dispatch_state_v0_t", (array<3 x i32>, array<3 x i32>, i64, ptr<i32>, i64, ptr<ptr<i8>>, ptr<i64>)> - // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : index) : i64 + // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : i64) : i64 // CHECK: %[[ARRAY_PTR:.+]] = llvm.getelementptr %[[BINDING_PTRS]][%[[C1]]] : (!llvm.ptr<ptr<i8>>, i64) -> !llvm.ptr<ptr<i8>> // CHECK: %[[BASE_PTR_I8:.+]] = llvm.load %[[ARRAY_PTR]] : !llvm.ptr<ptr<i8>> // CHECK: %[[BUFFER_I8:.+]] = llvm.getelementptr %[[BASE_PTR_I8]][%[[C72]]] : (!llvm.ptr<i8>, i64) -> !llvm.ptr<i8> @@ -36,8 +38,12 @@ // CHECK: %[[DESC_H:.+]] = llvm.insertvalue %[[STRIDE0]], %[[DESC_G]][4, 0] : !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<2 x i64>, array<2 x i64>)> %memref = hal.interface.binding.subspan @io::@ret0[%c72] : memref<?x2xf32>{%dim} - // CHECK: "test.sink"(%[[DESC_H]]) - "test.sink"(%memref) : (memref<?x2xf32>) -> () + // CHECK: %[[VAL:.+]] = llvm.load + %c0 = constant 0 : index + %val = memref.load %memref[%c0, %c0] : memref<?x2xf32> + + // CHECK: llvm.call @sink(%[[VAL]]) + llvm.call @sink(%val) : (f32) -> () return } hal.interface private @io attributes {push_constants = 2 : index} {
diff --git a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_constants.mlir b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_constants.mlir index b5b3265..0902ffc 100644 --- a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_constants.mlir +++ b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_constants.mlir
@@ -1,15 +1,19 @@ // RUN: iree-opt -allow-unregistered-dialect -iree-convert-to-llvm -split-input-file %s | IreeFileCheck %s +llvm.func @sink(i64) + // CHECK-LABEL: llvm.func internal @constant_values func @constant_values() { // CHECK: %[[STATE:.+]] = llvm.load %arg0 : !llvm.ptr<struct<"iree_hal_executable_dispatch_state_v0_t" // CHECK: %[[PTR_BASE:.+]] = llvm.extractvalue %[[STATE]][3] - // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 : index) : i64 + // CHECK: %[[C1:.+]] = llvm.mlir.constant(1 // CHECK: %[[VPTR:.+]] = llvm.getelementptr %[[PTR_BASE]][%[[C1]]] : (!llvm.ptr<i32>, i64) -> !llvm.ptr<i32> // CHECK: %[[V32:.+]] = llvm.load %[[VPTR]] : !llvm.ptr<i32> // CHECK: %[[V64:.+]] = llvm.zext %[[V32]] : i32 to i64 %v1 = hal.interface.load.constant offset = 1 : index - // CHECK-NEXT: "test.sink"(%[[V64]]) - "test.sink"(%v1) : (index) -> () + // CHECK-NOT: unrealized_conversion_cast + %v2 = index_cast %v1 : index to i64 + // CHECK: llvm.call @sink + llvm.call @sink(%v2) : (i64) -> () return }
diff --git a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_workgroup_info.mlir b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_workgroup_info.mlir index 631100e..1d49973 100644 --- a/iree/compiler/Codegen/LLVMCPU/test/hal_interface_workgroup_info.mlir +++ b/iree/compiler/Codegen/LLVMCPU/test/hal_interface_workgroup_info.mlir
@@ -1,18 +1,23 @@ // RUN: iree-opt -allow-unregistered-dialect -iree-convert-to-llvm -split-input-file %s | IreeFileCheck %s +llvm.func @sink(i64) + // CHECK-LABEL: llvm.func internal @workgroup_id func @workgroup_id() { // CHECK: %[[PTR:.+]] = llvm.load %arg1 : !llvm.ptr<array<3 x i32>> // CHECK: %[[Z32:.+]] = llvm.extractvalue %[[PTR]][2] : !llvm.array<3 x i32> // CHECK: %[[Z64:.+]] = llvm.zext %[[Z32]] : i32 to i64 %workgroup_id_z = hal.interface.workgroup.id[2] : index - // CHECK-NEXT: "test.sink"(%[[Z64]]) - "test.sink"(%workgroup_id_z) : (index) -> () + // CHECK-NEXT: llvm.call @sink(%[[Z64]]) + %val = index_cast %workgroup_id_z : index to i64 + llvm.call @sink(%val) : (i64) -> () return } // ----- +llvm.func @sink(i64) + // CHECK-LABEL: llvm.func internal @workgroup_size func @workgroup_size() { // CHECK: %[[STATE:.+]] = llvm.load %arg0 : !llvm.ptr<struct<"iree_hal_executable_dispatch_state_v0_t" @@ -20,13 +25,16 @@ // CHECK: %[[Z32:.+]] = llvm.extractvalue %[[SIZE_PTR]][2] : !llvm.array<3 x i32> // CHECK: %[[Z64:.+]] = llvm.zext %[[Z32]] : i32 to i64 %workgroup_size_z = hal.interface.workgroup.size[2] : index - // CHECK-NEXT: "test.sink"(%[[Z64]]) - "test.sink"(%workgroup_size_z) : (index) -> () + // CHECK-NEXT: llvm.call @sink(%[[Z64]]) + %val = index_cast %workgroup_size_z : index to i64 + llvm.call @sink(%val) : (i64) -> () return } // ----- +llvm.func @sink(i64) + // CHECK-LABEL: llvm.func internal @workgroup_count func @workgroup_count() { // CHECK: %[[STATE:.+]] = llvm.load %arg0 : !llvm.ptr<struct<"iree_hal_executable_dispatch_state_v0_t" @@ -34,7 +42,8 @@ // CHECK: %[[Z32:.+]] = llvm.extractvalue %[[COUNT_PTR]][2] : !llvm.array<3 x i32> // CHECK: %[[Z64:.+]] = llvm.zext %[[Z32]] : i32 to i64 %workgroup_count_z = hal.interface.workgroup.count[2] : index - // CHECK-NEXT: "test.sink"(%[[Z64]]) - "test.sink"(%workgroup_count_z) : (index) -> () + // CHECK-NEXT: llvm.call @sink(%[[Z64]]) + %val = index_cast %workgroup_count_z : index to i64 + llvm.call @sink(%val) : (i64) -> () return }
diff --git a/third_party/llvm-project b/third_party/llvm-project index 6c8ff40..f53fafb 160000 --- a/third_party/llvm-project +++ b/third_party/llvm-project
@@ -1 +1 @@ -Subproject commit 6c8ff4032e2bcf7dd381633b7e6294f23f0173a9 +Subproject commit f53fafbacbc22bacd38fd1bdd52359156e6bfcba