Merge pull request #8990 from okkwon/llvm-bump-20220425

LLVM bump 20220425
diff --git a/integrations/tensorflow/WORKSPACE b/integrations/tensorflow/WORKSPACE
index 32af2bf..8ff10e6 100644
--- a/integrations/tensorflow/WORKSPACE
+++ b/integrations/tensorflow/WORKSPACE
@@ -7,7 +7,7 @@
 
 load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
 
-TENSORFLOW_COMMIT = "5abd3d88570e304f3d3f9bb99eb98620e2839a31"
+TENSORFLOW_COMMIT = "fa5d2b36d097e5e2df5b487a5ac13efe62c41597"
 
 git_repository(
     name = "org_tensorflow",
diff --git a/integrations/tensorflow/iree-dialects/BUILD b/integrations/tensorflow/iree-dialects/BUILD
index 43522c1..f977f50 100644
--- a/integrations/tensorflow/iree-dialects/BUILD
+++ b/integrations/tensorflow/iree-dialects/BUILD
@@ -651,7 +651,6 @@
         "@llvm-project//mlir:AsyncTransforms",
         "@llvm-project//mlir:LinalgTransforms",
         "@llvm-project//mlir:AffineToStandard",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:SCFTransforms",
         "@llvm-project//mlir:Transforms",
         "@llvm-project//mlir:ReconcileUnrealizedCasts",
@@ -697,7 +696,6 @@
         "@llvm-project//mlir:LinalgTransforms",
         "@llvm-project//mlir:MathDialect",
         "@llvm-project//mlir:MemRefDialect",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:PDLDialect",
         "@llvm-project//mlir:PDLInterpDialect",
         "@llvm-project//mlir:Parser",
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
index d07e5ba..0fb2f8c 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
@@ -33,7 +33,6 @@
 #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/Passes.h"
 #include "mlir/Dialect/Linalg/Transforms/Hoisting.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
@@ -704,6 +703,7 @@
   PassManager pm(getContext());
 
   bufferization::OneShotBufferizationOptions options;
+  options.bufferizeFunctionBoundaries = true;
   options.memCpyFn = [](OpBuilder &builder, Location loc, Value from,
                         Value to) {
     return success(linalg::makeMemRefCopyOp(builder, loc, from, to));
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
index 205822b..f2cec78 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
@@ -16,7 +16,6 @@
 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Linalg/Transforms/Hoisting.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
diff --git a/integrations/tensorflow/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir b/integrations/tensorflow/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
index 3b685a3..9b84067 100644
--- a/integrations/tensorflow/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
+++ b/integrations/tensorflow/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
@@ -6,8 +6,8 @@
 //  CHECK-SAME:     %[[arg2:.*]]: memref<?xf32, #{{.*}}>
 func @parallel_insert_slice_no_conflict(
     %idx: index, %idx2: index,
-    %arg1: tensor<?xf32> {linalg.inplaceable=true},
-    %arg2: tensor<?xf32> {linalg.inplaceable=true}) -> (tensor<?xf32>, f32)
+    %arg1: tensor<?xf32> {bufferization.writable = true},
+    %arg2: tensor<?xf32> {bufferization.writable = true}) -> (tensor<?xf32>, f32)
 {
   %cst = arith.constant 4.200000e+01 : f32
   %c0 = arith.constant 0 : index
@@ -45,8 +45,8 @@
 //  CHECK-SAME:     %[[arg2:.*]]: memref<?xf32, #{{.*}}>
 func @parallel_insert_slice_with_conflict(
     %idx: index, %idx2: index,
-    %arg1: tensor<?xf32> {linalg.inplaceable=true},
-    %arg2: tensor<?xf32> {linalg.inplaceable=true}) -> (f32, f32)
+    %arg1: tensor<?xf32> {bufferization.writable = true},
+    %arg2: tensor<?xf32> {bufferization.writable = true}) -> (f32, f32)
 {
   %cst = arith.constant 4.200000e+01 : f32
   %c0 = arith.constant 0 : index
diff --git a/iree/compiler/Codegen/Common/BUILD b/iree/compiler/Codegen/Common/BUILD
index f4783b4..4bd4305 100644
--- a/iree/compiler/Codegen/Common/BUILD
+++ b/iree/compiler/Codegen/Common/BUILD
@@ -100,7 +100,6 @@
         "@llvm-project//mlir:MathTransforms",
         "@llvm-project//mlir:MemRefDialect",
         "@llvm-project//mlir:MemRefTransforms",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:Pass",
         "@llvm-project//mlir:SCFDialect",
         "@llvm-project//mlir:SCFTransforms",
diff --git a/iree/compiler/Codegen/Common/CMakeLists.txt b/iree/compiler/Codegen/Common/CMakeLists.txt
index 80ef1e8..d5c49dc 100644
--- a/iree/compiler/Codegen/Common/CMakeLists.txt
+++ b/iree/compiler/Codegen/Common/CMakeLists.txt
@@ -74,7 +74,6 @@
     MLIRMathTransforms
     MLIRMemRef
     MLIRMemRefTransforms
-    MLIRModuleBufferization
     MLIRPass
     MLIRSCF
     MLIRSCFToControlFlow
diff --git a/iree/compiler/Codegen/Common/IREEComprehensiveBufferizePass.cpp b/iree/compiler/Codegen/Common/IREEComprehensiveBufferizePass.cpp
index adf67ec..f41d78a 100644
--- a/iree/compiler/Codegen/Common/IREEComprehensiveBufferizePass.cpp
+++ b/iree/compiler/Codegen/Common/IREEComprehensiveBufferizePass.cpp
@@ -34,7 +34,6 @@
 #include "mlir/Dialect/Bufferization/Transforms/BufferUtils.h"
 #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/IR/Linalg.h"
 #include "mlir/Dialect/MemRef/IR/MemRef.h"
 #include "mlir/Dialect/MemRef/Transforms/Passes.h"
diff --git a/iree/compiler/Codegen/Interfaces/BUILD b/iree/compiler/Codegen/Interfaces/BUILD
index 7e26d02..965159f 100644
--- a/iree/compiler/Codegen/Interfaces/BUILD
+++ b/iree/compiler/Codegen/Interfaces/BUILD
@@ -64,7 +64,6 @@
         "@llvm-project//mlir:FuncTransforms",
         "@llvm-project//mlir:LinalgTransforms",
         "@llvm-project//mlir:MemRefDialect",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:SCFTransforms",
         "@llvm-project//mlir:Support",
         "@llvm-project//mlir:TensorTransforms",
diff --git a/iree/compiler/Codegen/Interfaces/BufferizationInterfaces.cpp b/iree/compiler/Codegen/Interfaces/BufferizationInterfaces.cpp
index 8404dc1..1fdbbe5 100644
--- a/iree/compiler/Codegen/Interfaces/BufferizationInterfaces.cpp
+++ b/iree/compiler/Codegen/Interfaces/BufferizationInterfaces.cpp
@@ -13,8 +13,8 @@
 #include "mlir/Dialect/Arithmetic/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
+#include "mlir/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/MemRef/IR/MemRef.h"
 #include "mlir/Dialect/SCF/BufferizableOpInterfaceImpl.h"
@@ -278,8 +278,8 @@
   arith::registerBufferizableOpInterfaceExternalModels(registry);
   linalg::registerBufferizableOpInterfaceExternalModels(registry);
   scf::registerBufferizableOpInterfaceExternalModels(registry);
-  linalg::comprehensive_bufferize::std_ext::
-      registerModuleBufferizationExternalModels(registry);
+  bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
+      registry);
   tensor::registerBufferizableOpInterfaceExternalModels(registry);
   vector::registerBufferizableOpInterfaceExternalModels(registry);
 
diff --git a/iree/compiler/Codegen/Interfaces/CMakeLists.txt b/iree/compiler/Codegen/Interfaces/CMakeLists.txt
index 7235cf6..8bb02ad 100644
--- a/iree/compiler/Codegen/Interfaces/CMakeLists.txt
+++ b/iree/compiler/Codegen/Interfaces/CMakeLists.txt
@@ -38,7 +38,6 @@
     MLIRFuncTransforms
     MLIRLinalgTransforms
     MLIRMemRef
-    MLIRModuleBufferization
     MLIRSCFTransforms
     MLIRSupport
     MLIRTensorTransforms
diff --git a/llvm-external-projects/iree-dialects/BUILD b/llvm-external-projects/iree-dialects/BUILD
index d0736c0..7524c10 100644
--- a/llvm-external-projects/iree-dialects/BUILD
+++ b/llvm-external-projects/iree-dialects/BUILD
@@ -653,7 +653,6 @@
         "@llvm-project//mlir:AsyncTransforms",
         "@llvm-project//mlir:LinalgTransforms",
         "@llvm-project//mlir:AffineToStandard",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:SCFTransforms",
         "@llvm-project//mlir:Transforms",
         "@llvm-project//mlir:ReconcileUnrealizedCasts",
@@ -691,6 +690,7 @@
         "@llvm-project//mlir:AffineUtils",
         "@llvm-project//mlir:ArithmeticTransforms",
         "@llvm-project//mlir:BufferizationDialect",
+        "@llvm-project//mlir:BufferizationTransforms",
         "@llvm-project//mlir:DialectUtils",
         "@llvm-project//mlir:FuncDialect",
         "@llvm-project//mlir:IR",
@@ -699,7 +699,6 @@
         "@llvm-project//mlir:LinalgTransforms",
         "@llvm-project//mlir:MathDialect",
         "@llvm-project//mlir:MemRefDialect",
-        "@llvm-project//mlir:ModuleBufferization",
         "@llvm-project//mlir:PDLDialect",
         "@llvm-project//mlir:PDLInterpDialect",
         "@llvm-project//mlir:Parser",
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
index ea1b668..7b6173c 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
@@ -31,9 +31,9 @@
 #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
 #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h"
 #include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h"
+#include "mlir/Dialect/Bufferization/Transforms/OneShotModuleBufferize.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/Passes.h"
 #include "mlir/Dialect/Linalg/Transforms/Hoisting.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
@@ -793,6 +793,7 @@
 LogicalResult transform::BufferizeOp::apply(transform::TransformResults &result,
                                             transform::TransformState &state) {
   bufferization::OneShotBufferizationOptions options;
+  options.bufferizeFunctionBoundaries = true;
   options.memCpyFn = [](OpBuilder &builder, Location loc, Value from,
                         Value to) {
     return success(linalg::makeMemRefCopyOp(builder, loc, from, to));
@@ -800,7 +801,7 @@
 
   auto moduleOp = cast<ModuleOp>(state.getTopLevel());
   applyBufferizationEnablingTransformations(moduleOp);
-  if (failed(comprehensive_bufferize::runModuleBufferize(moduleOp, options)))
+  if (failed(runOneShotModuleBufferize(moduleOp, options)))
     return failure();
 
   // Perform buffer-level hoistings.
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
index a59abca..9def8d5 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/Transforms/TransformInterpreter.cpp
@@ -14,9 +14,9 @@
 #include "mlir/Dialect/Affine/LoopUtils.h"
 #include "mlir/Dialect/Arithmetic/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
+#include "mlir/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
-#include "mlir/Dialect/Linalg/ComprehensiveBufferize/ModuleBufferization.h"
 #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Linalg/Transforms/Hoisting.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
@@ -256,8 +256,8 @@
     arith::registerBufferizableOpInterfaceExternalModels(registry);
     linalg::registerBufferizableOpInterfaceExternalModels(registry);
     scf::registerBufferizableOpInterfaceExternalModels(registry);
-    linalg::comprehensive_bufferize::std_ext::
-        registerModuleBufferizationExternalModels(registry);
+    bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
+        registry);
     tensor::registerBufferizableOpInterfaceExternalModels(registry);
     vector::registerBufferizableOpInterfaceExternalModels(registry);
   }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
index 3b685a3..af4eb7a 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/bufferize-in-parallel.mlir
@@ -6,8 +6,8 @@
 //  CHECK-SAME:     %[[arg2:.*]]: memref<?xf32, #{{.*}}>
 func @parallel_insert_slice_no_conflict(
     %idx: index, %idx2: index,
-    %arg1: tensor<?xf32> {linalg.inplaceable=true},
-    %arg2: tensor<?xf32> {linalg.inplaceable=true}) -> (tensor<?xf32>, f32)
+    %arg1: tensor<?xf32> {bufferization.writable=true},
+    %arg2: tensor<?xf32> {bufferization.writable=true}) -> (tensor<?xf32>, f32)
 {
   %cst = arith.constant 4.200000e+01 : f32
   %c0 = arith.constant 0 : index
@@ -45,8 +45,8 @@
 //  CHECK-SAME:     %[[arg2:.*]]: memref<?xf32, #{{.*}}>
 func @parallel_insert_slice_with_conflict(
     %idx: index, %idx2: index,
-    %arg1: tensor<?xf32> {linalg.inplaceable=true},
-    %arg2: tensor<?xf32> {linalg.inplaceable=true}) -> (f32, f32)
+    %arg1: tensor<?xf32> {bufferization.writable=true},
+    %arg2: tensor<?xf32> {bufferization.writable=true}) -> (f32, f32)
 {
   %cst = arith.constant 4.200000e+01 : f32
   %c0 = arith.constant 0 : index
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 9b32886..a48300a 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 9b32886e7e705bb28aab57682e612375075a0ad7
+Subproject commit a48300aee570f8eea4ec0b03e2d176aab648afb0
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index bbd8077..ae579ab 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit bbd8077e020d4359ae0bcf8b5a895a5ebe2f020d
+Subproject commit ae579ab44f6cd34feec11f82447356cf9f9d5b0f