Merge google -> main (#3337)

* 1e81da7a Merge main -> google
* 62c8861c Merge branch 'google' into main-to-google
* 8896f35a Synchronize submodules
* 2c02b9c1 Integrate TF at tensorflow/tensorflow@1454ee0907ee
* b843a99e Synchronize submodules
* bb076514 Integrate LLVM at llvm/llvm-project@8825fec37e73
* 9adef4b1 Synchronize submodules
* b56cefca Integrate LLVM at llvm/llvm-project@bfd7ee92ccec
* 52b019e0 Fix vkGetInstanceProcAddr returning nil issue.
* c795db9d Rename filecheck-lib target to match style of other targets
diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS
index c30d5f6..f18bcd0 100644
--- a/SUBMODULE_VERSIONS
+++ b/SUBMODULE_VERSIONS
@@ -5,7 +5,7 @@
 a5d9d0f7d368054fd1691aedf1db4116efcc233e third_party/flatbuffers
 4fb0ff7069bd88ee85902f4d0bb62794e5f6d021 third_party/flatcc
 f2fb48c3b3d79a75a88a99fba6576b25d42ec528 third_party/googletest
-5101e7e8dd01719f9161e01e2f053c9797c247a8 third_party/llvm-project
+8825fec37e73eea1bc3e4f5c125e1fd02d002d6c third_party/llvm-project
 17b12a4481daa150e2d1ea3ada086b551b856707 third_party/marl
 08c41f61f4f5f17728c9e0f48640eaa32588b63b third_party/mlir-emitc
 d8c7ee00a687ac369e62e2032514a93a9b413502 third_party/pybind11
@@ -14,7 +14,7 @@
 685f86471e9d26b3eb7676695a2e2cefb4551ae9 third_party/spirv_cross
 f8bf11a0253a32375c32cad92c841237b96696c0 third_party/spirv_headers
 57eb48aed36160c4876bc8310d9ca84d42ee9e2a third_party/swiftshader
-7ea86e9de8a5b6426e7291e0e5477ddaee83ba88 third_party/tensorflow
+1454ee0907ee3e71030d7123595fa5487f23a56d third_party/tensorflow
 a9a09ab0940408898fccfdcfe2bb8dc19b50f13c third_party/tracy
 9bd3f561bcee3f01d22912de10bb07ce4e23d378 third_party/vulkan_headers
 909f36b714c9239ee0b112a321220213a474ba53 third_party/vulkan_memory_allocator
diff --git a/build_tools/bazel/third_party_import/llvm-project/overlay/llvm/BUILD.bazel b/build_tools/bazel/third_party_import/llvm-project/overlay/llvm/BUILD.bazel
index 2fa578c..e0d64fe 100644
--- a/build_tools/bazel/third_party_import/llvm-project/overlay/llvm/BUILD.bazel
+++ b/build_tools/bazel/third_party_import/llvm-project/overlay/llvm/BUILD.bazel
@@ -420,7 +420,7 @@
 )
 
 cc_library(
-    name = "filecheck-lib",
+    name = "FileCheckLib",
     srcs = glob([
         "lib/FileCheck/*.cpp",
         "lib/FileCheck/*.h",
@@ -443,8 +443,8 @@
     linkopts = llvm_linkopts,
     stamp = 0,
     deps = [
+        ":FileCheckLib",
         ":Support",
-        ":filecheck-lib",
     ],
 )
 
diff --git a/experimental/ModelBuilder/test/BenchMatMulVectorGPU.cpp b/experimental/ModelBuilder/test/BenchMatMulVectorGPU.cpp
index c3aa9ad..07d720a 100644
--- a/experimental/ModelBuilder/test/BenchMatMulVectorGPU.cpp
+++ b/experimental/ModelBuilder/test/BenchMatMulVectorGPU.cpp
@@ -112,7 +112,7 @@
 
 template <typename IdOp, typename NProcsOp>
 static SmallVector<linalg::ProcInfo, 2> getGpuProcIds(
-    OpBuilder &b, Location loc, ArrayRef<SubViewOp::Range> parallelLoopRanges) {
+    OpBuilder &b, Location loc, ArrayRef<Range> parallelLoopRanges) {
   if (parallelLoopRanges.size() != 2)
     llvm_unreachable("expected two parallel loops for matmul operation");
   Type indexType = b.getIndexType();
@@ -128,7 +128,7 @@
 constexpr int numSubgroupY = 2;
 
 static SmallVector<linalg::ProcInfo, 2> getSubgroupIds(
-    OpBuilder &b, Location loc, ArrayRef<SubViewOp::Range> parallelLoopRanges) {
+    OpBuilder &b, Location loc, ArrayRef<Range> parallelLoopRanges) {
   if (parallelLoopRanges.size() != 2)
     llvm_unreachable("expected two parallel loops for matmul operation");
   Type indexType = b.getIndexType();
diff --git a/integrations/tensorflow/bindings/python/pyiree/tf/compiler/signature_def_saved_model_test.py b/integrations/tensorflow/bindings/python/pyiree/tf/compiler/signature_def_saved_model_test.py
index 2640862..9764b13 100644
--- a/integrations/tensorflow/bindings/python/pyiree/tf/compiler/signature_def_saved_model_test.py
+++ b/integrations/tensorflow/bindings/python/pyiree/tf/compiler/signature_def_saved_model_test.py
@@ -56,7 +56,7 @@
           builder.save()
 
       module = compiler.tf_signature_def_saved_model_to_compiler_module(
-          sm_dir, tags=set(["bar"]), exported_names=["baz"])
+          sm_dir, saved_model_tags=set(["bar"]), exported_names=["baz"])
 
       module_asm = module.to_asm(large_element_limit=100)
       self.assertRegexpMatches(module_asm, "flow.variable @[^ ]* dense<10>")
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
index 135961a..219104e 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
@@ -112,8 +112,7 @@
 
 /// Distribution options for linalg.matmul when targeting workgroups.
 static linalg::LinalgLoopDistributionOptions matmulDistributionOptions = {
-    [](OpBuilder &builder, Location loc,
-       ArrayRef<SubViewOp::Range> parallelLoopRanges) {
+    [](OpBuilder &builder, Location loc, ArrayRef<Range> parallelLoopRanges) {
       return getGPUProcessorIdsAndCounts<gpu::BlockIdOp, gpu::GridDimOp>(
           builder, loc, parallelLoopRanges.size());
     },
@@ -176,8 +175,7 @@
 /// Distribution options for targeting workgroups for convolution/pooling
 /// operations.
 static linalg::LinalgLoopDistributionOptions convPoolDistributionOptions = {
-    [](OpBuilder &builder, Location loc,
-       ArrayRef<SubViewOp::Range> parallelLoopRanges) {
+    [](OpBuilder &builder, Location loc, ArrayRef<Range> parallelLoopRanges) {
       return getGPUProcessorIdsAndCounts<gpu::BlockIdOp, gpu::GridDimOp>(
           builder, loc, parallelLoopRanges.size());
     },
@@ -353,7 +351,7 @@
 
   auto getSubgroupProcInfoFn =
       [&launchConfig](OpBuilder &builder, Location loc,
-                      ArrayRef<SubViewOp::Range> parallelLoopRanges) {
+                      ArrayRef<Range> parallelLoopRanges) {
         ArrayRef<int64_t> numSubgroups =
             launchConfig.getNumSubgroups().take_front(
                 parallelLoopRanges.size());
diff --git a/iree/compiler/Dialect/Flow/Transforms/test/hlo_to_hlo_preprocessing_canoncalize_dot_general.mlir b/iree/compiler/Dialect/Flow/Transforms/test/hlo_to_hlo_preprocessing_canoncalize_dot_general.mlir
index 3447436..67b8f46 100644
--- a/iree/compiler/Dialect/Flow/Transforms/test/hlo_to_hlo_preprocessing_canoncalize_dot_general.mlir
+++ b/iree/compiler/Dialect/Flow/Transforms/test/hlo_to_hlo_preprocessing_canoncalize_dot_general.mlir
@@ -15,7 +15,7 @@
 // CHECK: dot_general_to_dot(%[[ARG0:.+]]: tensor<1x32x128x4xf32>, %[[ARG1:.+]]: tensor<128x4x8x64xf32>) -> tensor<1x32x8x64xf32>
 // CHECK: %[[ARG0_RESHAPED:.+]] = "mhlo.reshape"(%[[ARG0]]) : (tensor<1x32x128x4xf32>) -> tensor<32x512xf32>
 // CHECK: %[[ARG1_RESHAPED:.+]] = "mhlo.reshape"(%[[ARG1]]) : (tensor<128x4x8x64xf32>) -> tensor<512x512xf32>
-// CHECK: %[[DOT:.+]] = "mhlo.dot"(%[[ARG0_RESHAPED]], %[[ARG1_RESHAPED]]) 
+// CHECK: %[[DOT:.+]] = "mhlo.dot"(%[[ARG0_RESHAPED]], %[[ARG1_RESHAPED]])
 // CHECK: %[[RESULT:.+]] = "mhlo.reshape"(%[[DOT]]) : (tensor<32x512xf32>) -> tensor<1x32x8x64xf32>
 // CHECK: return %[[RESULT]] : tensor<1x32x8x64xf32>
 
diff --git a/iree/hal/vulkan/dynamic_symbols.cc b/iree/hal/vulkan/dynamic_symbols.cc
index 9a2305b..fdbe5af 100644
--- a/iree/hal/vulkan/dynamic_symbols.cc
+++ b/iree/hal/vulkan/dynamic_symbols.cc
@@ -193,6 +193,19 @@
 
   // Setup the lookup methods first. The rest of the syms uses these to
   // resolve function pointers.
+#if defined(IREE_PLATFORM_LINUX)
+  // Try to resolve itself could get different address, e.g.,
+  //   0x7f7d31a83960 -> 0x555cf16d5a00
+  // It seems that sometimes there is a bug if we don't use the resolved
+  // vkGetInstanceProcAddr method, see b/169256917.
+  this->vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(
+      this->vkGetInstanceProcAddr(instance, "vkGetInstanceProcAddr"));
+  if (!this->vkGetInstanceProcAddr) {
+    return UnavailableErrorBuilder(IREE_LOC)
+           << "Required Vulkan function vkGetInstanceProcAddr not available; "
+              "invalid driver handle?";
+  }
+#endif  // IREE_PLATFORM_LINUX
   this->vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(
       this->vkGetInstanceProcAddr(instance, "vkGetDeviceProcAddr"));
   if (!this->vkGetDeviceProcAddr) {
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 5101e7e..8825fec 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 5101e7e8dd01719f9161e01e2f053c9797c247a8
+Subproject commit 8825fec37e73eea1bc3e4f5c125e1fd02d002d6c
diff --git a/third_party/tensorflow b/third_party/tensorflow
index 7ea86e9..1454ee0 160000
--- a/third_party/tensorflow
+++ b/third_party/tensorflow
@@ -1 +1 @@
-Subproject commit 7ea86e9de8a5b6426e7291e0e5477ddaee83ba88
+Subproject commit 1454ee0907ee3e71030d7123595fa5487f23a56d