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