Integrate LLVM at llvm/llvm-project@95995673d1ba

Updates LLVM usage to match
[95995673d1ba](https://github.com/llvm/llvm-project/commit/95995673d1ba)

PiperOrigin-RevId: 385228604
Change-Id: Ia0abbf2458b827f827ef089b9d4983e3a8f250b5
diff --git a/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/legalize_to_linalg.cc b/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/legalize_to_linalg.cc
index 7497897..e6b2552 100644
--- a/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/legalize_to_linalg.cc
+++ b/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/legalize_to_linalg.cc
@@ -714,7 +714,7 @@
           new_shape, operand_type.getElementType(),
           makeStridedLinearLayoutMap(new_strides, operand_offset,
                                      rewriter.getContext()));
-      operand = rewriter.create<linalg::CollapseShapeOp>(
+      operand = rewriter.create<memref::CollapseShapeOp>(
           op.getLoc(), new_memref_type, operand_adaptor.operand(),
           collapsed_dims_list);
     }
@@ -873,9 +873,9 @@
 
       if (isLHLO) {
         auto collapsed_type = MemRefType::get({total_elems}, elem_type);
-        Value collapsed_op = rewriter.create<linalg::CollapseShapeOp>(
+        Value collapsed_op = rewriter.create<memref::CollapseShapeOp>(
             loc, collapsed_type, args[0], collapsing_map);
-        Value reshape_buffer = rewriter.create<linalg::ExpandShapeOp>(
+        Value reshape_buffer = rewriter.create<memref::ExpandShapeOp>(
             loc, result_type, collapsed_op, expanding_map);
         rewriter.replaceOpWithNewOp<linalg::CopyOp>(reshape_op, reshape_buffer,
                                                     args[1]);
@@ -894,12 +894,12 @@
     if (isLHLO) {
       Value reshape_buffer = isCollapsing
                                  ? rewriter
-                                       .create<linalg::CollapseShapeOp>(
+                                       .create<memref::CollapseShapeOp>(
                                            reshape_op.getLoc(), result_type,
                                            args[0], reassociation_map)
                                        .getResult()
                                  : rewriter
-                                       .create<linalg::ExpandShapeOp>(
+                                       .create<memref::ExpandShapeOp>(
                                            reshape_op.getLoc(), result_type,
                                            args[0], reassociation_map)
                                        .getResult();
diff --git a/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/ral_legalize_to_llvm.cc b/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/ral_legalize_to_llvm.cc
index 8286e1d..14c0efb 100644
--- a/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/ral_legalize_to_llvm.cc
+++ b/tensorflow/compiler/mlir/hlo/lib/Dialect/mhlo/transforms/ral_legalize_to_llvm.cc
@@ -549,7 +549,7 @@
     target.addLegalDialect<LLVM::LLVMDialect>();
     target.addIllegalDialect<StandardOpsDialect, gpu::GPUDialect,
                              disc_ral::RalDialect, math::MathDialect>();
-    target.addIllegalOp<LLVM::DialectCastOp>();
+    target.addIllegalOp<UnrealizedConversionCastOp>();
     // Mark modules as legal.
     target.addLegalOp<ModuleOp, gpu::GPUModuleOp>();
     // Do not look into gpu modules, only consider host-side.
diff --git a/tensorflow/compiler/mlir/hlo/tests/lhlo-legalize-to-linalg.mlir b/tensorflow/compiler/mlir/hlo/tests/lhlo-legalize-to-linalg.mlir
index deb4c2f..ae096a1 100644
--- a/tensorflow/compiler/mlir/hlo/tests/lhlo-legalize-to-linalg.mlir
+++ b/tensorflow/compiler/mlir/hlo/tests/lhlo-legalize-to-linalg.mlir
@@ -418,7 +418,7 @@
   } : (memref<1x5xf32>, memref<5x10x100xf32>) -> ()
   return
 }
-// CHECK: %[[RESHAPED_ARG:.*]] = linalg.collapse_shape %{{.*}} {{\[}}[0, 1]]
+// CHECK: %[[RESHAPED_ARG:.*]] = memref.collapse_shape %{{.*}} {{\[}}[0, 1]]
 // CHECK-SAME:                   memref<1x5xf32> into memref<5xf32>
 // CHECK: linalg.generic {{{.*}}indexing_maps =
 // CHECK-SAME:       [#[[OPERAND_MAP]], #[[RESULT_MAP]]]
@@ -980,7 +980,7 @@
     : (memref<12x1x42xi32>, memref<12x42xi32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0, 1], [2]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0, 1], [2]]
 // CHECK-NEXT: linalg.copy
 
 // -----
@@ -991,7 +991,7 @@
     : (memref<12x42x1x1xi32>, memref<12x42xi32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0], [1, 2, 3]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0], [1, 2, 3]]
 // CHECK-NEXT: linalg.copy
 
 // -----
@@ -1002,7 +1002,7 @@
     : (memref<12x42xi32>, memref<12x1x42x1xi32>) -> ()
   return
 }
-// CHECK: linalg.expand_shape %{{.*}} {{\[}}[0, 1], [2, 3]]
+// CHECK: memref.expand_shape %{{.*}} {{\[}}[0, 1], [2, 3]]
 // CHECK-NEXT: linalg.copy
 
 // -----
@@ -1013,8 +1013,8 @@
    : (memref<1x49x16xf32>, memref<1x784x1x1xf32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0, 1, 2]]
-// CHECK: linalg.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0, 1, 2]]
+// CHECK: memref.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
 // CHECK: linalg.copy
 
 // -----
