diff --git a/SUBMODULE_VERSIONS.txt b/SUBMODULE_VERSIONS.txt
index 8277552..34b0278 100644
--- a/SUBMODULE_VERSIONS.txt
+++ b/SUBMODULE_VERSIONS.txt
@@ -5,7 +5,7 @@
 b1fbd33c06cdb0024c67733c6fdec2009d17b384 third_party/googletest
 88b845dee001723c4a0db1fe5477de735b6d3bb0 third_party/liburing
 013b829185fee6d8eaa515a7e36ec468a2a02600 third_party/llvm-bazel
-0776eca7a4e76bfadc311f3607be3a4f0c0e989a third_party/llvm-project
+b24436ac96bdf3f2c545fc85dc8af239d618c9c4 third_party/llvm-project
 3483f1653fc7cb3bfb3a4d1b463f3a651ecaa676 third_party/mlir-emitc
 98debb127d3a14e0239a3432461e3876d293b409 third_party/mlir-hlo
 2b2bd45bbf9be04fd22ece5cc1f54679202e9257 third_party/pffft
diff --git a/experimental/ModelBuilder/ModelRunner.cpp b/experimental/ModelBuilder/ModelRunner.cpp
index b7c01e2..39741d3 100644
--- a/experimental/ModelBuilder/ModelRunner.cpp
+++ b/experimental/ModelBuilder/ModelRunner.cpp
@@ -59,12 +59,10 @@
   if (target == Target::CPUTarget) {
     // Lower vector operations progressively into more elementary
     // vector operations before running the regular compiler passes.
-    mlir::OwningRewritePatternList patterns;
-    mlir::vector::populateVectorSlicesLoweringPatterns(patterns,
-                                                       module->getContext());
+    mlir::OwningRewritePatternList patterns(module->getContext());
+    mlir::vector::populateVectorSlicesLoweringPatterns(patterns);
     mlir::vector::populateVectorContractLoweringPatterns(
-        patterns, module->getContext(),
-        compilationOptions.vectorTransformsOptions);
+        patterns, compilationOptions.vectorTransformsOptions);
     (void)mlir::applyPatternsAndFoldGreedily(*module, std::move(patterns));
   }
   runLoweringPass(compilationOptions.loweringPasses
diff --git a/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp b/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
index e6b8de3..40c1c1d 100644
--- a/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
+++ b/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
@@ -58,15 +58,15 @@
 
     // Lower TF Patterns must be separate from canonocalization patterns as
     // they are sometimes inversions of eachother.
-    OwningRewritePatternList lowerTfPatterns;
+    OwningRewritePatternList lowerTfPatterns(&getContext());
     mlir::TF::PopulateLoweringTFPatterns(context, &lowerTfPatterns);
 
-    OwningRewritePatternList canonicalizePatterns;
+    OwningRewritePatternList canonicalizePatterns(&getContext());
     for (auto *op : context->getRegisteredOperations()) {
       op->getCanonicalizationPatterns(canonicalizePatterns, context);
     }
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     // Note that the `OperationConverter` orders patterns lexicographically by:
     // 1) Ascending legalization depth (i.e., minimum number of patterns
     // necessary to arrive at conversion target).
@@ -98,10 +98,10 @@
     DenseSet<Operation *> prevUnconvertedOps;
     DenseSet<Operation *> unconvertedOps;
 
-    FrozenRewritePatternList frozenPatterns(std::move(patterns));
-    FrozenRewritePatternList frozenCanonicalizePatterns(
+    FrozenRewritePatternSet frozenPatterns(std::move(patterns));
+    FrozenRewritePatternSet frozenCanonicalizePatterns(
         std::move(canonicalizePatterns));
-    FrozenRewritePatternList frozenTfPatterns(std::move(lowerTfPatterns));
+    FrozenRewritePatternSet frozenTfPatterns(std::move(lowerTfPatterns));
     while (true) {
       if (failed(
               applyPatternsAndFoldGreedily(op, frozenCanonicalizePatterns))) {
diff --git a/integrations/tensorflow/iree_tf_compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc b/integrations/tensorflow/iree_tf_compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
index c2460b8..55c399f 100644
--- a/integrations/tensorflow/iree_tf_compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
+++ b/integrations/tensorflow/iree_tf_compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
@@ -146,7 +146,7 @@
 
 void populateTFToTFStringsPatterns(MLIRContext *ctx,
                                    OwningRewritePatternList &patterns) {
-  populateWithGenerated(ctx, patterns);
+  populateWithGenerated(patterns);
   patterns.insert<GatherV2OpLowering>(ctx);
   patterns.insert<StringFormatOpLowering>(ctx);
 }
diff --git a/integrations/tensorflow/iree_tf_compiler/dialect/tf_tensorlist/conversion/convert_tf_to_tf_tensorlist.cc b/integrations/tensorflow/iree_tf_compiler/dialect/tf_tensorlist/conversion/convert_tf_to_tf_tensorlist.cc
index 3e8aa17..1a83f35 100644
--- a/integrations/tensorflow/iree_tf_compiler/dialect/tf_tensorlist/conversion/convert_tf_to_tf_tensorlist.cc
+++ b/integrations/tensorflow/iree_tf_compiler/dialect/tf_tensorlist/conversion/convert_tf_to_tf_tensorlist.cc
@@ -98,8 +98,8 @@
   // The MLIR type conversion infrastructure doesn't handle this situation well.
   // It only knows how to handle blindly convert one type to another type.
 
-  OwningRewritePatternList patterns;
-  populateWithGenerated(&getContext(), patterns);
+  OwningRewritePatternList patterns(&getContext());
+  populateWithGenerated(patterns);
   patterns.insert<ConvertTfTensorlistConcatV2>(&getContext());
 
   ConversionTarget target(getContext());
diff --git a/integrations/tensorflow/iree_tf_compiler/dialect/utils/conversion_utils.h b/integrations/tensorflow/iree_tf_compiler/dialect/utils/conversion_utils.h
index 107205f..37942b7 100644
--- a/integrations/tensorflow/iree_tf_compiler/dialect/utils/conversion_utils.h
+++ b/integrations/tensorflow/iree_tf_compiler/dialect/utils/conversion_utils.h
@@ -55,7 +55,7 @@
 
   LogicalResult run() {
     auto module = this->getOperation();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&this->getContext());
     Converter typeConverter;
 
     // Lower to the standard string operations.
@@ -82,10 +82,8 @@
              llvm::all_of(op.getResultTypes(), func);
     });
 
-    populateFuncOpTypeConversionPattern(patterns, &this->getContext(),
-                                        typeConverter);
-    populateCallOpTypeConversionPattern(patterns, &this->getContext(),
-                                        typeConverter);
+    populateFuncOpTypeConversionPattern(patterns, typeConverter);
+    populateCallOpTypeConversionPattern(patterns, typeConverter);
 
     auto result = applyPartialConversion(module.getOperation(), target,
                                          std::move(patterns));
diff --git a/iree/compiler/Conversion/CodegenUtils/ForOpCanonicalization.cpp b/iree/compiler/Conversion/CodegenUtils/ForOpCanonicalization.cpp
index df1eb41..985bdb1 100644
--- a/iree/compiler/Conversion/CodegenUtils/ForOpCanonicalization.cpp
+++ b/iree/compiler/Conversion/CodegenUtils/ForOpCanonicalization.cpp
@@ -217,7 +217,7 @@
     : PassWrapper<ForOpCanonicalizationPass, FunctionPass> {
   void runOnFunction() override {
     FuncOp fn = getFunction();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<CanonicalizeForOpInductionVarShape,
                     PackForOpInductionVarVector>(fn.getContext());
     (void)applyPatternsAndFoldGreedily(fn, std::move(patterns));
diff --git a/iree/compiler/Conversion/Common/BufferAllocViewCleanUpPass.cpp b/iree/compiler/Conversion/Common/BufferAllocViewCleanUpPass.cpp
index 6321309..c66b4e4 100644
--- a/iree/compiler/Conversion/Common/BufferAllocViewCleanUpPass.cpp
+++ b/iree/compiler/Conversion/Common/BufferAllocViewCleanUpPass.cpp
@@ -108,7 +108,7 @@
 struct BufferAllocViewCleanUpPass
     : public PassWrapper<BufferAllocViewCleanUpPass, FunctionPass> {
   void runOnFunction() override {
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<FoldReshapeIntoInterfaceTensorLoad>(&getContext());
     patterns.insert<RemoveDeadMemAllocs>();
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
diff --git a/iree/compiler/Conversion/Common/LinalgRewriteDestructiveUpdatesPass.cpp b/iree/compiler/Conversion/Common/LinalgRewriteDestructiveUpdatesPass.cpp
index 7743056..a6a0f2d 100644
--- a/iree/compiler/Conversion/Common/LinalgRewriteDestructiveUpdatesPass.cpp
+++ b/iree/compiler/Conversion/Common/LinalgRewriteDestructiveUpdatesPass.cpp
@@ -532,7 +532,7 @@
   // Non-default canonicalization patterns.
   // TODO: add Linalg tiling canonicalization patterns, affineminscf and others
   // as needed.
-  OwningRewritePatternList canonicalizationPatterns;
+  OwningRewritePatternList canonicalizationPatterns(&getContext());
   scf::ForOp::getCanonicalizationPatterns(canonicalizationPatterns, context);
   (void)applyPatternsAndFoldGreedily(funcOp,
                                      std::move(canonicalizationPatterns));
diff --git a/iree/compiler/Conversion/Common/Transforms.cpp b/iree/compiler/Conversion/Common/Transforms.cpp
index 0c4af0b..8fdf154 100644
--- a/iree/compiler/Conversion/Common/Transforms.cpp
+++ b/iree/compiler/Conversion/Common/Transforms.cpp
@@ -45,7 +45,7 @@
 /// easier.
 void applyCanonicalizationPatternsForTiling(MLIRContext *context,
                                             Operation *op) {
-  OwningRewritePatternList canonicalizationPatterns;
+  OwningRewritePatternList canonicalizationPatterns(context);
   canonicalizationPatterns.insert<AffineMinCanonicalizationPattern>(context);
   scf::ForOp::getCanonicalizationPatterns(canonicalizationPatterns, context);
   AffineApplyOp::getCanonicalizationPatterns(canonicalizationPatterns, context);
@@ -345,7 +345,7 @@
 
 LogicalResult materializeStaticLaunchInformation(
     FuncOp funcOp, ArrayRef<int64_t> workloadPerWorkgroup) {
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(funcOp.getContext());
   patterns.insert<SetWorkgroupSizePattern>(funcOp.getContext(),
                                            workloadPerWorkgroup);
   if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(patterns)))) {
diff --git a/iree/compiler/Conversion/Common/VectorTransferOptimization.cpp b/iree/compiler/Conversion/Common/VectorTransferOptimization.cpp
index c0ad44b..9904c49 100644
--- a/iree/compiler/Conversion/Common/VectorTransferOptimization.cpp
+++ b/iree/compiler/Conversion/Common/VectorTransferOptimization.cpp
@@ -64,9 +64,8 @@
     // Generate vector.shape_cast for dropping leading one dimensions in vector
     // ops. This increases the chance that we can forward more transfer writes
     // to transfer reads.
-    OwningRewritePatternList patterns;
-    mlir::vector::populateCastAwayVectorLeadingOneDimPatterns(
-        patterns, funcOp.getContext());
+    OwningRewritePatternList patterns(&getContext());
+    mlir::vector::populateCastAwayVectorLeadingOneDimPatterns(patterns);
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
 
     vector::transferOpflowOpt(funcOp);
diff --git a/iree/compiler/Conversion/HLOToHLO/Convert1x1ConvToDot.cpp b/iree/compiler/Conversion/HLOToHLO/Convert1x1ConvToDot.cpp
index 4bfe8ec..2a142f0 100644
--- a/iree/compiler/Conversion/HLOToHLO/Convert1x1ConvToDot.cpp
+++ b/iree/compiler/Conversion/HLOToHLO/Convert1x1ConvToDot.cpp
@@ -130,7 +130,7 @@
 
   void runOnFunction() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<Convert1x1ConvolutionToDotOp>(context);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
   }
diff --git a/iree/compiler/Conversion/HLOToHLO/DecomposeHLOClamp.cpp b/iree/compiler/Conversion/HLOToHLO/DecomposeHLOClamp.cpp
index 0adbd57..d294d3e 100644
--- a/iree/compiler/Conversion/HLOToHLO/DecomposeHLOClamp.cpp
+++ b/iree/compiler/Conversion/HLOToHLO/DecomposeHLOClamp.cpp
@@ -60,7 +60,7 @@
 
   void runOnFunction() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<DecomposeClampOp>(context);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
   }
diff --git a/iree/compiler/Conversion/HLOToHLO/DemoteF32ToF16.cpp b/iree/compiler/Conversion/HLOToHLO/DemoteF32ToF16.cpp
index c66e280..92bdc62 100644
--- a/iree/compiler/Conversion/HLOToHLO/DemoteF32ToF16.cpp
+++ b/iree/compiler/Conversion/HLOToHLO/DemoteF32ToF16.cpp
@@ -172,9 +172,9 @@
   ModuleOp moduleOp = getOperation();
 
   FloatTypeConverter converter;
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   patterns.insert<GenericTypeConvert>(context, converter);
-  populateFuncOpTypeConversionPattern(patterns, context, converter);
+  populateFuncOpTypeConversionPattern(patterns, converter);
   F32ToF16ConversionTarget target(*context);
   target.markUnknownOpDynamicallyLegal();
   if (failed(applyFullConversion(moduleOp, target, std::move(patterns))))
diff --git a/iree/compiler/Conversion/HLOToLinalg/FusionOfTensorOps.cpp b/iree/compiler/Conversion/HLOToLinalg/FusionOfTensorOps.cpp
index 7dc89dc..bc5819c 100644
--- a/iree/compiler/Conversion/HLOToLinalg/FusionOfTensorOps.cpp
+++ b/iree/compiler/Conversion/HLOToLinalg/FusionOfTensorOps.cpp
@@ -73,18 +73,19 @@
   }
 
   void runOnOperation() override {
-    OwningRewritePatternList fusionPatterns, interfacePatterns;
+    OwningRewritePatternList fusionPatterns(&getContext());
+    OwningRewritePatternList interfacePatterns(&getContext());
     Operation *op = getOperation();
     MLIRContext *context = op->getContext();
     interfacePatterns.insert<FuseWithHALInterfaceLoadTensor,
                              FuseWithHALInterfaceStoreTensor>(context);
-    FrozenRewritePatternList frozenInterfacePatterns(
+    FrozenRewritePatternSet frozenInterfacePatterns(
         std::move(interfacePatterns));
 
     (void)applyPatternsAndFoldGreedily(op->getRegions(),
                                        frozenInterfacePatterns);
 
-    populateLinalgTensorOpsFusionPatterns(context, fusionPatterns);
+    populateLinalgTensorOpsFusionPatterns(fusionPatterns);
     (void)applyPatternsAndFoldGreedily(op->getRegions(),
                                        std::move(fusionPatterns));
 
diff --git a/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnBuffers.cpp b/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnBuffers.cpp
index 68b7eac..38acef3 100644
--- a/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnBuffers.cpp
+++ b/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnBuffers.cpp
@@ -825,6 +825,8 @@
 // Canonicalization patterns.
 //===----------------------------------------------------------------------===//
 
+// TODO(hanchung): Revisit the pattern, this seems no longer needed because the
+// reshape ops are folded in tensors world.
 // Folds linalg.reshape op that directly reshaping an iree.placeholder op into
 // the iree.placeholder op itself.
 class FoldReshapeIntoPlaceholder final
@@ -900,7 +902,7 @@
     return signalPassFailure();
   }
 
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   populateHLOToLinalgOnBuffersConversionPatterns(context, patterns,
                                                  resultTensorToBufferMap);
   patterns.insert<HALInterfaceLoadTensorOpEraser, ShapeOpPattern>(
@@ -940,7 +942,7 @@
 
   // Perform additional canonicalizations.
   {
-    OwningRewritePatternList foldingPatterns;
+    OwningRewritePatternList foldingPatterns(&getContext());
     foldingPatterns.insert<FoldReshapeIntoPlaceholder>(context);
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(foldingPatterns));
   }
diff --git a/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnTensors.cpp b/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnTensors.cpp
index aecec54..cfbc1ae 100644
--- a/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnTensors.cpp
+++ b/iree/compiler/Conversion/HLOToLinalg/HLOToLinalgOnTensors.cpp
@@ -194,7 +194,7 @@
   }
 
   void runOnFunction() override {
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     MLIRContext *context = &getContext();
     populateHLOToLinalgOnTensorsConversionPatterns(context, patterns);
     if (useLinalgOnTensorsPath) {
diff --git a/iree/compiler/Conversion/HLOToLinalg/ResolveShapeOps.cpp b/iree/compiler/Conversion/HLOToLinalg/ResolveShapeOps.cpp
index 02d34ec..4f9107d 100644
--- a/iree/compiler/Conversion/HLOToLinalg/ResolveShapeOps.cpp
+++ b/iree/compiler/Conversion/HLOToLinalg/ResolveShapeOps.cpp
@@ -98,7 +98,7 @@
 void ResolveShapeOpsPass::runOnFunction() {
   MLIRContext *context = &getContext();
 
-  OwningRewritePatternList dimPatterns;
+  OwningRewritePatternList dimPatterns(&getContext());
   dimPatterns.insert<StdDimResolver>(context);
 
   // Set up a target to convert all std.dim ops. We need a conversion target
@@ -111,7 +111,7 @@
     return signalPassFailure();
   }
 
-  OwningRewritePatternList shapePatterns;
+  OwningRewritePatternList shapePatterns(&getContext());
   shapePatterns.insert<TieShapeElider>(context);
   Shape::RankedDimOp::getCanonicalizationPatterns(shapePatterns, context);
 
diff --git a/iree/compiler/Conversion/HLOToLinalg/test/fusion.mlir b/iree/compiler/Conversion/HLOToLinalg/test/fusion.mlir
index e964a08..a832e19 100644
--- a/iree/compiler/Conversion/HLOToLinalg/test/fusion.mlir
+++ b/iree/compiler/Conversion/HLOToLinalg/test/fusion.mlir
@@ -32,10 +32,9 @@
 // -----
 
 module {
-  func @fuse_store_reshape() {
+  func @fuse_store_reshape(%arg0: tensor<100xi32>) {
     %c0 = constant 0 : index
-    %c42 = constant dense<42> : tensor<100xi32>
-    %0 = linalg.tensor_reshape %c42 [affine_map<(d0, d1) -> (d0, d1)>] : tensor<100xi32> into tensor<4x25xi32>
+    %0 = linalg.tensor_reshape %arg0 [affine_map<(d0, d1) -> (d0, d1)>] : tensor<100xi32> into tensor<4x25xi32>
     hal.interface.store.tensor %0, @legacy_io::@ret0, offset = %c0 : tensor<4x25xi32>
     return
   }
@@ -45,8 +44,8 @@
 }
 
 // CHECK-LABEL: func @fuse_store_reshape
-//       CHECK:   %[[C42:.+]] = constant dense<{{.+}}> : tensor<100xi32>
-//       CHECK:   hal.interface.store.tensor %[[C42]]
+//  CHECK-SAME:   %[[ARG0:[a-zA-Z0-9_]*]]: tensor<100xi32>
+//       CHECK:   hal.interface.store.tensor %[[ARG0]]
 
 // -----
 
diff --git a/iree/compiler/Conversion/HLOToLinalg/test/linalg_tensor_to_buffer.mlir b/iree/compiler/Conversion/HLOToLinalg/test/linalg_tensor_to_buffer.mlir
index d39791f..c3e921a 100644
--- a/iree/compiler/Conversion/HLOToLinalg/test/linalg_tensor_to_buffer.mlir
+++ b/iree/compiler/Conversion/HLOToLinalg/test/linalg_tensor_to_buffer.mlir
@@ -320,66 +320,6 @@
 
 // -----
 
-#map0 = affine_map<(d0, d1) -> (d0, d1)>
-#map1 = affine_map<(d0, d1, d2) -> (d0, d1)>
-#map2 = affine_map<(d0, d1, d2) -> (d2)>
-
-module {
-  func @store_reshape_src_and_result_2() {
-    %c0 = constant 0 : index
-    %shape = linalg.init_tensor[2, 4] : tensor<2x4xf32>
-    %0 = hal.interface.load.tensor @legacy_io::@arg0, offset = %c0
-      {operand_result_index = 0 : i32} : tensor<2x4xf32>
-    %1 = linalg.generic {
-       indexing_maps = [#map0, #map0],
-       iterator_types = ["parallel", "parallel"]}
-     ins(%0 : tensor<2x4xf32>)
-    outs(%shape : tensor<2x4xf32>) {
-    ^bb0(%arg0: f32, %s: f32):  // no predecessors
-      %2 = math.tanh %arg0 : f32
-      linalg.yield %2 : f32
-    } -> tensor<2x4xf32>
-    %3 = linalg.tensor_reshape %1 [#map1, #map2]
-      : tensor<2x4xf32> into tensor<1x2x4xf32>
-    %4 = linalg.tensor_reshape %1 [#map1, #map2]
-      : tensor<2x4xf32> into tensor<1x2x4xf32>
-    %5 = linalg.tensor_reshape %1 [#map1, #map2]
-      : tensor<2x4xf32> into tensor<1x2x4xf32>
-    hal.interface.store.tensor %3, @legacy_io::@ret0, offset = %c0
-      {operand_result_index = 1 : i32} : tensor<1x2x4xf32>
-    hal.interface.store.tensor %4, @legacy_io::@ret1, offset = %c0
-      {operand_result_index = 2 : i32} : tensor<1x2x4xf32>
-    hal.interface.store.tensor %5, @legacy_io::@ret2, offset = %c0
-      {operand_result_index = 3 : i32} : tensor<1x2x4xf32>
-    return
-  }
-  hal.interface @legacy_io attributes {sym_visibility = "private"} {
-    hal.interface.binding @arg0, set=0, binding=0, type="StorageBuffer",
-      access="Read"
-    hal.interface.binding @ret0, set=0, binding=1, type="StorageBuffer",
-      access="Write|Discard"
-    hal.interface.binding @ret1, set=0, binding=2, type="StorageBuffer",
-      access="Write|Discard"
-    hal.interface.binding @ret2, set=0, binding=3, type="StorageBuffer",
-      access="Write|Discard"
-  }
-}
-
-// CHECK-LABEL: func @store_reshape_src_and_result_2
-//   CHECK-DAG:   %[[T0:.+]] = iree.placeholder for "interface buffer" {binding = @legacy_io::@ret2, operand_result_index = 3 : i32} : memref<1x2x4xf32>
-//   CHECK-DAG:   %[[T1:.+]] = iree.placeholder for "interface buffer" {binding = @legacy_io::@ret2, operand_result_index = 3 : i32} : memref<2x4xf32>
-//   CHECK-DAG:   %[[T2:.+]] = iree.placeholder for "interface buffer" {binding = @legacy_io::@ret1, operand_result_index = 2 : i32} : memref<1x2x4xf32>
-//   CHECK-DAG:   %[[T3:.+]] = iree.placeholder for "interface buffer" {binding = @legacy_io::@ret0, operand_result_index = 1 : i32} : memref<1x2x4xf32>
-//   CHECK-DAG:   %[[T4:.+]] = iree.placeholder for "interface buffer" {binding = @legacy_io::@arg0, operand_result_index = 0 : i32} : memref<2x4xf32>
-//       CHECK:   linalg.generic
-//  CHECK-SAME:     ins(%[[T4]] :
-//  CHECK-SAME:     outs(%[[T1]] :
-//       CHECK:   linalg.copy(%[[T0]], %[[T3]])
-//       CHECK:   linalg.copy(%[[T0]], %[[T2]])
-//       CHECK:   return
-
-// -----
-
 #map0 = affine_map<(d0, d1, d2, d3) -> (d0, d1)>
 #map1 = affine_map<(d0, d1, d2, d3) -> (d2, d3)>
 #map2 = affine_map<(d0, d1) -> (d0, d1)>
diff --git a/iree/compiler/Conversion/LinalgToLLVM/ConvImg2ColMatmulConversion.cpp b/iree/compiler/Conversion/LinalgToLLVM/ConvImg2ColMatmulConversion.cpp
index 783662d..2655986 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/ConvImg2ColMatmulConversion.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/ConvImg2ColMatmulConversion.cpp
@@ -200,7 +200,7 @@
 void ConvImg2ColMatmulConversionPass::runOnFunction() {
   auto funcOp = getOperation();
   auto context = funcOp.getContext();
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   populateConvImg2ColMatmulConversionPatterns(context, patterns);
   (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
 }
diff --git a/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp b/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
index 118bf89..1e48e2b 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
@@ -633,26 +633,24 @@
 void ConvertToLLVMPass::runOnOperation() {
   // Run Vector -> Vector transformations ahead of conversion to LLVM.
   {
-    OwningRewritePatternList patterns;
-    vector::populateVectorToVectorCanonicalizationPatterns(patterns,
-                                                           &getContext());
-    vector::populateVectorSlicesLoweringPatterns(patterns, &getContext());
-    vector::populateVectorContractLoweringPatterns(patterns, &getContext());
+    OwningRewritePatternList patterns(&getContext());
+    vector::populateVectorToVectorCanonicalizationPatterns(patterns);
+    vector::populateVectorSlicesLoweringPatterns(patterns);
+    vector::populateVectorContractLoweringPatterns(patterns);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
   }
   {
-    OwningRewritePatternList vectorToLoopsPatterns;
+    OwningRewritePatternList vectorToLoopsPatterns(&getContext());
     populateVectorToSCFConversionPatterns(
-        vectorToLoopsPatterns, &getContext(),
-        VectorTransferToSCFOptions().setUnroll(true));
+        vectorToLoopsPatterns, VectorTransferToSCFOptions().setUnroll(true));
     (void)applyPatternsAndFoldGreedily(getOperation(),
                                        std::move(vectorToLoopsPatterns));
   }
 
   // math dialect elementry functions -> polynomial form.
   {
-    OwningRewritePatternList mathPatterns;
-    populateMathPolynomialApproximationPatterns(mathPatterns, &getContext());
+    OwningRewritePatternList mathPatterns(&getContext());
+    populateMathPolynomialApproximationPatterns(mathPatterns);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(mathPatterns));
   }
 
@@ -663,12 +661,12 @@
     return success();
   });
 
-  OwningRewritePatternList patterns;
-  populateAffineToStdConversionPatterns(patterns, &getContext());
-  populateLoopToStdConversionPatterns(patterns, &getContext());
-  populateExpandTanhPattern(patterns, &getContext());
+  OwningRewritePatternList patterns(&getContext());
+  populateAffineToStdConversionPatterns(patterns);
+  populateLoopToStdConversionPatterns(patterns);
+  populateExpandTanhPattern(patterns);
   populateStdToLLVMConversionPatterns(converter, patterns);
-  populateVectorToSCFConversionPatterns(patterns, &getContext());
+  populateVectorToSCFConversionPatterns(patterns);
   populateVectorToLLVMMatrixConversionPatterns(converter, patterns);
   populateVectorToLLVMConversionPatterns(converter, patterns);
   populateLinalgToLLVMConversionPatterns(converter, patterns);
@@ -721,7 +719,7 @@
 
   // Post conversion patterns.
   {
-    OwningRewritePatternList postPatterns;
+    OwningRewritePatternList postPatterns(&getContext());
     if (options_.unfuseFMAOps) {
       populateUnfusedFMAOpsPassPatterns(&getContext(), postPatterns);
       (void)applyPatternsAndFoldGreedily(module, std::move(postPatterns));
diff --git a/iree/compiler/Conversion/LinalgToLLVM/FoldTensorExtractOpPass.cpp b/iree/compiler/Conversion/LinalgToLLVM/FoldTensorExtractOpPass.cpp
index 53e078b..026dd95 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/FoldTensorExtractOpPass.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/FoldTensorExtractOpPass.cpp
@@ -62,9 +62,8 @@
 }  // namespace
 
 void FoldTensorExtractOpPass::runOnOperation() {
-  MLIRContext *context = &getContext();
-  OwningRewritePatternList patterns;
-  populateWithGenerated(context, patterns);
+  OwningRewritePatternList patterns(&getContext());
+  populateWithGenerated(patterns);
   if (failed(applyPatternsAndFoldGreedily(getOperation(), std::move(patterns))))
     signalPassFailure();
 }
diff --git a/iree/compiler/Conversion/LinalgToLLVM/LinalgTileAndVectorizePass.cpp b/iree/compiler/Conversion/LinalgToLLVM/LinalgTileAndVectorizePass.cpp
index 5ca3086..441d9e7 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/LinalgTileAndVectorizePass.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/LinalgTileAndVectorizePass.cpp
@@ -136,7 +136,7 @@
 
   // Promotes workgroups subviews to a full-tile allocated on the stack.
   if (clEnablePromoteWorkgroupToFullTiles) {
-    OwningRewritePatternList promotionPatterns;
+    OwningRewritePatternList promotionPatterns(&getContext());
     promotionPatterns.insert<PromoteMatmulSubviewsPattern>(
         context,
         linalg::LinalgPromotionOptions().setAllocationDeallocationFns(
@@ -151,7 +151,7 @@
   // Workgroup first level of tiling.
   {
     // First level of tiling patterns. (workgroups memory)
-    OwningRewritePatternList l1patterns;
+    OwningRewritePatternList l1patterns(&getContext());
     l1patterns.insert<TileWorkgroups>(
         linalg::LinalgTilingOptions().setTileSizeComputationFunction(
             [](OpBuilder &builder,
@@ -173,7 +173,7 @@
 
   // Second level of tiling. (workgroups memory -> vectors)
   {
-    OwningRewritePatternList l2patterns;
+    OwningRewritePatternList l2patterns(&getContext());
     l2patterns.insert<TileWorkgroups>(
         linalg::LinalgTilingOptions().setTileSizeComputationFunction(
             [](OpBuilder &builder,
@@ -192,7 +192,7 @@
 
   // Apply canonicalization.
   {
-    OwningRewritePatternList canonicalizationPatterns;
+    OwningRewritePatternList canonicalizationPatterns(&getContext());
     canonicalizationPatterns.insert<AffineMinCanonicalizationPattern>(context);
     AffineApplyOp::getCanonicalizationPatterns(canonicalizationPatterns,
                                                context);
@@ -207,10 +207,10 @@
 
   // Apply vectorization patterns.
   {
-    OwningRewritePatternList vectorizationPatterns;
+    OwningRewritePatternList vectorizationPatterns(&getContext());
     linalg::insertVectorizationPatterns<linalg::ContractionOpInterface,
                                         linalg::CopyOp, linalg::FillOp>(
-        vectorizationPatterns, context, linalg::LinalgVectorizationOptions(),
+        vectorizationPatterns, linalg::LinalgVectorizationOptions(),
         linalg::LinalgTransformationFilter(
             Identifier::get(getVectorizeMarker(), context)));
     if (failed(applyPatternsAndFoldGreedily(
@@ -232,7 +232,7 @@
     vector::VectorTransformsOptions vectorTransformsOptions =
         vector::VectorTransformsOptions().setVectorTransformsOptions(
             vector::VectorContractLowering::OuterProduct);
-    OwningRewritePatternList vectorContractLoweringPatterns;
+    OwningRewritePatternList vectorContractLoweringPatterns(&getContext());
     vectorContractLoweringPatterns
         .insert<ContractionOpToOuterProductOpLowering,
                 ContractionOpToMatmulOpLowering, ContractionOpLowering>(
@@ -247,16 +247,15 @@
   {
     VectorTransferToSCFOptions vectorToSCFOptions =
         VectorTransferToSCFOptions().setUnroll(true);
-    OwningRewritePatternList vectorToLoopsPatterns;
-    populateVectorToSCFConversionPatterns(vectorToLoopsPatterns, context,
+    OwningRewritePatternList vectorToLoopsPatterns(&getContext());
+    populateVectorToSCFConversionPatterns(vectorToLoopsPatterns,
                                           vectorToSCFOptions);
     // Hosit hierarchical tiling indexing and other loop invariant transfer
     // ops computation.
     linalg::hoistRedundantVectorTransfers(funcOp);
 
     // TODO(ataei): Move this to common vector dialect patterns.
-    populateStdLegalizationPatternsForSPIRVLowering(context,
-                                                    vectorToLoopsPatterns);
+    populateStdLegalizationPatternsForSPIRVLowering(vectorToLoopsPatterns);
     if (failed(applyPatternsAndFoldGreedily(
             funcOp, std::move(vectorToLoopsPatterns)))) {
       return signalPassFailure();
diff --git a/iree/compiler/Conversion/LinalgToLLVM/LinalgVectorizePass.cpp b/iree/compiler/Conversion/LinalgToLLVM/LinalgVectorizePass.cpp
index ada0274..5c7ac44 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/LinalgVectorizePass.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/LinalgVectorizePass.cpp
@@ -58,10 +58,10 @@
   MLIRContext *context = &getContext();
   // Apply vectorization patterns.
   {
-    OwningRewritePatternList vectorizationPatterns;
+    OwningRewritePatternList vectorizationPatterns(&getContext());
     linalg::insertVectorizationPatterns<linalg::GenericOp,
                                         linalg::ContractionOpInterface>(
-        vectorizationPatterns, context, linalg::LinalgVectorizationOptions(),
+        vectorizationPatterns, linalg::LinalgVectorizationOptions(),
         linalg::LinalgTransformationFilter(ArrayRef<Identifier>(
             Identifier::get(getWorkgroupMarker(), context))));
     (void)applyPatternsAndFoldGreedily(funcOp,
@@ -84,22 +84,21 @@
 
   // Apply unrolling patterns.
   {
-    OwningRewritePatternList vectorUnrollPatterns;
+    OwningRewritePatternList vectorUnrollPatterns(&getContext());
     vectorUnrollPatterns.insert<vector::UnrollVectorPattern>(
         context, vector::UnrollVectorOptions().setNativeShapeFn(getShape));
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(vectorUnrollPatterns));
 
-    OwningRewritePatternList canonicalizationPatterns1;
+    OwningRewritePatternList canonicalizationPatterns1(&getContext());
     vector::populateVectorToVectorCanonicalizationPatterns(
-        canonicalizationPatterns1, funcOp.getContext());
+        canonicalizationPatterns1);
     vector::populateVectorToVectorTransformationPatterns(
-        canonicalizationPatterns1, funcOp.getContext());
+        canonicalizationPatterns1);
     (void)applyPatternsAndFoldGreedily(funcOp,
                                        std::move(canonicalizationPatterns1));
 
-    OwningRewritePatternList canonicalizationPatterns2;
-    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns2,
-                                                 funcOp.getContext());
+    OwningRewritePatternList canonicalizationPatterns2(&getContext());
+    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns2);
     (void)applyPatternsAndFoldGreedily(funcOp,
                                        std::move(canonicalizationPatterns2));
 
diff --git a/iree/compiler/Conversion/LinalgToLLVM/PlanConvLoopOrder.cpp b/iree/compiler/Conversion/LinalgToLLVM/PlanConvLoopOrder.cpp
index b6a596b..3f87a4a 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/PlanConvLoopOrder.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/PlanConvLoopOrder.cpp
@@ -55,9 +55,8 @@
       /*output_channel=*/3,
   };
 
-  OwningRewritePatternList patterns;
-  linalg::populateLinalgConvGeneralizationPatterns(context, patterns,
-                                                   firstStepMarker);
+  OwningRewritePatternList patterns(&getContext());
+  linalg::populateLinalgConvGeneralizationPatterns(patterns, firstStepMarker);
   patterns.insert<linalg::LinalgInterchangePattern<linalg::GenericOp>>(
       context, loopOrder, secondStepMarker);
 
diff --git a/iree/compiler/Conversion/LinalgToLLVM/UnfuseFMAOps.cpp b/iree/compiler/Conversion/LinalgToLLVM/UnfuseFMAOps.cpp
index 9890cf7..d2b0243 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/UnfuseFMAOps.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/UnfuseFMAOps.cpp
@@ -58,7 +58,7 @@
 void UnfusedFMAOpsPass::runOnFunction() {
   auto funcOp = getOperation();
   auto context = funcOp.getContext();
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   populateUnfusedFMAOpsPassPatterns(context, patterns);
   (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
 }
diff --git a/iree/compiler/Conversion/LinalgToLLVM/test/matmul_vectorization.mlir b/iree/compiler/Conversion/LinalgToLLVM/test/matmul_vectorization.mlir
index b64ef0a..98e9489 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/test/matmul_vectorization.mlir
+++ b/iree/compiler/Conversion/LinalgToLLVM/test/matmul_vectorization.mlir
@@ -52,14 +52,14 @@
 // CHECK-PROMOTED: #[[MAP1:.+]] = affine_map<(d0, d1)[s0] -> (d0 * 128 + s0 + d1)>
 // CHECK-PROMOTED: func @matmul_128x128x128
 // CHECK-PROMOTED: (%[[ARG0:.+]]: memref<128x128xf32>, %[[ARG1:.+]]: memref<128x128xf32>, %[[ARG2:.+]]: memref<128x128xf32>) {
-// CHECK-PROMOTED: %[[KDIM_SIZE:.+]] = constant 128 : index
-// CHECK-PROMOTED: %[[WORGKROUP_SIZE:.+]] = constant 64 : index
-// CHECK-PROMOTED: %[[VECTOR_SIZE:.+]] = constant 4 : index
-// CHECK-PROMOTED: %[[L1_SIZE:.+]] = constant 32 : index
-// CHECK-PROMOTED: %[[START:.+]] = constant 0 : index
-// CHECK-PROMOTED: %[[C1:.+]] = constant 1 : index
-// CHECK-PROMOTED: %[[C1:.+]] = constant 2 : index
-// CHECK-PROMOTED: %[[C1:.+]] = constant 3 : index
+// CHECK-PROMOTED-DAG: %[[KDIM_SIZE:.+]] = constant 128 : index
+// CHECK-PROMOTED-DAG: %[[WORGKROUP_SIZE:.+]] = constant 64 : index
+// CHECK-PROMOTED-DAG: %[[VECTOR_SIZE:.+]] = constant 4 : index
+// CHECK-PROMOTED-DAG: %[[L1_SIZE:.+]] = constant 32 : index
+// CHECK-PROMOTED-DAG: %[[START:.+]] = constant 0 : index
+// CHECK-PROMOTED-DAG: %[[C1:.+]] = constant 1 : index
+// CHECK-PROMOTED-DAG: %[[C1:.+]] = constant 2 : index
+// CHECK-PROMOTED-DAG: %[[C1:.+]] = constant 3 : index
 // CHECK-PROMOTED: %[[A_PROMOTED_TILE:.+]] = memref.alloca() : memref<64x64xf32>
 // CHECK-PROMOTED: %[[B_PROMOTED_TILE:.+]] = memref.alloca() : memref<128x64xf32>
 // CHECK-PROMOTED: %[[C_PROMOTED_TILE:.+]] = memref.alloca() : memref<64x128xf32>
diff --git a/iree/compiler/Conversion/LinalgToNVVM/ConvertToNVVM.cpp b/iree/compiler/Conversion/LinalgToNVVM/ConvertToNVVM.cpp
index 786fa31..75708ae 100644
--- a/iree/compiler/Conversion/LinalgToNVVM/ConvertToNVVM.cpp
+++ b/iree/compiler/Conversion/LinalgToNVVM/ConvertToNVVM.cpp
@@ -184,12 +184,12 @@
     // which need to be lowered further, which is not supported by a single
     // conversion pass.
     {
-      OwningRewritePatternList patterns;
-      populateGpuRewritePatterns(m.getContext(), patterns);
+      OwningRewritePatternList patterns(&getContext());
+      populateGpuRewritePatterns(patterns);
       (void)applyPatternsAndFoldGreedily(m, std::move(patterns));
     }
     {
-      OwningRewritePatternList llvmPatterns;
+      OwningRewritePatternList llvmPatterns(&getContext());
       llvmPatterns.insert<ConvertFunc, ConvertIREEBindingOp>(m.getContext(),
                                                              converter);
       llvmPatterns
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/ConcretizeTileAmongWorkgroupsPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/ConcretizeTileAmongWorkgroupsPass.cpp
index abce25c..934b9d9 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/ConcretizeTileAmongWorkgroupsPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/ConcretizeTileAmongWorkgroupsPass.cpp
@@ -462,7 +462,7 @@
     // 4. Replace hal.interface.workgroup symbolic ops with constant values.
 
     {
-      OwningRewritePatternList patterns;
+      OwningRewritePatternList patterns(&getContext());
       patterns.insert<ConcretizeWorkgroupSizeOp, ConcretizeWorkgroupCountOp>(
           &context, workloadSize, tileSize);
 
@@ -530,7 +530,7 @@
     // 6. Canonicalization and clean up.
 
     if (inlineTripOneLoops) {
-      OwningRewritePatternList patterns;
+      OwningRewritePatternList patterns(&getContext());
       patterns.insert<RemoveTripOneLoop>(&context, workloadSize, tileSize);
 
       (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToGPUPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToGPUPass.cpp
index bee5dd7..172e9a9 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToGPUPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToGPUPass.cpp
@@ -824,7 +824,7 @@
   // Let the rest fall through.
   target.markUnknownOpDynamicallyLegal([](Operation *) { return true; });
 
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
 
   patterns.insert<
       MapLinalgOpToGlobalInvocationId<linalg::CopyOp>,
@@ -845,7 +845,7 @@
       MapLinalgOpToLocalInvocationId<linalg::PoolingNHWCSumOp>,
       RemoveLinalgRange, SerializeParallelLoopPattern>(
       context, options.usingLinalgOnTensors);
-  FrozenRewritePatternList frozenPatterns(std::move(patterns));
+  FrozenRewritePatternSet frozenPatterns(std::move(patterns));
 
   for (FuncOp funcOp : getOperation().getInnerModule().getOps<FuncOp>()) {
     if (!isEntryPoint(funcOp)) continue;
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
index e4808a3..7b55c8e 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
@@ -539,27 +539,25 @@
   SPIRVTypeConverter typeConverter(targetAttr);
   ScfToSPIRVContext scfToSPIRVContext;
 
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   // Pull in GPU patterns to convert processor ID ops and loop ops.
-  populateGPUToSPIRVPatterns(context, typeConverter, patterns);
+  populateGPUToSPIRVPatterns(typeConverter, patterns);
   // Pull in SCF patterns to convert control flow ops.
-  populateSCFToSPIRVPatterns(context, typeConverter, scfToSPIRVContext,
-                             patterns);
+  populateSCFToSPIRVPatterns(typeConverter, scfToSPIRVContext, patterns);
   // Pull in standard patterns to convert arithmetic ops and others.
-  populateStandardToSPIRVPatterns(context, typeConverter, patterns);
+  populateStandardToSPIRVPatterns(typeConverter, patterns);
   // Pull in standard patterns to convert tensor operations to SPIR-V. These are
   // primarily used to handle tensor-type constants and contain a
   // threshold. Only those constants that are below the threshold are converted
   // to SPIR-V. In IREE we want to control this threshold at Flow level. So set
   // this value arbitrarily high to make sure that everything within a dispatch
   // region is converted.
-  mlir::populateTensorToSPIRVPatterns(context, typeConverter,
-                                      std::numeric_limits<int64_t>::max() / 8,
-                                      patterns);
+  mlir::populateTensorToSPIRVPatterns(
+      typeConverter, std::numeric_limits<int64_t>::max() / 8, patterns);
   // Pull in vector patterns to convert vector ops.
-  mlir::populateVectorToSPIRVPatterns(context, typeConverter, patterns);
+  mlir::populateVectorToSPIRVPatterns(typeConverter, patterns);
   // Pull in builtin func to spv.func conversion.
-  populateBuiltinFuncToSPIRVPatterns(context, typeConverter, patterns);
+  populateBuiltinFuncToSPIRVPatterns(typeConverter, patterns);
   auto &cooperativeMatrixAnalysis = getAnalysis<CooperativeMatrixAnalysis>();
   populateVectorToSPIRVPatterns(context, typeConverter, patterns,
                                 cooperativeMatrixAnalysis);
@@ -593,7 +591,7 @@
     functions.push_back(fn);
   }
 
-  FrozenRewritePatternList frozenPatterns(std::move(patterns));
+  FrozenRewritePatternSet frozenPatterns(std::move(patterns));
   for (FuncOp fn : functions)
     if (failed(applyFullConversion(fn, *target, frozenPatterns)))
       return signalPassFailure();
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/FoldGPUProcessorIDUses.cpp b/iree/compiler/Conversion/LinalgToSPIRV/FoldGPUProcessorIDUses.cpp
index 323832d..1e35b13 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/FoldGPUProcessorIDUses.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/FoldGPUProcessorIDUses.cpp
@@ -275,7 +275,7 @@
 
   void runOnOperation() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     populateFoldGPUProcessorIDUsesPatterns(context, patterns);
     (void)applyPatternsAndFoldGreedily(getOperation().getInnerModule(),
                                        std::move(patterns));
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/TileAndVectorizeInOneWorkgroupPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/TileAndVectorizeInOneWorkgroupPass.cpp
index ee9e20f..b351412 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/TileAndVectorizeInOneWorkgroupPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/TileAndVectorizeInOneWorkgroupPass.cpp
@@ -308,7 +308,7 @@
                                           OwningRewritePatternList &patterns) {
   linalg::insertVectorizationPatterns<linalg::FillOp, linalg::GenericOp,
                                       linalg::ContractionOpInterface>(
-      patterns, context, linalg::LinalgVectorizationOptions(),
+      patterns, linalg::LinalgVectorizationOptions(),
       linalg::LinalgTransformationFilter(
           Identifier::get(getVectorizeMarker(), context)));
 }
@@ -330,23 +330,21 @@
 
 static void applyVectorTransformation(FuncOp funcOp) {
   {
-    OwningRewritePatternList vectorUnrollPatterns;
+    OwningRewritePatternList vectorUnrollPatterns(funcOp.getContext());
     populateVectorUnrollPatterns(funcOp.getContext(), vectorUnrollPatterns);
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(vectorUnrollPatterns));
 
-    OwningRewritePatternList canonicalizationPatterns1;
+    OwningRewritePatternList canonicalizationPatterns1(funcOp.getContext());
     vector::populateVectorToVectorCanonicalizationPatterns(
-        canonicalizationPatterns1, funcOp.getContext());
+        canonicalizationPatterns1);
     vector::populateVectorToVectorTransformationPatterns(
-        canonicalizationPatterns1, funcOp.getContext());
-    vector::populateSplitVectorTransferPatterns(canonicalizationPatterns1,
-                                                funcOp.getContext());
+        canonicalizationPatterns1);
+    vector::populateSplitVectorTransferPatterns(canonicalizationPatterns1);
     (void)applyPatternsAndFoldGreedily(funcOp,
                                        std::move(canonicalizationPatterns1));
 
-    OwningRewritePatternList canonicalizationPatterns2;
-    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns2,
-                                                 funcOp.getContext());
+    OwningRewritePatternList canonicalizationPatterns2(funcOp.getContext());
+    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns2);
     (void)applyPatternsAndFoldGreedily(funcOp,
                                        std::move(canonicalizationPatterns2));
     LLVM_DEBUG({
@@ -450,7 +448,7 @@
       // The promotion patterns are put separate from the tiling patterns to
       // make sure that the allocated scratchspace memory is constant sizes
       // which requires some folding to trigger.
-      OwningRewritePatternList promotionPatterns;
+      OwningRewritePatternList promotionPatterns(&getContext());
       populatePromotionPatterns(context, promotionPatterns);
       (void)applyPatternsAndFoldGreedily(funcOp, std::move(promotionPatterns));
       applyCanonicalizationPatternsForTiling(context, funcOp);
@@ -464,7 +462,7 @@
 
     if (launchConfig.useVectorize()) {
       {
-        OwningRewritePatternList secondLevelTilingPatterns;
+        OwningRewritePatternList secondLevelTilingPatterns(&getContext());
         populateTilingToSubgroupPatterns(context, launchConfig,
                                          secondLevelTilingPatterns);
         (void)applyPatternsAndFoldGreedily(
@@ -480,7 +478,7 @@
       }
 
       {
-        OwningRewritePatternList thirdLevelTilingPatterns;
+        OwningRewritePatternList thirdLevelTilingPatterns(&getContext());
         populateTilingToInvocationPatterns(context, launchConfig,
                                            thirdLevelTilingPatterns);
         (void)applyPatternsAndFoldGreedily(funcOp,
@@ -496,7 +494,7 @@
       }
 
       {
-        OwningRewritePatternList tilingPatterns;
+        OwningRewritePatternList tilingPatterns(&getContext());
         auto marker = getLinalgMatchAndReplaceMarker(
             getConvFilterTileMarker(), getVectorizeMarker(), context);
         populateTilingConvFilterPatterns(context, tilingPatterns, launchConfig,
@@ -515,7 +513,7 @@
       }
 
       {
-        OwningRewritePatternList vectorizationPatterns;
+        OwningRewritePatternList vectorizationPatterns(&getContext());
         populateVectorizationPatterns(context, launchConfig,
                                       vectorizationPatterns);
         populateVectorizeLinalgConvPatterns(context, vectorizationPatterns);
@@ -555,9 +553,8 @@
                            linalg::DepthwiseConvInputNHWCFilterHWCOp>(op));
       });
 
-      OwningRewritePatternList patterns;
-      linalg::populateLinalgNamedOpsGeneralizationPatterns(context, patterns,
-                                                           marker);
+      OwningRewritePatternList patterns(&getContext());
+      linalg::populateLinalgNamedOpsGeneralizationPatterns(patterns, marker);
 
       (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
 
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/VectorToGPUPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/VectorToGPUPass.cpp
index 79d64cd..e075591 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/VectorToGPUPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/VectorToGPUPass.cpp
@@ -180,7 +180,7 @@
     return !(hasMarker(copy, getCopyToWorkgroupMemoryMarker()));
   });
   target->markUnknownOpDynamicallyLegal([](Operation *) { return true; });
-  OwningRewritePatternList tileAndDistributePattern;
+  OwningRewritePatternList tileAndDistributePattern(&getContext());
   populateLinalgTileAndDistributePatterns(context, tileAndDistributePattern);
   if (failed(applyPartialConversion(funcOp, *target,
                                     std::move(tileAndDistributePattern)))) {
@@ -196,9 +196,9 @@
   (void)applyPatternsAndFoldGreedily(funcOp, std::move(canonicalizePatterns));
 
   // 3. Vectorize the tiled linalg to be able to map it to load/store vector.
-  OwningRewritePatternList vectorizationPatterns;
+  OwningRewritePatternList vectorizationPatterns(&getContext());
   linalg::insertVectorizationPatterns<linalg::CopyOp>(
-      vectorizationPatterns, context, linalg::LinalgVectorizationOptions(),
+      vectorizationPatterns, linalg::LinalgVectorizationOptions(),
       linalg::LinalgTransformationFilter(
           Identifier::get(getVectorizeMarker(), context), {}));
   (void)applyPatternsAndFoldGreedily(funcOp, std::move(vectorizationPatterns));
@@ -366,7 +366,7 @@
 // Lower vector ops to instructions that can be later converted to SPIR-V.
 void ConvertVectorToGPUPass::lowerVectorOps(FuncOp funcOp,
                                             MLIRContext *context) {
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   patterns.insert<VectorContractLowering, VectorTransferReadToLoad,
                   VectorTransferWriteToStore, ExtractStridedLowering,
                   ElementwiseLowering>(context);
@@ -381,7 +381,7 @@
   lowerVectorOps(funcOp, context);
 
   auto &cooperativeMatrixAnalysis = getAnalysis<CooperativeMatrixAnalysis>();
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   patterns.insert<UnaryAndBinaryOpPattern<AddFOp>, VectorTransferReadConversion,
                   VectorTransferWriteConversion>(context,
                                                  cooperativeMatrixAnalysis);
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/VectorizeMemref.cpp b/iree/compiler/Conversion/LinalgToSPIRV/VectorizeMemref.cpp
index 8a6fbe0..c968c9a 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/VectorizeMemref.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/VectorizeMemref.cpp
@@ -440,7 +440,7 @@
 
   memrefUsageAnalysis = &getAnalysis<MemRefUsageAnalysis>();
 
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   patterns.insert<ProcessFuncArg, ProcessTransferRead, ProcessTransferWrite,
                   ProcessAlloc, ProcessPlaceHolder, ProcessInterfaceBinding>(
       context, *memrefUsageAnalysis);
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/test/materialize_launch_configuration.mlir b/iree/compiler/Conversion/LinalgToSPIRV/test/materialize_launch_configuration.mlir
index 5fc2981..07cec3e 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/test/materialize_launch_configuration.mlir
+++ b/iree/compiler/Conversion/LinalgToSPIRV/test/materialize_launch_configuration.mlir
@@ -64,10 +64,10 @@
 //   CHECK-DAG:     %[[WGY:.+]] = affine.apply #[[MAP1]]()[%[[ARG1]]]
 //       CHECK:     hal.return %[[WGX]], %[[WGY]], %[[C1]]
 //   CHECK-NOT:   hal.interface.workgroup.size
-//   CHECK-DAG:   %[[C0:.+]] = constant 0
-//   CHECK-DAG:   %[[C1:.+]] = constant 1
-//   CHECK-DAG:   %[[C16:.+]] = constant 16
-//   CHECK-DAG:   %[[C8:.+]] = constant 8
+//   CHECK-DAG:   %[[C0:.+]] = constant 0 : index
+//   CHECK-DAG:   %[[C1:.+]] = constant 1 : index
+//   CHECK-DAG:   %[[C16:.+]] = constant 16 : index
+//   CHECK-DAG:   %[[C8:.+]] = constant 8 : index
 //   CHECK-DAG:   %[[LHS:.+]] = hal.interface.binding.subspan @legacy_io::@arg0
 //   CHECK-DAG:   %[[RHS:.+]] = hal.interface.binding.subspan @legacy_io::@arg1
 //   CHECK-DAG:   %[[INIT:.+]] = hal.interface.binding.subspan @legacy_io::@arg2
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/test/vector_to_gpu.mlir b/iree/compiler/Conversion/LinalgToSPIRV/test/vector_to_gpu.mlir
index 46f667d..6c9ad18 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/test/vector_to_gpu.mlir
+++ b/iree/compiler/Conversion/LinalgToSPIRV/test/vector_to_gpu.mlir
@@ -33,9 +33,9 @@
   }
     // CHECK: #[[MAP1:.+]] = affine_map<(d0) -> (d0 * 4)>
 
-    // CHECK: %[[C1024:.+]] = constant 1024 : index
-    // CHECK: %[[C8:.+]] = constant 8 : index
-    // CHECK: %[[C0:.+]] = constant 0 : index
+    // CHECK-DAG: %[[C1024:.+]] = constant 1024 : index
+    // CHECK-DAG: %[[C8:.+]] = constant 8 : index
+    // CHECK-DAG: %[[C0:.+]] = constant 0 : index
     // CHECK: %[[ALLOC:.+]] = memref.alloc() : memref<128x32xf32, 3>
     // CHECK: %[[DST:.+]]  = memref.subview %{{.+}}[0, 0] [128, 32] [1, 1]  : memref<4096x4096xf32> to memref<128x32xf32, #map0>
     // CHECK: %[[TIDx:.+]] = "gpu.thread_id"() {dimension = "x"} : () -> index
diff --git a/iree/compiler/Conversion/LinalgToVector/LoadStoreVectorization.cpp b/iree/compiler/Conversion/LinalgToVector/LoadStoreVectorization.cpp
index 0476a21..221d971 100644
--- a/iree/compiler/Conversion/LinalgToVector/LoadStoreVectorization.cpp
+++ b/iree/compiler/Conversion/LinalgToVector/LoadStoreVectorization.cpp
@@ -230,7 +230,7 @@
 
   void runOnOperation() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     // clang-format off
     patterns.insert<
         VectorizeGenericOp,
diff --git a/iree/compiler/Conversion/LinalgToVector/VectorizeConv.cpp b/iree/compiler/Conversion/LinalgToVector/VectorizeConv.cpp
index 9e0ee62..14ad4ba 100644
--- a/iree/compiler/Conversion/LinalgToVector/VectorizeConv.cpp
+++ b/iree/compiler/Conversion/LinalgToVector/VectorizeConv.cpp
@@ -347,7 +347,7 @@
 
   void runOnOperation() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<VectorizeLinalgConv, VectorizeLinalgDepthwiseConv>(context);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
   }
diff --git a/iree/compiler/Conversion/LinalgToVector/test/vectorize_linalg_conv.mlir b/iree/compiler/Conversion/LinalgToVector/test/vectorize_linalg_conv.mlir
index e92ec49..69e79db 100644
--- a/iree/compiler/Conversion/LinalgToVector/test/vectorize_linalg_conv.mlir
+++ b/iree/compiler/Conversion/LinalgToVector/test/vectorize_linalg_conv.mlir
@@ -1,9 +1,10 @@
 // RUN: iree-opt -split-input-file -iree-codegen-vectorize-linalg-conv -canonicalize -cse %s | IreeFileCheck %s
 
-func @vectorize_conv(%filter: memref<1x1x3x4xf32>, %input: memref<1x2x2x3xf32>, %output: memref<1x2x2x4xf32>) {
-  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 3, 4] [1, 1, 1, 1]  : memref<1x1x3x4xf32> to memref<1x1x3x4xf32>
-  %1 = memref.subview %input[0, 0, 0, 0] [1, 2, 2, 3] [1, 1, 1, 1]  : memref<1x2x2x3xf32> to memref<1x2x2x3xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 2, 2, 4] [1, 1, 1, 1]  : memref<1x2x2x4xf32> to memref<1x2x2x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @vectorize_conv(%filter: memref<2x1x3x4xf32>, %input: memref<2x2x2x3xf32>, %output: memref<2x2x2x4xf32>) {
+  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 3, 4] [1, 1, 1, 1]  : memref<2x1x3x4xf32> to memref<1x1x3x4xf32>
+  %1 = memref.subview %input[0, 0, 0, 0] [1, 2, 2, 3] [1, 1, 1, 1]  : memref<2x2x2x3xf32> to memref<1x2x2x3xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 2, 2, 4] [1, 1, 1, 1]  : memref<2x2x2x4xf32> to memref<1x2x2x4xf32>
   linalg.conv_2d_input_nhwc_filter_hwcf {dilations = dense<1> : vector<2xi64>, strides = dense<1> : vector<2xi64>}
      ins (%1, %0: memref<1x2x2x3xf32>, memref<1x1x3x4xf32>)
     outs (%2: memref<1x2x2x4xf32>)
@@ -15,69 +16,74 @@
 // CHECK: #map2 = affine_map<(d0, d1, d2) -> (d0, d1)>
 
 // CHECK: func @vectorize_conv
-// CHECK-SAME: %[[FILTER_ARG:.+]]: memref<1x1x3x4xf32>,
-// CHECK-SAME: %[[INPUT_ARG:.+]]: memref<1x2x2x3xf32>,
-// CHECK-SAME: %[[OUTPUT_ARG:.+]]: memref<1x2x2x4xf32>
+// CHECK-SAME: %[[FILTER_ARG:.+]]: memref<2x1x3x4xf32>,
+// CHECK-SAME: %[[INPUT_ARG:.+]]: memref<2x2x2x3xf32>,
+// CHECK-SAME: %[[OUTPUT_ARG:.+]]: memref<2x2x2x4xf32>
 
 // CHECK: %[[FLOAT_ZERO:.+]] = constant 0.000000e+00 : f32
 
+// CHECK-DAG: %[[FILTER_SUBVIEW:.+]] = memref.subview %[[FILTER_ARG]]{{.*}} to memref<1x1x3x4xf32>
+// CHECK-DAG: %[[INPUT_SUBVIEW:.+]] = memref.subview %[[INPUT_ARG]]{{.*}} to memref<1x2x2x3xf32>
+// CHECK-DAG: %[[OUTPUT_SUBVIEW:.+]] = memref.subview %[[OUTPUT_ARG]]{{.*}} to memref<1x2x2x4xf32>
+
 // Read in the filter and get slices
-// CHECK: %[[FILTER_VECTOR:.+]] = vector.transfer_read %[[FILTER_ARG]][%c0, %c0, %c0, %c0], %cst {masked = [false, false]} : memref<1x1x3x4xf32>, vector<3x4xf32>
+// CHECK: %[[FILTER_VECTOR:.+]] = vector.transfer_read %[[FILTER_SUBVIEW]][%c0, %c0, %c0, %c0], %cst {masked = [false, false]} : memref<1x1x3x4xf32>, vector<3x4xf32>
 // CHECK: %[[FILTER_0:.+]] = vector.extract_strided_slice %[[FILTER_VECTOR]] {offsets = [0, 0], sizes = [1, 4], strides = [1, 1]} : vector<3x4xf32> to vector<1x4xf32>
 // CHECK: %[[FILTER_1:.+]] = vector.extract_strided_slice %[[FILTER_VECTOR]] {offsets = [1, 0], sizes = [1, 4], strides = [1, 1]} : vector<3x4xf32> to vector<1x4xf32>
 // CHECK: %[[FILTER_2:.+]] = vector.extract_strided_slice %[[FILTER_VECTOR]] {offsets = [2, 0], sizes = [1, 4], strides = [1, 1]} : vector<3x4xf32> to vector<1x4xf32>
 
 // Handle batch #0
-// CHECK: %[[INPUT_0:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
-// CHECK: %[[OUTPUT_0:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
+// CHECK: %[[INPUT_0:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
+// CHECK: %[[OUTPUT_0:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
 // CHECK: %[[INPUT_0_0:.+]] = vector.extract_strided_slice %[[INPUT_0]] {offsets = [0, 0], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_0:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_0_0]], %[[FILTER_0]], %[[OUTPUT_0]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_0_1:.+]] = vector.extract_strided_slice %[[INPUT_0]] {offsets = [0, 1], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_1:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_0_1]], %[[FILTER_1]], %[[DOT_0]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_0_2:.+]] = vector.extract_strided_slice %[[INPUT_0]] {offsets = [0, 2], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_2:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_0_2]], %[[FILTER_2]], %[[DOT_1]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
-// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_ARG]][%c0, %c0, %c0, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
+// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
 
 // Handle batch #1
-// CHECK: %[[INPUT_1:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
-// CHECK: %[[OUTPUT_1:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
+// CHECK: %[[INPUT_1:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
+// CHECK: %[[OUTPUT_1:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
 // CHECK: %[[INPUT_1_0:.+]] = vector.extract_strided_slice %[[INPUT_1]] {offsets = [0, 0], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_0:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_1_0]], %[[FILTER_0]], %[[OUTPUT_1]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_1_1:.+]] = vector.extract_strided_slice %[[INPUT_1]] {offsets = [0, 1], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_1:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_1_1]], %[[FILTER_1]], %[[DOT_0]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_1_2:.+]] = vector.extract_strided_slice %[[INPUT_1]] {offsets = [0, 2], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_2:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_1_2]], %[[FILTER_2]], %[[DOT_1]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
-// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_ARG]][%c0, %c0, %c1, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
+// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
 
 // Handle batch #2
-// CHECK: %[[INPUT_2:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c1, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
-// CHECK: %[[OUTPUT_2:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
+// CHECK: %[[INPUT_2:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c1, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
+// CHECK: %[[OUTPUT_2:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
 // CHECK: %[[INPUT_2_0:.+]] = vector.extract_strided_slice %[[INPUT_2]] {offsets = [0, 0], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_0:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_2_0]], %[[FILTER_0]], %[[OUTPUT_2]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_2_1:.+]] = vector.extract_strided_slice %[[INPUT_2]] {offsets = [0, 1], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_1:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_2_1]], %[[FILTER_1]], %[[DOT_0]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_2_2:.+]] = vector.extract_strided_slice %[[INPUT_2]] {offsets = [0, 2], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_2:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_2_2]], %[[FILTER_2]], %[[DOT_1]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
-// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_ARG]][%c0, %c1, %c0, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
+// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
 
 // Handle batch #3
-// CHECK: %[[INPUT_3:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c1, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
-// CHECK: %[[OUTPUT_3:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
+// CHECK: %[[INPUT_3:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c1, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x3xf32>, vector<1x3xf32>
+// CHECK: %[[OUTPUT_3:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c0], %[[FLOAT_ZERO]] {masked = [false, false]} : memref<1x2x2x4xf32>, vector<1x4xf32>
 // CHECK: %[[INPUT_3_0:.+]] = vector.extract_strided_slice %[[INPUT_3]] {offsets = [0, 0], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_0:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_3_0]], %[[FILTER_0]], %[[OUTPUT_3]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_3_1:.+]] = vector.extract_strided_slice %[[INPUT_3]] {offsets = [0, 1], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_1:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_3_1]], %[[FILTER_1]], %[[DOT_0]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
 // CHECK: %[[INPUT_3_2:.+]] = vector.extract_strided_slice %[[INPUT_3]] {offsets = [0, 2], sizes = [1, 1], strides = [1, 1]} : vector<1x3xf32> to vector<1x1xf32>
 // CHECK: %[[DOT_2:.+]] = vector.contract {indexing_maps = [#map0, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind<add>} %[[INPUT_3_2]], %[[FILTER_2]], %[[DOT_1]] : vector<1x1xf32>, vector<1x4xf32> into vector<1x4xf32>
-// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_ARG]][%c0, %c1, %c1, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
+// CHECK: vector.transfer_write %[[DOT_2]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c0] {masked = [false, false]} : vector<1x4xf32>, memref<1x2x2x4xf32>
 
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_conv_with_non_1_batch
-func @do_not_vectorize_conv_with_non_1_batch(%filter: memref<1x1x4x4xf32>, %input: memref<2x1x7x4xf32>, %output: memref<2x1x4x4xf32>) {
-  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
-  %1 = memref.subview %input[0, 0, 0, 0] [2, 1, 7, 4] [1, 1, 1, 1]  : memref<2x1x7x4xf32> to memref<2x1x7x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [2, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<2x1x4x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_conv_with_non_1_batch(%filter: memref<2x1x4x4xf32>, %input: memref<3x1x7x4xf32>, %output: memref<3x1x4x4xf32>) {
+  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
+  %1 = memref.subview %input[0, 0, 0, 0] [2, 1, 7, 4] [1, 1, 1, 1]  : memref<3x1x7x4xf32> to memref<2x1x7x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [2, 1, 4, 4] [1, 1, 1, 1]  : memref<3x1x4x4xf32> to memref<2x1x4x4xf32>
   // CHECK: linalg.conv_2d_input_nhwc_filter_hwcf
   linalg.conv_2d_input_nhwc_filter_hwcf {dilations = dense<1> : vector<2xi64>, strides = dense<2> : vector<2xi64>}
      ins (%1, %0: memref<2x1x7x4xf32>, memref<1x1x4x4xf32>)
@@ -88,10 +94,11 @@
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_conv_with_non_1_filter_height
-func @do_not_vectorize_conv_with_non_1_filter_height(%filter: memref<2x1x4x4xf32>, %input: memref<1x2x7x4xf32>, %output: memref<1x1x4x4xf32>) {
-  %0 = memref.subview %filter[0, 0, 0, 0] [2, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<2x1x4x4xf32>
-  %1 = memref.subview %input[0, 0, 0, 0] [1, 2, 7, 4] [1, 1, 1, 1]  : memref<1x2x7x4xf32> to memref<1x2x7x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_conv_with_non_1_filter_height(%filter: memref<3x1x4x4xf32>, %input: memref<2x2x7x4xf32>, %output: memref<2x1x4x4xf32>) {
+  %0 = memref.subview %filter[0, 0, 0, 0] [2, 1, 4, 4] [1, 1, 1, 1]  : memref<3x1x4x4xf32> to memref<2x1x4x4xf32>
+  %1 = memref.subview %input[0, 0, 0, 0] [1, 2, 7, 4] [1, 1, 1, 1]  : memref<2x2x7x4xf32> to memref<1x2x7x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
   // CHECK: linalg.conv_2d_input_nhwc_filter_hwcf
   linalg.conv_2d_input_nhwc_filter_hwcf {dilations = dense<1> : vector<2xi64>, strides = dense<2> : vector<2xi64>}
      ins (%1, %0: memref<1x2x7x4xf32>, memref<2x1x4x4xf32>)
@@ -102,10 +109,11 @@
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_conv_with_non_1_filter_width
-func @do_not_vectorize_conv_with_non_1_filter_width(%filter: memref<1x2x4x4xf32>, %input: memref<1x1x8x4xf32>, %output: memref<1x1x4x4xf32>) {
-  %0 = memref.subview %filter[0, 0, 0, 0] [1, 2, 4, 4] [1, 1, 1, 1]  : memref<1x2x4x4xf32> to memref<1x2x4x4xf32>
-  %1 = memref.subview %input[0, 0, 0, 0] [1, 1, 8, 4] [1, 1, 1, 1]  : memref<1x1x8x4xf32> to memref<1x1x8x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_conv_with_non_1_filter_width(%filter: memref<2x2x4x4xf32>, %input: memref<2x1x8x4xf32>, %output: memref<2x1x4x4xf32>) {
+  %0 = memref.subview %filter[0, 0, 0, 0] [1, 2, 4, 4] [1, 1, 1, 1]  : memref<2x2x4x4xf32> to memref<1x2x4x4xf32>
+  %1 = memref.subview %input[0, 0, 0, 0] [1, 1, 8, 4] [1, 1, 1, 1]  : memref<2x1x8x4xf32> to memref<1x1x8x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
   // CHECK: linalg.conv_2d_input_nhwc_filter_hwcf
   linalg.conv_2d_input_nhwc_filter_hwcf {dilations = dense<1> : vector<2xi64>, strides = dense<2> : vector<2xi64>}
      ins (%1, %0: memref<1x1x8x4xf32>, memref<1x2x4x4xf32>)
@@ -116,10 +124,11 @@
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_conv_with_non_1_dilation
-func @do_not_vectorize_conv_with_non_1_dilation(%filter: memref<1x1x4x4xf32>, %input: memref<1x1x7x4xf32>, %output: memref<1x1x4x4xf32>) {
-  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
-  %1 = memref.subview %input[0, 0, 0, 0] [1, 1, 7, 4] [1, 1, 1, 1]  : memref<1x1x7x4xf32> to memref<1x1x7x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_conv_with_non_1_dilation(%filter: memref<2x1x4x4xf32>, %input: memref<2x1x7x4xf32>, %output: memref<2x1x4x4xf32>) {
+  %0 = memref.subview %filter[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
+  %1 = memref.subview %input[0, 0, 0, 0] [1, 1, 7, 4] [1, 1, 1, 1]  : memref<2x1x7x4xf32> to memref<1x1x7x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
   // CHECK: linalg.conv_2d_input_nhwc_filter_hwcf
   linalg.conv_2d_input_nhwc_filter_hwcf {dilations = dense<[2, 1]> : vector<2xi64>, strides = dense<2> : vector<2xi64>}
      ins (%1, %0: memref<1x1x7x4xf32>, memref<1x1x4x4xf32>)
@@ -129,76 +138,82 @@
 
 // -----
 
-func @vectorize_depthwise_conv(%input: memref<1x3x3x8xf32>, %filter: memref<1x1x8xf32>, %output: memref<1x2x2x8xf32>) {
-  %0 = memref.subview %input[0, 0, 0, 0] [1, 3, 3, 8] [1, 1, 1, 1]  : memref<1x3x3x8xf32> to memref<1x3x3x8xf32>
-  %1 = memref.subview %filter[0, 0, 0] [1, 1, 8] [1, 1, 1]  : memref<1x1x8xf32> to memref<1x1x8xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 2, 2, 8] [1, 1, 1, 1]  : memref<1x2x2x8xf32> to memref<1x2x2x8xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @vectorize_depthwise_conv(%input: memref<2x3x3x8xf32>, %filter: memref<2x1x8xf32>, %output: memref<2x2x2x8xf32>) {
+  %0 = memref.subview %input[0, 0, 0, 0] [1, 3, 3, 8] [1, 1, 1, 1]  : memref<2x3x3x8xf32> to memref<1x3x3x8xf32>
+  %1 = memref.subview %filter[0, 0, 0] [1, 1, 8] [1, 1, 1]  : memref<2x1x8xf32> to memref<1x1x8xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 2, 2, 8] [1, 1, 1, 1]  : memref<2x2x2x8xf32> to memref<1x2x2x8xf32>
   linalg.depthwise_conv_2d_input_nhwc_filter_hwc {strides = dense<2> : tensor<2xi64>} ins(%0, %1 : memref<1x3x3x8xf32>, memref<1x1x8xf32>) outs(%2 : memref<1x2x2x8xf32>)
   return
 }
 
 // CHECK-LABEL: func @vectorize_depthwise_conv
-// CHECK-SAME: %[[INPUT_ARG:.+]]: memref<1x3x3x8xf32>,
-// CHECK-SAME: %[[FILTER_ARG:.+]]: memref<1x1x8xf32>,
-// CHECK-SAME: %[[OUTPUT_ARG:.+]]: memref<1x2x2x8xf32>
+// CHECK-SAME: %[[INPUT_ARG:.+]]: memref<2x3x3x8xf32>,
+// CHECK-SAME: %[[FILTER_ARG:.+]]: memref<2x1x8xf32>,
+// CHECK-SAME: %[[OUTPUT_ARG:.+]]: memref<2x2x2x8xf32>
 
 // CHECK: %[[FLOAT_ZERO:.+]] = constant 0.000000e+00 : f32
 
-// CHECK: %[[FILTER_VECTOR:.+]] = vector.transfer_read %[[FILTER_ARG]][%c0, %c0, %c0], %cst {masked = [false]} : memref<1x1x8xf32>, vector<8xf32>
+// CHECK-DAG: %[[INPUT_SUBVIEW:.+]] = memref.subview %[[INPUT_ARG]]{{.*}} to memref<1x3x3x8xf32>
+// CHECK-DAG: %[[FILTER_SUBVIEW:.+]] = memref.subview %[[FILTER_ARG]]{{.*}} to memref<1x1x8xf32>
+// CHECK-DAG: %[[OUTPUT_SUBVIEW:.+]] = memref.subview %[[OUTPUT_ARG]]{{.*}} to memref<1x2x2x8xf32>
+
+// CHECK: %[[FILTER_VECTOR:.+]] = vector.transfer_read %[[FILTER_SUBVIEW]][%c0, %c0, %c0], %cst {masked = [false]} : memref<1x1x8xf32>, vector<8xf32>
 
 // Common filter #0
 // CHECK:      %[[FILTER_0:.+]] = vector.extract_strided_slice %[[FILTER_VECTOR]] {offsets = [0], sizes = [4], strides = [1]} : vector<8xf32> to vector<4xf32>
 
-// CHECK: %[[OUTPUT_0_0:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c0, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_0_0:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c0, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_0_0:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_0_0:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c0, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_0_0:.+]] = vector.fma %[[INPUT_0_0]], %[[FILTER_0]], %[[OUTPUT_0_0]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_0_0]], %[[OUTPUT_ARG]][%c0, %c0, %c0, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_0_0]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_0_1:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c1, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_0_1:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c2, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_0_1:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_0_1:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c2, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_0_1:.+]] = vector.fma %[[INPUT_0_1]], %[[FILTER_0]], %[[OUTPUT_0_1]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_0_1]], %[[OUTPUT_ARG]][%c0, %c0, %c1, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_0_1]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_1_0:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c0, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_1_0:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c2, %c0, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_1_0:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_1_0:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c2, %c0, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_1_0:.+]] = vector.fma %[[INPUT_1_0]], %[[FILTER_0]], %[[OUTPUT_1_0]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_1_0]], %[[OUTPUT_ARG]][%c0, %c1, %c0, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_1_0]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_1_1:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c1, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_1_1:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c2, %c2, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_1_1:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c0], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_1_1:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c2, %c2, %c0], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_1_1:.+]] = vector.fma %[[INPUT_1_1]], %[[FILTER_0]], %[[OUTPUT_1_1]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_1_1]], %[[OUTPUT_ARG]][%c0, %c1, %c1, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_1_1]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c0] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
 // Common filter #1
 // CHECK: %[[FILTER_1:.+]] = vector.extract_strided_slice %[[FILTER_VECTOR]] {offsets = [4], sizes = [4], strides = [1]} : vector<8xf32> to vector<4xf32>
 
-// CHECK: %[[OUTPUT_0_0:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c0, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_0_0:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c0, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_0_0:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_0_0:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c0, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_0_0:.+]] = vector.fma %[[INPUT_0_0]], %[[FILTER_1]], %[[OUTPUT_0_0]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_0_0]], %[[OUTPUT_ARG]][%c0, %c0, %c0, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_0_0]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c0, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_0_1:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c0, %c1, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_0_1:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c0, %c2, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_0_1:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_0_1:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c0, %c2, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_0_1:.+]] = vector.fma %[[INPUT_0_1]], %[[FILTER_1]], %[[OUTPUT_0_1]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_0_1]], %[[OUTPUT_ARG]][%c0, %c0, %c1, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_0_1]], %[[OUTPUT_SUBVIEW]][%c0, %c0, %c1, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_1_0:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c0, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_1_0:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c2, %c0, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_1_0:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_1_0:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c2, %c0, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_1_0:.+]] = vector.fma %[[INPUT_1_0]], %[[FILTER_1]], %[[OUTPUT_1_0]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_1_0]], %[[OUTPUT_ARG]][%c0, %c1, %c0, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_1_0]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c0, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
-// CHECK: %[[OUTPUT_1_1:.+]] = vector.transfer_read %[[OUTPUT_ARG]][%c0, %c1, %c1, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
-// CHECK:  %[[INPUT_1_1:.+]] = vector.transfer_read %[[INPUT_ARG]][%c0, %c2, %c2, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
+// CHECK: %[[OUTPUT_1_1:.+]] = vector.transfer_read %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c4], %cst {masked = [false]} : memref<1x2x2x8xf32>, vector<4xf32>
+// CHECK:  %[[INPUT_1_1:.+]] = vector.transfer_read %[[INPUT_SUBVIEW]][%c0, %c2, %c2, %c4], %cst {masked = [false]} : memref<1x3x3x8xf32>, vector<4xf32>
 // CHECK:    %[[FMA_1_1:.+]] = vector.fma %[[INPUT_1_1]], %[[FILTER_1]], %[[OUTPUT_1_1]] : vector<4xf32>
-// CHECK: vector.transfer_write %[[FMA_1_1]], %[[OUTPUT_ARG]][%c0, %c1, %c1, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
+// CHECK: vector.transfer_write %[[FMA_1_1]], %[[OUTPUT_SUBVIEW]][%c0, %c1, %c1, %c4] {masked = [false]} : vector<4xf32>, memref<1x2x2x8xf32>
 
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_depthwise_conv_with_non_1_filter_height
-func @do_not_vectorize_depthwise_conv_with_non_1_filter_height(%input: memref<1x2x3x4xf32>, %filter: memref<2x1x4xf32>, %output: memref<1x1x2x4xf32>) {
-  %0 = memref.subview %input[0, 0, 0, 0] [1, 2, 3, 4] [1, 1, 1, 1]  : memref<1x2x3x4xf32> to memref<1x2x3x4xf32>
-  %1 = memref.subview %filter[0, 0, 0] [2, 1, 4] [1, 1, 1]  : memref<2x1x4xf32> to memref<2x1x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 2, 4] [1, 1, 1, 1]  : memref<1x1x2x4xf32> to memref<1x1x2x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_depthwise_conv_with_non_1_filter_height(%input: memref<2x2x3x4xf32>, %filter: memref<3x1x4xf32>, %output: memref<2x1x2x4xf32>) {
+  %0 = memref.subview %input[0, 0, 0, 0] [1, 2, 3, 4] [1, 1, 1, 1]  : memref<2x2x3x4xf32> to memref<1x2x3x4xf32>
+  %1 = memref.subview %filter[0, 0, 0] [2, 1, 4] [1, 1, 1]  : memref<3x1x4xf32> to memref<2x1x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 2, 4] [1, 1, 1, 1]  : memref<2x1x2x4xf32> to memref<1x1x2x4xf32>
   // CHECK: linalg.depthwise_conv_2d_input_nhwc_filter_hwc
   linalg.depthwise_conv_2d_input_nhwc_filter_hwc {strides = dense<2> : tensor<2xi64>} ins(%0, %1 : memref<1x2x3x4xf32>, memref<2x1x4xf32>) outs(%2 : memref<1x1x2x4xf32>)
   return
@@ -207,10 +222,11 @@
 // -----
 
 // CHECK-LABEL: func @do_not_vectorize_depthwise_conv_with_non_1_filter_width
-func @do_not_vectorize_depthwise_conv_with_non_1_filter_width(%input: memref<1x1x4x4xf32>, %filter: memref<1x2x4xf32>, %output: memref<1x1x2x4xf32>) {
-  %0 = memref.subview %input[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<1x1x4x4xf32> to memref<1x1x4x4xf32>
-  %1 = memref.subview %filter[0, 0, 0] [1, 2, 4] [1, 1, 1]  : memref<1x2x4xf32> to memref<1x2x4xf32>
-  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 2, 4] [1, 1, 1, 1]  : memref<1x1x2x4xf32> to memref<1x1x2x4xf32>
+// Passing bigger buffers to avoid memref.subview fold awawy.
+func @do_not_vectorize_depthwise_conv_with_non_1_filter_width(%input: memref<2x1x4x4xf32>, %filter: memref<2x2x4xf32>, %output: memref<2x1x2x4xf32>) {
+  %0 = memref.subview %input[0, 0, 0, 0] [1, 1, 4, 4] [1, 1, 1, 1]  : memref<2x1x4x4xf32> to memref<1x1x4x4xf32>
+  %1 = memref.subview %filter[0, 0, 0] [1, 2, 4] [1, 1, 1]  : memref<2x2x4xf32> to memref<1x2x4xf32>
+  %2 = memref.subview %output[0, 0, 0, 0] [1, 1, 2, 4] [1, 1, 1, 1]  : memref<2x1x2x4xf32> to memref<1x1x2x4xf32>
   // CHECK: linalg.depthwise_conv_2d_input_nhwc_filter_hwc
   linalg.depthwise_conv_2d_input_nhwc_filter_hwc {strides = dense<2> : tensor<2xi64>} ins(%0, %1 : memref<1x1x4x4xf32>, memref<1x2x4xf32>) outs(%2 : memref<1x1x2x4xf32>)
   return
diff --git a/iree/compiler/Dialect/Flow/IR/test/stream_folding.mlir b/iree/compiler/Dialect/Flow/IR/test/stream_folding.mlir
index 81ca6be..1268556 100644
--- a/iree/compiler/Dialect/Flow/IR/test/stream_folding.mlir
+++ b/iree/compiler/Dialect/Flow/IR/test/stream_folding.mlir
@@ -95,7 +95,7 @@
     %start1 = constant 1 : index
     %workload = constant 8 : index
     //      CHECK: %[[TARGET_CLONE:.+]] = flow.tensor.clone %[[TARGET]] : tensor<2x4xi32>
-    // CHECK-NEXT: %[[UPDATED:.+]] = flow.tensor.update %[[UPDATE]], %[[TARGET]]
+    //      CHECK: %[[UPDATED:.+]] = flow.tensor.update %[[UPDATE]], %[[TARGET]]
     %t0 = flow.tensor.update %stream_update, %stream_target[%start0, %start1] : tensor<1x1xi32> -> tensor<2x4xi32>
     // CHECK-NEXT: %[[RETURN:.+]] = flow.dispatch @ex::@entry[%c8](%[[TARGET_CLONE]], %[[UPDATED]])
     %t1 = flow.dispatch @ex::@entry[%workload](%stream_target, %t0) : (tensor<2x4xi32>, tensor<2x4xi32>) -> tensor<2x4xi32>
diff --git a/iree/compiler/Dialect/Flow/Transforms/ConvertToFlowTensorOps.cpp b/iree/compiler/Dialect/Flow/Transforms/ConvertToFlowTensorOps.cpp
index f92a2b4..865ce1b 100644
--- a/iree/compiler/Dialect/Flow/Transforms/ConvertToFlowTensorOps.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/ConvertToFlowTensorOps.cpp
@@ -96,7 +96,7 @@
     FuncOp funcOp = getOperation();
     MLIRContext *context = funcOp->getContext();
     context->allowUnregisteredDialects(true);
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<SubTensorToTensorSlice>(context);
     if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(patterns)))) {
       return signalPassFailure();
diff --git a/iree/compiler/Dialect/Flow/Transforms/DestructiveUpdateUtils.cpp b/iree/compiler/Dialect/Flow/Transforms/DestructiveUpdateUtils.cpp
index 9661159..2e0627a 100644
--- a/iree/compiler/Dialect/Flow/Transforms/DestructiveUpdateUtils.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/DestructiveUpdateUtils.cpp
@@ -486,7 +486,7 @@
   // Non-default canonicalization patterns.
   // TODO(nicolasvasilache): add Linalg tiling canonicalization patterns,
   // affineminscf and others as needed.
-  OwningRewritePatternList canonicalizationPatterns;
+  OwningRewritePatternList canonicalizationPatterns(context);
   scf::ForOp::getCanonicalizationPatterns(canonicalizationPatterns, context);
   (void)applyPatternsAndFoldGreedily(dispatchOp,
                                      std::move(canonicalizationPatterns));
diff --git a/iree/compiler/Dialect/Flow/Transforms/DispatchLinalgOnTensors.cpp b/iree/compiler/Dialect/Flow/Transforms/DispatchLinalgOnTensors.cpp
index 5feb947..b4ed6f1 100644
--- a/iree/compiler/Dialect/Flow/Transforms/DispatchLinalgOnTensors.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/DispatchLinalgOnTensors.cpp
@@ -930,7 +930,7 @@
     // Use the workgroup size as a proxy for tile size here. At the flow level
     // this represents the "workload" per processors and is not necessarily tied
     // to the workgroup size specified by the backend.
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     auto linalgTilingOptions =
         linalg::LinalgTilingOptions()
             .setDistributionOptions(workgroupDistributionOptions)
@@ -945,7 +945,7 @@
             ArrayRef<Identifier>(), Identifier::get("workgroup", context)));
 
     // Add canonicalization patterns.
-    linalg::populateLinalgTilingCanonicalizationPatterns(patterns, context);
+    linalg::populateLinalgTilingCanonicalizationPatterns(patterns);
     patterns.insert<linalg::AffineMinSCFCanonicalizationPattern>(context);
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
   }
@@ -962,7 +962,7 @@
 
   // Move other operations into their own dispatch regions.
   {
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<MakeDispatchWorkgroupsOp>();
     (void)applyPatternsAndFoldGreedily(funcOp, std::move(patterns));
   }
@@ -979,7 +979,7 @@
 
   // Run necessary canonicalization patterns before destructive updates.
   {
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     // This is needed because tiling and distribution may create
     // subtensor_insert ops whose source operands come from tensor.cast ops.
     // Those tensor.cast ops cast tensors into a more dynamic shape, in order
diff --git a/iree/compiler/Dialect/Flow/Transforms/HLOToHLOPreprocessing.cpp b/iree/compiler/Dialect/Flow/Transforms/HLOToHLOPreprocessing.cpp
index db16081..4c3c7b4 100644
--- a/iree/compiler/Dialect/Flow/Transforms/HLOToHLOPreprocessing.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/HLOToHLOPreprocessing.cpp
@@ -796,7 +796,7 @@
   void runOnFunction() override {
     MLIRContext *context = &getContext();
     ConversionTarget conversionTarget(*context);
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     // Note that various input modalities may do their own legalization of
     // CHLO. Converting here allows IREE to accept CHLO dialect regardless of
     // whether it was legalized away at a higher level.
@@ -810,7 +810,7 @@
       return signalPassFailure();
     }
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     mhlo::PopulateUnfuseBatchNormPatterns(context, &patterns);
     mhlo::PopulateComplexLoweringPatterns(context, &patterns);
     mhlo::PopulateGatherToTorchIndexSelectPatterns(context, &patterns);
diff --git a/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp b/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
index 1e49f16..2cda522 100644
--- a/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
@@ -69,7 +69,7 @@
   void runOnFunction() override {
     auto *context = &getContext();
     ConversionTarget conversionTarget(*context);
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
 
     conversionTarget.addLegalDialect<IREE::Flow::FlowDialect>();
 
@@ -118,7 +118,7 @@
   void runOnFunction() override {
     auto *context = &getContext();
     ConversionTarget conversionTarget(getContext());
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
 
     // We have completed all flow op creation at this point.
     conversionTarget.addLegalDialect<IREE::Flow::FlowDialect>();
diff --git a/iree/compiler/Dialect/Flow/Transforms/test/dispatch_linalg_on_tensors_dynamic.mlir b/iree/compiler/Dialect/Flow/Transforms/test/dispatch_linalg_on_tensors_dynamic.mlir
index ee1f3fe..9b93d1b 100644
--- a/iree/compiler/Dialect/Flow/Transforms/test/dispatch_linalg_on_tensors_dynamic.mlir
+++ b/iree/compiler/Dialect/Flow/Transforms/test/dispatch_linalg_on_tensors_dynamic.mlir
@@ -194,7 +194,8 @@
 //       CHECK:          flow.dispatch.tensor.store %[[RESULT]], %[[ARG5]]
 //       CHECK:          flow.return
 //       CHECK:     }
-//       CHECK:     flow.dispatch.workgroups[%[[N]], %[[M]], %[[C1]]]
+//   CHECK-DAG:     %[[M_2:.+]] = memref.dim %[[RESULT1]], %[[C0]]
+//       CHECK:     flow.dispatch.workgroups[%[[N]], %[[M_2]], %[[C1]]]
 //       CHECK:       %[[ZERO:.+]] = constant 0.0
 //       CHECK:       scf.for
 //       CHECK:         scf.for
diff --git a/iree/compiler/Dialect/Flow/Transforms/test/form_streams.mlir b/iree/compiler/Dialect/Flow/Transforms/test/form_streams.mlir
index 993d759..e92a201 100644
--- a/iree/compiler/Dialect/Flow/Transforms/test/form_streams.mlir
+++ b/iree/compiler/Dialect/Flow/Transforms/test/form_streams.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-opt -split-input-file -iree-flow-form-streams -cse -canonicalize %s | IreeFileCheck %s
+// RUN: iree-opt -split-input-file -iree-flow-form-streams -canonicalize -cse %s | IreeFileCheck %s
 
 // CHECK-LABEL: func @outsideTieShape
 func @outsideTieShape(%arg0: tensor<?xi32> {iree.reflection = {}}, %arg1: !shapex.ranked_shape<[?]> {iree.reflection = {}}) -> (tensor<?xi32> {iree.reflection = {}}) attributes {iree.module.export} {
diff --git a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
index 7f95129..b567f05 100644
--- a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
@@ -127,7 +127,7 @@
         StringRef(hal_imports_create()->data, hal_imports_create()->size),
         innerModuleOp);
 
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     populateStandardToVMPatterns(context, typeConverter, conversionPatterns);
 
     SymbolTable importSymbols(innerModuleOp);
diff --git a/iree/compiler/Dialect/HAL/Transforms/ConvertToHAL.cpp b/iree/compiler/Dialect/HAL/Transforms/ConvertToHAL.cpp
index 64a90c2..0074780 100644
--- a/iree/compiler/Dialect/HAL/Transforms/ConvertToHAL.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/ConvertToHAL.cpp
@@ -71,7 +71,7 @@
     HALTypeConverter typeConverter(conversionInterfaces);
     HALConversionTarget conversionTarget(context, typeConverter);
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
 
     setupIREEToHALLegality(context, conversionTarget);
     populateIREEToHALPatterns(context, patterns);
diff --git a/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp b/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
index 69d4da0..bdfbd25 100644
--- a/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
@@ -504,7 +504,7 @@
       }
 
       // Convert interface-related flow.dispatch.* ops to their hal.* versions.
-      OwningRewritePatternList patterns;
+      OwningRewritePatternList patterns(&getContext());
       patterns.insert<ConverterDispatchWorkgroupInfoPattern<
                           IREE::Flow::DispatchWorkgroupIDOp,
                           IREE::HAL::InterfaceWorkgroupIDOp>,
diff --git a/iree/compiler/Dialect/HAL/Transforms/ResolveEntryPointOrdinals.cpp b/iree/compiler/Dialect/HAL/Transforms/ResolveEntryPointOrdinals.cpp
index 54c1920..bd6a32d 100644
--- a/iree/compiler/Dialect/HAL/Transforms/ResolveEntryPointOrdinals.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/ResolveEntryPointOrdinals.cpp
@@ -84,7 +84,7 @@
  public:
   void runOnOperation() override {
     MLIRContext *context = &getContext();
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<ResolveCommandBufferDispatchOrdinals>(context);
     patterns.insert<ResolveCommandBufferDispatchIndirectOrdinals>(context);
     (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
diff --git a/iree/compiler/Dialect/Shape/Conversion/ConvertShapeToShapex.cpp b/iree/compiler/Dialect/Shape/Conversion/ConvertShapeToShapex.cpp
index d7b1892..1aaa9a2 100644
--- a/iree/compiler/Dialect/Shape/Conversion/ConvertShapeToShapex.cpp
+++ b/iree/compiler/Dialect/Shape/Conversion/ConvertShapeToShapex.cpp
@@ -284,7 +284,7 @@
     conversionTarget.addLegalDialect<iree_compiler::ShapeDialect>();
 
     // Patterns.
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<ConvertConstShapeOp>(context);
     patterns.insert<ConvertShapeOfOp>(context);
     patterns.insert<ConvertGetExtent>(context);
diff --git a/iree/compiler/Dialect/Shape/IR/test/canonicalize.mlir b/iree/compiler/Dialect/Shape/IR/test/canonicalize.mlir
index 7307096..c92301a 100644
--- a/iree/compiler/Dialect/Shape/IR/test/canonicalize.mlir
+++ b/iree/compiler/Dialect/Shape/IR/test/canonicalize.mlir
@@ -45,8 +45,8 @@
 func @foldFullyStaticRankedShape(%arg0: tensor<1x2xf32>) -> (i32, i32) {
   // CHECK-NOT: shapex.get_ranked_shape
   // CHECK-NOT: shapex.ranked_dim
-  // CHECK: constant 1
-  // CHECK: constant 2
+  // CHECK-DAG: constant 1
+  // CHECK-DAG: constant 2
   %0 = shapex.get_ranked_shape %arg0 : tensor<1x2xf32> -> !shapex.ranked_shape<[1,2]>
   %1 = shapex.ranked_dim %0[0] : !shapex.ranked_shape<[1,2]> -> i32
   %2 = shapex.ranked_dim %0[1] : !shapex.ranked_shape<[1,2]> -> i32
@@ -74,8 +74,8 @@
   // CHECK-NOT: shapex.get_ranked_shape
   // CHECK-NOT: shapex.ranked_dims
   // CHECK-NOT: shapex.ranked_dim
-  // CHECK: constant 1
-  // CHECK: constant 2
+  // CHECK-DAG: constant 1
+  // CHECK-DAG: constant 2
   %0 = shapex.get_ranked_shape %arg0 : tensor<1x2xf32> -> !shapex.ranked_shape<[1,2]>
   %1:2 = shapex.ranked_dims %0 : !shapex.ranked_shape<[1,2]> -> i32, i32
   return %1#0, %1#1 : i32, i32
diff --git a/iree/compiler/Dialect/Shape/Transforms/CleanupPlaceholdersPass.cpp b/iree/compiler/Dialect/Shape/Transforms/CleanupPlaceholdersPass.cpp
index e4f11c9..762cea8 100644
--- a/iree/compiler/Dialect/Shape/Transforms/CleanupPlaceholdersPass.cpp
+++ b/iree/compiler/Dialect/Shape/Transforms/CleanupPlaceholdersPass.cpp
@@ -38,7 +38,7 @@
 class CleanupShapePlaceholdersPass
     : public PassWrapper<CleanupShapePlaceholdersPass, FunctionPass> {
   void runOnFunction() override {
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     patterns.insert<CleanupTieShapePattern>(&getContext());
     (void)applyPatternsAndFoldGreedily(getFunction(), std::move(patterns));
   }
diff --git a/iree/compiler/Dialect/Shape/Transforms/ConvertHLOToShapeDialectPass.cpp b/iree/compiler/Dialect/Shape/Transforms/ConvertHLOToShapeDialectPass.cpp
index c1af25b..0b23d90 100644
--- a/iree/compiler/Dialect/Shape/Transforms/ConvertHLOToShapeDialectPass.cpp
+++ b/iree/compiler/Dialect/Shape/Transforms/ConvertHLOToShapeDialectPass.cpp
@@ -72,7 +72,7 @@
 
   void runOnFunction() override {
     ConversionTarget conversionTarget(getContext());
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
 
     conversionTarget.addLegalDialect<ShapeDialect>();
     conversionTarget.addLegalDialect<StandardOpsDialect>();
diff --git a/iree/compiler/Dialect/Shape/Transforms/MaterializeShapeCalculationsPass.cpp b/iree/compiler/Dialect/Shape/Transforms/MaterializeShapeCalculationsPass.cpp
index 4ef0e2f..ff93f8c 100644
--- a/iree/compiler/Dialect/Shape/Transforms/MaterializeShapeCalculationsPass.cpp
+++ b/iree/compiler/Dialect/Shape/Transforms/MaterializeShapeCalculationsPass.cpp
@@ -57,7 +57,7 @@
     target.addLegalDialect<StandardOpsDialect>();
 
     setupMaterializeShapeCalculationsLegality(target);
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     populateMaterializeShapeCalculationsConversionPatterns(conversionPatterns,
                                                            context);
     if (failed(applyPartialConversion(getOperation(), target,
@@ -69,7 +69,7 @@
     // And then canonicalize shape ops.
     // TODO(laurenzo): I would prefer to get the list of ops in the dialect
     // versus doing this, but I don't know that is possible.
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     CastCompatibleShapeOp::getCanonicalizationPatterns(patterns, context);
     GetRankedShapeOp::getCanonicalizationPatterns(patterns, context);
     MakeRankedShapeOp::getCanonicalizationPatterns(patterns, context);
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
index 15b9ed3..416341e 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
@@ -41,7 +41,7 @@
     IREE::VM::TypeConverter typeConverter(
         IREE::VM::getTargetOptionsFromFlags());
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     populateStandardToVMPatterns(&getContext(), typeConverter, patterns);
 
     // NOTE: we allow other dialects besides just VM during this pass as we are
diff --git a/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp b/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
index 3173aa3..d9972a3 100644
--- a/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
@@ -354,7 +354,7 @@
   void runOnOperation() override {
     ConversionTarget target(getContext());
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     populateVMToCPatterns(&getContext(), patterns);
 
     target.addLegalDialect<mlir::emitc::EmitCDialect>();
diff --git a/iree/compiler/Dialect/VM/IR/VMOpFolders.cpp b/iree/compiler/Dialect/VM/IR/VMOpFolders.cpp
index b002f4f..246467b 100644
--- a/iree/compiler/Dialect/VM/IR/VMOpFolders.cpp
+++ b/iree/compiler/Dialect/VM/IR/VMOpFolders.cpp
@@ -284,10 +284,38 @@
 // Constants
 //===----------------------------------------------------------------------===//
 
+namespace {
+
+template <typename GeneralOp, typename ZeroOp>
+struct FoldZeroConstInteger final : public OpRewritePattern<GeneralOp> {
+  using OpRewritePattern<GeneralOp>::OpRewritePattern;
+
+  LogicalResult matchAndRewrite(GeneralOp constOp,
+                                PatternRewriter &rewriter) const override {
+    if (matchPattern(constOp.result(), m_Zero())) {
+      rewriter.replaceOpWithNewOp<ZeroOp>(constOp);
+      return success();
+    }
+    return failure();
+  }
+};
+
+}  // namespace
+
 OpFoldResult ConstI32Op::fold(ArrayRef<Attribute> operands) { return value(); }
 
+void ConstI32Op::getCanonicalizationPatterns(OwningRewritePatternList &results,
+                                             MLIRContext *context) {
+  results.insert<FoldZeroConstInteger<ConstI32Op, ConstI32ZeroOp>>(context);
+}
+
 OpFoldResult ConstI64Op::fold(ArrayRef<Attribute> operands) { return value(); }
 
+void ConstI64Op::getCanonicalizationPatterns(OwningRewritePatternList &results,
+                                             MLIRContext *context) {
+  results.insert<FoldZeroConstInteger<ConstI64Op, ConstI64ZeroOp>>(context);
+}
+
 OpFoldResult ConstI32ZeroOp::fold(ArrayRef<Attribute> operands) {
   return IntegerAttr::get(getResult().getType(), 0);
 }
diff --git a/iree/compiler/Dialect/VM/IR/VMOps.td b/iree/compiler/Dialect/VM/IR/VMOps.td
index e624738..38fca4d 100644
--- a/iree/compiler/Dialect/VM/IR/VMOps.td
+++ b/iree/compiler/Dialect/VM/IR/VMOps.td
@@ -661,6 +661,7 @@
     VM_ConstIntegerOp<I32, "const.i32", VM_OPC_ConstI32, "int32_t"> {
   let summary = [{32-bit integer constant operation}];
   let hasFolder = 1;
+  let hasCanonicalizer = 1;
 }
 
 def VM_ConstI64Op :
@@ -668,6 +669,7 @@
                       [VM_ExtI64]> {
   let summary = [{64-bit integer constant operation}];
   let hasFolder = 1;
+  let hasCanonicalizer = 1;
 }
 
 class VM_ConstIntegerZeroOp<I type, string mnemonic, VM_OPC opcode,
diff --git a/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp b/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
index 0d4205d..e3bc2aa 100644
--- a/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
+++ b/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
@@ -107,7 +107,7 @@
 // required transformations (such as debug op stripping).
 static LogicalResult canonicalizeModule(BytecodeTargetOptions targetOptions,
                                         IREE::VM::ModuleOp moduleOp) {
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(moduleOp.getContext());
   ConversionTarget target(*moduleOp.getContext());
   target.addLegalDialect<IREE::VM::VMDialect>();
   target.addLegalOp<IREE::DoNotOptimizeOp>();
diff --git a/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp b/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
index 2ee2b0c..b332a60 100644
--- a/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
+++ b/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
@@ -425,7 +425,7 @@
 // Adapted from BytecodeModuleTarget and extended by C specific passes
 static LogicalResult canonicalizeModule(
     IREE::VM::ModuleOp moduleOp, IREE::VM::CTargetOptions targetOptions) {
-  OwningRewritePatternList patterns;
+  OwningRewritePatternList patterns(&getContext());
   ConversionTarget target(*moduleOp.getContext());
   target.addLegalDialect<IREE::VM::VMDialect>();
   target.addLegalOp<IREE::DoNotOptimizeOp>();
diff --git a/iree/compiler/Dialect/VM/Transforms/Conversion.cpp b/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
index b010a6b..c74864f 100644
--- a/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
+++ b/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
@@ -120,7 +120,7 @@
       }
     }
 
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     populateIREEToVMPatterns(context, typeConverter, conversionPatterns);
     populateStandardToVMPatterns(context, typeConverter, conversionPatterns);
     conversionPatterns.insert<ElideTieShapeOp>(context);
diff --git a/iree/compiler/Dialect/VMLA/Conversion/HLOToVMLA/test/fft.mlir b/iree/compiler/Dialect/VMLA/Conversion/HLOToVMLA/test/fft.mlir
index 027bfcd..0991c79 100644
--- a/iree/compiler/Dialect/VMLA/Conversion/HLOToVMLA/test/fft.mlir
+++ b/iree/compiler/Dialect/VMLA/Conversion/HLOToVMLA/test/fft.mlir
@@ -1,9 +1,9 @@
 // RUN: iree-opt -split-input-file -iree-vmla-pre-conversion-lowering -iree-vmla-conversion -canonicalize %s | IreeFileCheck %s
 
 func private @fft(%arg0: tensor<8xf32>, %arg1: tensor<8xf32>) ->  (tensor<8xf32>, tensor<8xf32>) {
-  // CHECK: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
-  // CHECK-NEXT: [[C32:%.+]] = constant 32 : index
-  // CHECK-NEXT: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
+  //  CHECK-DAG: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
+  //  CHECK-DAG: [[C32:%.+]] = constant 32 : index
+  //      CHECK: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
   // CHECK-NEXT: [[OUTBUF2:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
   // CHECK-NEXT: vmla.fft %arg0([[RS]] : !shapex.ranked_shape<[8]>),  %arg1([[RS]] : !shapex.ranked_shape<[8]>), out [[OUTBUF1]], [[OUTBUF2]] : f32
   %real, %imag = "vmla.fft.pseudo"(%arg0, %arg1) : (tensor<8xf32>, tensor<8xf32>) -> (tensor<8xf32>, tensor<8xf32>)
@@ -11,9 +11,9 @@
 }
 
 func private @ifft(%arg0: tensor<8xf32>, %arg1: tensor<8xf32>) ->  (tensor<8xf32>, tensor<8xf32>)  {
-  // CHECK: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
-  // CHECK-NEXT: [[C32:%.+]] = constant 32 : index
-  // CHECK-NEXT: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
+  //  CHECK-DAG: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
+  //  CHECK-DAG: [[C32:%.+]] = constant 32 : index
+  //      CHECK: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
   // CHECK-NEXT: [[OUTBUF2:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
   // CHECK-NEXT: vmla.ifft %arg0([[RS]] : !shapex.ranked_shape<[8]>),  %arg1([[RS]] : !shapex.ranked_shape<[8]>), out [[OUTBUF1]], [[OUTBUF2]] : f32
   %real, %imag = "vmla.ifft.pseudo"(%arg0, %arg1) : (tensor<8xf32>, tensor<8xf32>) -> (tensor<8xf32>, tensor<8xf32>)
@@ -21,9 +21,9 @@
 }
 
 func private @rfft(%arg0: tensor<8xf32>) ->  (tensor<5xf32>, tensor<5xf32>) {
-  // CHECK: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
-  // CHECK-NEXT: [[C20:%.+]] = constant 20 : index
-  // CHECK-NEXT: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C20]] : !vmla.buffer
+  //  CHECK-DAG: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[8]>
+  //  CHECK-DAG: [[C20:%.+]] = constant 20 : index
+  //      CHECK: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C20]] : !vmla.buffer
   // CHECK-NEXT: [[OUTBUF2:%.+]] = vmla.buffer.alloc byte_length = [[C20]] : !vmla.buffer
   // CHECK-NEXT: vmla.rfft %arg0([[RS]] : !shapex.ranked_shape<[8]>), out [[OUTBUF1]], [[OUTBUF2]] : f32
   %real, %imag = "vmla.rfft.pseudo"(%arg0) : (tensor<8xf32>) -> (tensor<5xf32>, tensor<5xf32>)
@@ -31,8 +31,8 @@
 }
 
 func private @irfft(%arg0: tensor<5xf32>, %arg1: tensor<5xf32>) -> tensor<8xf32> {
-  // CHECK: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[5]>
-  // CHECK-NEXT: [[C32:%.+]] = constant 32 : index
+  //  CHECK-DAG: [[RS:%.+]] = shapex.const_ranked_shape : !shapex.ranked_shape<[5]>
+  //  CHECK-DAG: [[C32:%.+]] = constant 32 : index
   // CHECK-NEXT: [[OUTBUF1:%.+]] = vmla.buffer.alloc byte_length = [[C32]] : !vmla.buffer
   // CHECK-NEXT: vmla.irfft %arg0([[RS]] : !shapex.ranked_shape<[5]>),  %arg1([[RS]] : !shapex.ranked_shape<[5]>), out [[OUTBUF1]] : f32
   %real = "vmla.irfft.pseudo"(%arg0, %arg1) : (tensor<5xf32>, tensor<5xf32>) -> (tensor<8xf32>)
diff --git a/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp b/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
index ad011a8..b49c6e3 100644
--- a/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
+++ b/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
@@ -402,7 +402,7 @@
         StringRef(vmla_imports_create()->data, vmla_imports_create()->size),
         innerModuleOp);
 
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     populateStandardToVMPatterns(context, typeConverter, conversionPatterns);
 
     SymbolTable importSymbols(innerModuleOp);
diff --git a/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp b/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
index be6a907..cfdab50 100644
--- a/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
+++ b/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
@@ -85,14 +85,13 @@
     conversionTarget.addIllegalDialect<mhlo::MhloDialect>();
     conversionTarget.addIllegalDialect<IREE::HAL::HALDialect>();
 
-    OwningRewritePatternList conversionPatterns;
+    OwningRewritePatternList conversionPatterns(&getContext());
     populateStandardToVMLAPatterns(context, conversionPatterns, typeConverter);
     populateHLOToVMLAPatterns(context, conversionPatterns, typeConverter);
     populateHALToVMLAPatterns(context, conversionPatterns, typeConverter);
 
     // Ensure FuncOp signatures are updated.
-    populateFuncOpTypeConversionPattern(conversionPatterns, context,
-                                        typeConverter);
+    populateFuncOpTypeConversionPattern(conversionPatterns, typeConverter);
 
     // We allow the shape dialect to persist, making specific dim queries
     // illegal (which allows them to fold away). These patterns allow dimension
diff --git a/iree/compiler/Dialect/VMLA/Transforms/PreConversionLowering.cpp b/iree/compiler/Dialect/VMLA/Transforms/PreConversionLowering.cpp
index 4b22d31..1afdbd2 100644
--- a/iree/compiler/Dialect/VMLA/Transforms/PreConversionLowering.cpp
+++ b/iree/compiler/Dialect/VMLA/Transforms/PreConversionLowering.cpp
@@ -470,14 +470,14 @@
 
     // These patterns should be run greedily as they are not dialect
     // conversions.
-    OwningRewritePatternList greedyPatterns;
+    OwningRewritePatternList greedyPatterns(&getContext());
     mhlo::PopulateComplexLoweringPatterns(context, &greedyPatterns);
     if (failed(applyPatternsAndFoldGreedily(getOperation(),
                                             std::move(greedyPatterns)))) {
       return signalPassFailure();
     }
 
-    OwningRewritePatternList patterns;
+    OwningRewritePatternList patterns(&getContext());
     ConversionTarget target(*context);
     target.addLegalDialect<StandardOpsDialect>();
     target.addLegalDialect<IREE::VMLA::VMLADialect>();
@@ -503,7 +503,7 @@
     }
 
     {
-      OwningRewritePatternList greedyPatterns;
+      OwningRewritePatternList greedyPatterns(&getContext());
       greedyPatterns.insert<CanonicalizeTranspose>(context);
       if (failed(applyPatternsAndFoldGreedily(getOperation(),
                                               std::move(greedyPatterns)))) {
diff --git a/iree/compiler/Dialect/VMLA/Transforms/test/transformation.mlir b/iree/compiler/Dialect/VMLA/Transforms/test/transformation.mlir
index 493aa88..9e7b73c 100644
--- a/iree/compiler/Dialect/VMLA/Transforms/test/transformation.mlir
+++ b/iree/compiler/Dialect/VMLA/Transforms/test/transformation.mlir
@@ -17,8 +17,8 @@
 }
 
 //      CHECK: func @simpleMath_rgn_dispatch_0(%arg0: !vmla.interface, %arg1: index, %arg2: index, %arg3: index) {
-// CHECK-NEXT:   %c0 = constant 0 : index
-// CHECK-NEXT:   %c16 = constant 16 : index
+//  CHECK-DAG:   %c0 = constant 0 : index
+//  CHECK-DAG:   %c16 = constant 16 : index
 // CHECK-NEXT:   %0 = vmla.interface.binding %arg0 {binding = 0 : i32, set = 0 : i32} : !vmla.buffer
 // CHECK-NEXT:   %1 = vmla.buffer.view %0[%c0], byte_length = %c16 : !vmla.buffer
 // CHECK-NEXT:   %2 = vmla.buffer.alloc byte_length = %c16 : !vmla.buffer
diff --git a/iree/test/e2e/models/BUILD b/iree/test/e2e/models/BUILD
index d897e76..d311688 100644
--- a/iree/test/e2e/models/BUILD
+++ b/iree/test/e2e/models/BUILD
@@ -72,9 +72,7 @@
 
 iree_check_single_backend_test_suite(
     name = "check_linalg_on_tensors_vulkan-spirv_vulkan",
-    srcs = [
-        "mobilenetv2_fake_weights.mlir",
-    ],
+    srcs = CHECK_FRAMEWORK_TESTS,
     compiler_flags = [
         "-iree-flow-dispatch-linalg-on-tensors",
         "-iree-codegen-spirv-experimental-linalg-on-tensors",
diff --git a/iree/test/e2e/models/CMakeLists.txt b/iree/test/e2e/models/CMakeLists.txt
index 0a8aced..9a5ffa4 100644
--- a/iree/test/e2e/models/CMakeLists.txt
+++ b/iree/test/e2e/models/CMakeLists.txt
@@ -46,7 +46,6 @@
     check_vulkan-spirv_vulkan
   SRCS
     "bert_encoder_unrolled_fake_weights.mlir"
-    "mobilenetv2_fake_weights.mlir"
   TARGET_BACKEND
     "vulkan-spirv"
   DRIVER
@@ -55,25 +54,9 @@
 
 iree_check_single_backend_test_suite(
   NAME
-    check_linalg_on_tensors_vulkan-spirv_vulkan
-  SRCS
-    "mobilenetv2_fake_weights.mlir"
-  TARGET_BACKEND
-    "vulkan-spirv"
-  DRIVER
-    "vulkan"
-  COMPILER_FLAGS
-    "-iree-flow-dispatch-linalg-on-tensors"
-    "-iree-codegen-spirv-experimental-linalg-on-tensors"
-    "-iree-spirv-enable-vectorization"
-)
-
-iree_check_single_backend_test_suite(
-  NAME
     check_linalg_on_tensors_dylib-llvm-aot_dylib
   SRCS
     "bert_encoder_unrolled_fake_weights.mlir"
-    "mobilenetv2_fake_weights.mlir"
   TARGET_BACKEND
     "dylib-llvm-aot"
   DRIVER
diff --git a/iree/test/e2e/tosa_ops/BUILD b/iree/test/e2e/tosa_ops/BUILD
index cb3a053..06a3544 100644
--- a/iree/test/e2e/tosa_ops/BUILD
+++ b/iree/test/e2e/tosa_ops/BUILD
@@ -47,7 +47,6 @@
         "logical_right_shift.mlir",
         "maximum.mlir",
         "minimum.mlir",
-        "mul.mlir",
         "negate.mlir",
         "reluN.mlir",
         "reshape.mlir",
@@ -59,6 +58,9 @@
         "while.mlir",
     ],
     include = ["*.mlir"],
+    exclude = [
+        "mul.mlir",  # TODO(suderman): Re-enable once apply_scale lowering lands.
+    ],
 )
 
 iree_check_single_backend_test_suite(
diff --git a/iree/test/e2e/tosa_ops/CMakeLists.txt b/iree/test/e2e/tosa_ops/CMakeLists.txt
index 3948a95..0fc880b 100644
--- a/iree/test/e2e/tosa_ops/CMakeLists.txt
+++ b/iree/test/e2e/tosa_ops/CMakeLists.txt
@@ -32,7 +32,6 @@
     "logical_right_shift.mlir"
     "maximum.mlir"
     "minimum.mlir"
-    "mul.mlir"
     "negate.mlir"
     "reluN.mlir"
     "reshape.mlir"
@@ -70,7 +69,6 @@
     "logical_right_shift.mlir"
     "maximum.mlir"
     "minimum.mlir"
-    "mul.mlir"
     "negate.mlir"
     "reluN.mlir"
     "reshape.mlir"
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 0776eca..b24436a 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 0776eca7a4e76bfadc311f3607be3a4f0c0e989a
+Subproject commit b24436ac96bdf3f2c545fc85dc8af239d618c9c4
