diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS
index fc6f42d..c278d89 100644
--- a/SUBMODULE_VERSIONS
+++ b/SUBMODULE_VERSIONS
@@ -5,7 +5,7 @@
 4fb0ff7069bd88ee85902f4d0bb62794e5f6d021 third_party/flatcc
 b1fbd33c06cdb0024c67733c6fdec2009d17b384 third_party/googletest
 1536b141d636e95f2cc3c02c5891b23e322fb0c8 third_party/llvm-bazel
-7f6f9f4cf966c78a315d15d6e913c43cfa45c47c third_party/llvm-project
+db226cdf4cf91f350267da1a5b95dda42dd23413 third_party/llvm-project
 55801f03f9cc69abfcf8b508a873f702c11b3b5f third_party/mlir-emitc
 74d7261be17cf659d5930d4830609406bd7553e3 third_party/pffft
 d8c7ee00a687ac369e62e2032514a93a9b413502 third_party/pybind11
diff --git a/iree/compiler/Conversion/CodegenUtils/MatmulCodegenStrategy.h b/iree/compiler/Conversion/CodegenUtils/MatmulCodegenStrategy.h
index 554289c..e93f50b 100644
--- a/iree/compiler/Conversion/CodegenUtils/MatmulCodegenStrategy.h
+++ b/iree/compiler/Conversion/CodegenUtils/MatmulCodegenStrategy.h
@@ -46,8 +46,12 @@
   OwningRewritePatternList buildRewritePatterns(
       MLIRContext *ctx, linalg::LinalgMarker m) override {
     OwningRewritePatternList vectorUnrollPatterns;
-    vectorUnrollPatterns.insert<vector::UnrollVectorPattern<VectorOpType>>(
-        ctx, vector::UnrollVectorOptions().setNativeShape(targetShape));
+    vectorUnrollPatterns.insert<vector::UnrollVectorPattern>(
+        ctx, vector::UnrollVectorOptions()
+                 .setNativeShape(targetShape)
+                 .setFilterConstraint([](Operation *op) {
+                   return success(isa<VectorOpType>(op));
+                 }));
     vector::populateVectorToVectorCanonicalizationPatterns(vectorUnrollPatterns,
                                                            ctx);
     vector::populateVectorToVectorTransformationPatterns(vectorUnrollPatterns,
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
index 5fde297..864f2d4 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/LinalgTileAndFusePass.cpp
@@ -337,13 +337,9 @@
 
 static void populateVectorUnrollPatterns(MLIRContext *context,
                                          OwningRewritePatternList &patterns) {
-  patterns.insert<vector::UnrollVectorPattern<vector::TransferReadOp>,
-                  vector::UnrollVectorPattern<vector::ContractionOp>,
-                  vector::UnrollVectorPattern<vector::TransferWriteOp>>(
+  patterns.insert<vector::UnrollVectorPattern>(
       context,
       vector::UnrollVectorOptions().setNativeShapeFn(getNativeVectorSize));
-  vector::populateVectorToVectorCanonicalizationPatterns(patterns, context);
-  vector::populateVectorToVectorTransformationPatterns(patterns, context);
 }
 
 //====---------------------------------------------------------------------===//
@@ -356,10 +352,17 @@
     populateVectorUnrollPatterns(funcOp.getContext(), vectorUnrollPatterns);
     applyPatternsAndFoldGreedily(funcOp, std::move(vectorUnrollPatterns));
 
-    OwningRewritePatternList canonicalizationPatterns;
-    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns,
+    OwningRewritePatternList canonicalizationPatterns1;
+    vector::populateVectorToVectorCanonicalizationPatterns(
+        canonicalizationPatterns1, funcOp.getContext());
+    vector::populateVectorToVectorTransformationPatterns(
+        canonicalizationPatterns1, funcOp.getContext());
+    applyPatternsAndFoldGreedily(funcOp, std::move(canonicalizationPatterns1));
+
+    OwningRewritePatternList canonicalizationPatterns2;
+    vector::populateVectorSlicesLoweringPatterns(canonicalizationPatterns2,
                                                  funcOp.getContext());
-    applyPatternsAndFoldGreedily(funcOp, std::move(canonicalizationPatterns));
+    applyPatternsAndFoldGreedily(funcOp, std::move(canonicalizationPatterns2));
     LLVM_DEBUG({
       llvm::dbgs() << "--- After Vector Unroll ---\n";
       funcOp.print(llvm::dbgs(), OpPrintingFlags().useLocalScope());
diff --git a/iree/compiler/Dialect/HAL/IR/HALOps.cpp b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
index bd04041..463b49e 100644
--- a/iree/compiler/Dialect/HAL/IR/HALOps.cpp
+++ b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
@@ -1351,11 +1351,14 @@
       failed(parser.parseAttribute(targetBackendFilterAttr,
                                    "target_backend_filter",
                                    result->attributes)) ||
-      failed(parser.parseOptionalAttrDictWithKeyword(result->attributes)) ||
-      failed(parser.parseOptionalRegion(*body, llvm::None, llvm::None))) {
+      failed(parser.parseOptionalAttrDictWithKeyword(result->attributes))) {
     return failure();
   }
 
+  OptionalParseResult parseResult = parser.parseOptionalRegion(*body);
+  if (parseResult.hasValue() && failed(*parseResult))
+    return failure();
+
   // Ensure that this module has a valid terminator.
   ExecutableTargetOp::ensureTerminator(*body, parser.getBuilder(),
                                        result->location);
@@ -1403,10 +1406,12 @@
 static ParseResult parseExecutableBinaryOp(OpAsmParser &parser,
                                            OperationState *result) {
   auto *body = result->addRegion();
-  if (failed(parser.parseOptionalAttrDictWithKeyword(result->attributes)) ||
-      failed(parser.parseOptionalRegion(*body, llvm::None, llvm::None))) {
+  if (failed(parser.parseOptionalAttrDictWithKeyword(result->attributes))) {
     return failure();
   }
+  OptionalParseResult parseResult = parser.parseOptionalRegion(*body);
+  if (parseResult.hasValue() && failed(*parseResult))
+    return failure();
 
   // Ensure that this module has a valid terminator.
   ExecutableBinaryOp::ensureTerminator(*body, parser.getBuilder(),