@@ -1025,8 +1025,8 @@
    : (memref<1x8x10x3xf32>, memref<1x240x1xf32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
-// CHECK: linalg.expand_shape %{{.*}} {{\[}}[0, 1, 2]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.expand_shape %{{.*}} {{\[}}[0, 1, 2]]
 // CHECK: linalg.copy
 
 // -----
@@ -1038,8 +1038,8 @@
    : (memref<4x512x1x1xi32>, memref<1x4x1x512xi32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
-// CHECK: linalg.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
 
 // -----
 
@@ -1050,8 +1050,8 @@
    : (memref<4x1x1x1024xi32>, memref<4x1024x1x1xi32>) -> ()
   return
 }
-// CHECK: linalg.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
-// CHECK: linalg.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.collapse_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
+// CHECK: memref.expand_shape %{{.*}} {{\[}}[0, 1, 2, 3]]
 
 // -----
 
diff --git a/tensorflow/compiler/mlir/tools/kernel_gen/tests/bufferize.mlir b/tensorflow/compiler/mlir/tools/kernel_gen/tests/bufferize.mlir
index 553e5b9..272da0c 100644
--- a/tensorflow/compiler/mlir/tools/kernel_gen/tests/bufferize.mlir
+++ b/tensorflow/compiler/mlir/tools/kernel_gen/tests/bufferize.mlir
@@ -246,7 +246,7 @@
 // CHECK-LABEL: @tensor_reshape
 // CHECK-SAME: (%[[T:.*]]: memref<1x2x2xf32>)
 func @tensor_reshape(%t : tensor<1x2x2xf32>) -> tensor<4xf32> {
-  // CHECK: linalg.collapse_shape %[[T]] {{.*}} : memref<1x2x2xf32> into memref<4xf32>
+  // CHECK: memref.collapse_shape %[[T]] {{.*}} : memref<1x2x2xf32> into memref<4xf32>
   %result = linalg.tensor_collapse_shape %t [[0, 1, 2]] : tensor<1x2x2xf32> into tensor<4xf32>
   return %result : tensor<4xf32>
 }
diff --git a/tensorflow/compiler/mlir/tools/kernel_gen/transforms/tf_kernel_to_llvm_pass.cc b/tensorflow/compiler/mlir/tools/kernel_gen/transforms/tf_kernel_to_llvm_pass.cc
index e1e0eed..0aeddc4 100644
--- a/tensorflow/compiler/mlir/tools/kernel_gen/transforms/tf_kernel_to_llvm_pass.cc
+++ b/tensorflow/compiler/mlir/tools/kernel_gen/transforms/tf_kernel_to_llvm_pass.cc
@@ -278,7 +278,7 @@
     target.addIllegalDialect<StandardOpsDialect, complex::ComplexDialect,
                              gpu::GPUDialect, tf_framework::TFFrameworkDialect,
                              math::MathDialect>();
-    target.addIllegalOp<LLVM::DialectCastOp>();
+    target.addIllegalOp<UnrealizedConversionCastOp>();
     // Mark modules as legal.
     target.addLegalOp<ModuleOp, gpu::GPUModuleOp>();
     // Do not look into gpu modules, only consider host-side.
diff --git a/third_party/llvm/workspace.bzl b/third_party/llvm/workspace.bzl
index 4c51e69..a6f064d 100644
--- a/third_party/llvm/workspace.bzl
+++ b/third_party/llvm/workspace.bzl
@@ -4,8 +4,8 @@
 
 def repo(name):
     """Imports LLVM."""
-    LLVM_COMMIT = "d046fb62b7e7cd273b104fee0162725003411c00"
-    LLVM_SHA256 = "23621dc52ff5d2621dc7855786af30d9105b25c989fe49697e3026272cdff9b2"
+    LLVM_COMMIT = "95995673d1babee5731146f45ad3ce79c32f06d4"
+    LLVM_SHA256 = "b8ab0654ae7ca965fbc98ad37f00c2f7a6a67159a986166ebc3caad83987f1cf"
 
     tf_http_archive(
         name = name,
diff --git a/third_party/mlir/BUILD b/third_party/mlir/BUILD
index cc2bd4a..cace0cc 100644
--- a/third_party/mlir/BUILD
+++ b/third_party/mlir/BUILD
@@ -2433,6 +2433,14 @@
             ["-gen-op-interface-defs"],
             "include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.cpp.inc",
         ),
+        (
+            ["-gen-type-interface-decls"],
+            "include/mlir/Dialect/LLVMIR/LLVMTypeInterfaces.h.inc",
+        ),
+        (
+            ["-gen-type-interface-defs"],
+            "include/mlir/Dialect/LLVMIR/LLVMTypeInterfaces.cpp.inc",
+        ),
     ],
     tblgen = ":mlir-tblgen",
     td_file = "include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.td",
@@ -5846,6 +5854,7 @@
         ":LLVMDialect",
         ":LinalgOps",
         ":LinalgTransforms",
+        ":MemRefToLLVM",
         ":Pass",
         ":SCFDialect",
         ":SCFToStandard",
diff --git a/third_party/mlir/test.BUILD b/third_party/mlir/test.BUILD
index 0648885..65539f3 100644
--- a/third_party/mlir/test.BUILD
+++ b/third_party/mlir/test.BUILD
@@ -233,6 +233,7 @@
         "@llvm-project//mlir:Dialect",
         "@llvm-project//mlir:IR",
         "@llvm-project//mlir:InferTypeOpInterface",
+        "@llvm-project//mlir:LLVMDialect",
         "@llvm-project//mlir:Pass",
         "@llvm-project//mlir:Reducer",
         "@llvm-project//mlir:SideEffects",