Bump llvm to 5c116d50e42f93ef4fa9a9719121378ec6b99b69 (#8652)

* Bump LLVM to [5c116d50e42f93ef4fa9a9719121378ec6b99b69](https://github.com/llvm/llvm-project/commit/5c116d50e42f93ef4fa9a9719121378ec6b99b69)
* 217988819 iree-dialects fixes (createOperation -> create and OpAsmParser::OperandType -> OpAsmParser::UnresolvedOperand)
* 5d06650d6 Assert on PDL native function call type mismatches.
* 8b2abae7b Add missing include in iree-dialects
* e6491bf94 Rename OpAsmParser::OperandType to OpAsmParser::UnresolvedOperand globally in IREE 
* c50542572 Rename createOperation -> create globally
* 11614987b Bump MHLO to [e918d22b258375050a140b320eeb1d1167079e43](https://github.com/tensorflow/mlir-hlo/commit/e918d22b258375050a140b320eeb1d1167079e43)
* 0762fbfe7 clang-format
* cdf96f56c Update PDL usage in linalg_transforms tests
* 1807fd24f Fix IREE tests for LLVM bump

LLVM revision: [5c116d50e42f93ef4fa9a9719121378ec6b99b69](https://github.com/llvm/llvm-project/commit/5c116d50e42f93ef4fa9a9719121378ec6b99b69)
MHLO revision: [e918d22b258375050a140b320eeb1d1167079e43](https://github.com/tensorflow/mlir-hlo/commit/e918d22b258375050a140b320eeb1d1167079e43)
PiperOrigin-RevId: 437369768
diff --git a/integrations/tensorflow/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td b/integrations/tensorflow/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
index 4ae75cc..d72c312 100644
--- a/integrations/tensorflow/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
+++ b/integrations/tensorflow/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
@@ -421,7 +421,7 @@
           $_op->getAttrs());
         for (Region &r : $_op->getRegions())
           r.cloneInto(state.addRegion(), bvm);
-        return b.createOperation(state);
+        return b.create(state);
       }]
     >
   ];
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
index 6c06913..723e10c 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
@@ -1327,13 +1327,13 @@
 ParseResult TileOp::parse(OpAsmParser &parser, OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  OpAsmParser::OperandType tileSizes;
+  OpAsmParser::UnresolvedOperand tileSizes;
   // TODO: also allow tensor<..xindex> and figure out a good syntax.
   // Type tensorOfIndexType =
   //     RankedTensorType::get({ShapedType::kDynamicSize}, indexType);
   Type tileSizesType = builder.getIndexType();
   SmallVector<Type> outsTypes;
-  SmallVector<OpAsmParser::OperandType, 4> outsOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 4> outsOperands;
 
   llvm::SMLoc outputsOperandsLoc;
   if (parser.parseOperand(tileSizes) ||
@@ -1369,7 +1369,7 @@
   if (parser.parseArrowTypeList(result.types))
     return failure();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   SmallVector<Type, 8> operandTypes, regionTypes;
   if (parser.parseRegion(*region, regionOperands, regionTypes))
@@ -1431,7 +1431,7 @@
 ParseResult InParallelOp::parse(OpAsmParser &parser, OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  OpAsmParser::OperandType numThreads;
+  OpAsmParser::UnresolvedOperand numThreads;
   Type indexType = builder.getIndexType();
 
   if (parser.parseOperand(numThreads) ||
@@ -1440,7 +1440,7 @@
   if (parser.parseArrowTypeList(result.types))
     return failure();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   SmallVector<Type, 8> regionTypes;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   if (parser.parseRegion(*region, regionOperands, regionTypes))
@@ -1608,7 +1608,7 @@
                                          OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   SmallVector<Type, 8> regionTypes;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   if (parser.parseRegion(*region, regionOperands, regionTypes))
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
index 03d39ac..775de83 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
@@ -428,7 +428,7 @@
 ParseResult transform::VectorizeOp::parse(OpAsmParser &parser,
                                           OperationState &result) {
   auto operationType = pdl::OperationType::get(parser.getContext());
-  OpAsmParser::OperandType target;
+  OpAsmParser::UnresolvedOperand target;
   OptionalParseResult parseResult = parser.parseOptionalOperand(target);
   if (parseResult.hasValue()) {
     if (parseResult.getValue().failed() ||
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
index e8d9477..356d440 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
@@ -169,7 +169,7 @@
   OperationState modelOpState(op->getLoc(), modelOpName, op->getOperands(),
                               op->getResultTypes(), op->getAttrs());
   modelOpState.addRegion();
-  Operation *modelOp = rewriter.createOperation(modelOpState);
+  Operation *modelOp = rewriter.create(modelOpState);
   auto g1 = llvm::make_scope_exit([&]() { rewriter.eraseOp(modelOp); });
   LinalgOp linalgOp = dyn_cast<LinalgOp>(op);
   LinalgOp linalgModelOp = dyn_cast<LinalgOp>(modelOp);
diff --git a/integrations/tensorflow/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp b/integrations/tensorflow/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
index f4ad03a..6b00086 100644
--- a/integrations/tensorflow/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
+++ b/integrations/tensorflow/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
@@ -458,7 +458,7 @@
   Region *elseRegion = result.addRegion();
 
   auto &builder = parser.getBuilder();
-  OpAsmParser::OperandType cond;
+  OpAsmParser::UnresolvedOperand cond;
   Type conditionType = builder.getType<PyBoolType>();
   if (parser.parseOperand(cond) ||
       parser.resolveOperand(cond, conditionType, result.operands))
diff --git a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
index 0b586e5..72ae60d 100644
--- a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
+++ b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
@@ -87,7 +87,7 @@
           newRegion->getArgumentTypes(), result);
       rewriter.applySignatureConversion(newRegion, result);
     }
-    Operation *newOp = rewriter.createOperation(state);
+    Operation *newOp = rewriter.create(state);
     rewriter.replaceOp(op, newOp->getResults());
     return success();
   }
diff --git a/iree/compiler/Codegen/Common/TypePropagationPass.cpp b/iree/compiler/Codegen/Common/TypePropagationPass.cpp
index f120f46..5bbf065 100644
--- a/iree/compiler/Codegen/Common/TypePropagationPass.cpp
+++ b/iree/compiler/Codegen/Common/TypePropagationPass.cpp
@@ -312,7 +312,7 @@
     for (unsigned i = 0, e = op->getNumRegions(); i != e; ++i) {
       state.addRegion();
     }
-    Operation *newOp = rewriter.createOperation(state);
+    Operation *newOp = rewriter.create(state);
 
     // Move all the regions from the old op to the new op and legalize its
     // signature.
diff --git a/iree/compiler/Codegen/Common/test/iree_comprehensive_bufferize.mlir b/iree/compiler/Codegen/Common/test/iree_comprehensive_bufferize.mlir
index 830af58..dcfe2b6 100644
--- a/iree/compiler/Codegen/Common/test/iree_comprehensive_bufferize.mlir
+++ b/iree/compiler/Codegen/Common/test/iree_comprehensive_bufferize.mlir
@@ -34,7 +34,7 @@
 }
 
 //  CHECK-DAG: #[[MAP0:.+]] = affine_map<()[s0, s1] -> (s0 * s1)>
-//  CHECK-DAG: #[[MAP1:.+]] = affine_map<(d0)[s0, s1] -> (s0, -d0 + s1)>
+//  CHECK-DAG: #[[MAP1:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s1, s0)>
 //  CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0, d1)[s0, s1] -> (d0 * s1 + s0 + d1)>
 //      CHECK: func @matmul()
 //  CHECK-DAG:   %[[M:.+]] = hal.interface.constant.load[0]
@@ -108,7 +108,7 @@
 }
 
 //  CHECK-DAG: #[[MAP0:.+]] = affine_map<()[s0, s1] -> (s0 * s1)>
-//  CHECK-DAG: #[[MAP1:.+]] = affine_map<(d0)[s0, s1] -> (s0, -d0 + s1)>
+//  CHECK-DAG: #[[MAP1:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s1, s0)>
 //      CHECK: func @matmul_fill()
 //  CHECK-DAG:   %[[CST:.+]] = arith.constant 0.000000e+00 : f32
 //  CHECK-DAG:   %[[M:.+]] = hal.interface.constant.load[0]
diff --git a/iree/compiler/Codegen/Common/test/linalg_bufferize.mlir b/iree/compiler/Codegen/Common/test/linalg_bufferize.mlir
index d8f5ae0..bf51a7f 100644
--- a/iree/compiler/Codegen/Common/test/linalg_bufferize.mlir
+++ b/iree/compiler/Codegen/Common/test/linalg_bufferize.mlir
@@ -482,8 +482,8 @@
   return
 }
 
-//   CHECK-DAG: #[[MAP0:.+]] = affine_map<(d0)[s0, s1] -> (s1, -d0 + s0)>
-//   CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0, s1] -> (s0, -d0 + s1)>
+//   CHECK-DAG: #[[MAP0:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s0, s1)>
+//   CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s1, s0)>
 //       CHECK: func @bufferize_dynamic()
 //       CHECK:   %[[DIM0:.+]] = hal.interface.constant.load[0] : index
 //       CHECK:   %[[DIM1:.+]] = hal.interface.constant.load[1] : index
@@ -554,8 +554,8 @@
   return
 }
 
-//   CHECK-DAG: #[[MAP0:.+]] = affine_map<(d0)[s0, s1] -> (s1, -d0 + s0)>
-//   CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0, s1] -> (s0, -d0 + s1)>
+//   CHECK-DAG: #[[MAP0:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s0, s1)>
+//   CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0, s1] -> (-d0 + s1, s0)>
 //       CHECK: func @bufferize_dynamic_inplace()
 //       CHECK:   %[[DIM0:.+]] = hal.interface.constant.load[0] : index
 //       CHECK:   %[[DIM1:.+]] = hal.interface.constant.load[1] : index
@@ -1721,7 +1721,7 @@
   return
 }
 
-//      CHECK: #[[MAP1:.+]] = affine_map<(d0)[s0] -> (4, -d0 + s0)>
+//      CHECK: #[[MAP1:.+]] = affine_map<(d0)[s0] -> (-d0 + s0, 4)>
 //      CHECK: func @dot_general_padded
 //   CHECK-DAG:      %[[ALLOC_RET0:.+]] = memref.alloc
 //   CHECK-DAG:      %[[ALLOC_ARG1:.+]] = memref.alloc
diff --git a/iree/compiler/Codegen/Common/test/tile_and_distribute_to_workgroups.mlir b/iree/compiler/Codegen/Common/test/tile_and_distribute_to_workgroups.mlir
index 3407016..cf07de8 100644
--- a/iree/compiler/Codegen/Common/test/tile_and_distribute_to_workgroups.mlir
+++ b/iree/compiler/Codegen/Common/test/tile_and_distribute_to_workgroups.mlir
@@ -47,7 +47,7 @@
   }
 }
 //  CHECK-DAG: #[[MAP1:.+]] = affine_map<()[s0] -> (s0 * 64)>
-//  CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0] -> (64, -d0 + s0)>
+//  CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0] -> (-d0 + s0, 64)>
 //  CHECK-DAG: #[[TRANSLATION:.+]] = #iree_codegen.translation_info<CPUTileFuseAndVectorize>
 //      CHECK: hal.executable.entry_point public @matmul_tensors
 // CHECK-SAME:   translation_info = #[[TRANSLATION]]
@@ -362,7 +362,7 @@
   }
 }
 //  CHECK-DAG: #[[MAP1:.+]] = affine_map<()[s0] -> (s0 * 64)>
-//  CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0] -> (64, -d0 + s0)>
+//  CHECK-DAG: #[[MAP2:.+]] = affine_map<(d0)[s0] -> (-d0 + s0, 64)>
 //      CHECK: func @copy_op()
 //  CHECK-DAG:   %[[SOURCE_SIZE_Y:.+]] = hal.interface.constant.load[0] : index
 //  CHECK-DAG:   %[[SOURCE_SIZE_X:.+]] = hal.interface.constant.load[1] : index
@@ -874,7 +874,6 @@
 // CHECK-SAME:  translation_info = #[[TRANSLATION]]
 //      CHECK: func @reduction
 //      CHECK:   scf.for %[[IV0:.+]] =
-//      CHECK:     %[[INIT0:.+]] = linalg.init_tensor
 //      CHECK:     %[[INIT:.+]] = linalg.init_tensor
 //      CHECK:     %[[FILL:.+]] = linalg.fill
 // CHECK-SAME:         outs(%[[INIT]] :
diff --git a/iree/compiler/Dialect/Flow/IR/FlowOps.cpp b/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
index be79e19..2657fed 100644
--- a/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
+++ b/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
@@ -388,7 +388,7 @@
                                               TypeRange operandTypes,
                                               TypeRange resultTypes,
                                               Region &body) {
-  SmallVector<OpAsmParser::OperandType> regionArgs;
+  SmallVector<OpAsmParser::UnresolvedOperand> regionArgs;
   SmallVector<Type> regionArgTypes;
   if (failed(parser.parseLParen())) {
     return failure();
diff --git a/iree/compiler/Dialect/Flow/IR/test/dispatch_tensor_folding.mlir b/iree/compiler/Dialect/Flow/IR/test/dispatch_tensor_folding.mlir
index 1e7277f..5728f68 100644
--- a/iree/compiler/Dialect/Flow/IR/test/dispatch_tensor_folding.mlir
+++ b/iree/compiler/Dialect/Flow/IR/test/dispatch_tensor_folding.mlir
@@ -60,7 +60,7 @@
   return
 }
 
-// CHECK: #[[MAP:.+]] = affine_map<()[s0] -> (64, -s0 + 250)>
+// CHECK: #[[MAP:.+]] = affine_map<()[s0] -> (-s0 + 250, 64)>
 // CHECK: @canonicalizeDimOfTensorTile
 // CHECK: %[[ARG0:.+]]: !flow.dispatch.tensor<readonly:250x1024xf32>, %[[ARG1:.+]]: index, %[[ARG2:.+]]: index
 // CHECK: %[[DIM:.+]] = affine.min #[[MAP]]()[%[[ARG1]]]
diff --git a/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp b/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
index cee8b77..1a1b963 100644
--- a/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
@@ -73,7 +73,7 @@
           newRegion->getArgumentTypes(), result);
       rewriter.applySignatureConversion(newRegion, result);
     }
-    Operation* newOp = rewriter.createOperation(state);
+    Operation* newOp = rewriter.create(state);
     rewriter.replaceOp(op, newOp->getResults());
     return success();
   }
diff --git a/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp b/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
index feb11bd..13906b2 100644
--- a/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
@@ -74,7 +74,7 @@
     }
   }
 
-  auto *dstOp = rewriter.createOperation(state);
+  auto *dstOp = rewriter.create(state);
   rewriter.replaceOp(srcOp, dstOp->getResults());
   return success();
 }
diff --git a/iree/compiler/Dialect/HAL/IR/HALOps.cpp b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
index a2c4c5e..e0b4832 100644
--- a/iree/compiler/Dialect/HAL/IR/HALOps.cpp
+++ b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
@@ -61,17 +61,18 @@
 //===----------------------------------------------------------------------===//
 
 static ParseResult parseDescriptorSetBindings(
-    OpAsmParser &parser, SmallVectorImpl<OpAsmParser::OperandType> &ordinals,
-    SmallVectorImpl<OpAsmParser::OperandType> &buffers,
+    OpAsmParser &parser,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &ordinals,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &buffers,
     SmallVectorImpl<Type> &bufferTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &bufferOffsets,
-    SmallVectorImpl<OpAsmParser::OperandType> &bufferLengths) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &bufferOffsets,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &bufferLengths) {
   do {
-    OpAsmParser::OperandType ordinal;
-    OpAsmParser::OperandType buffer;
+    OpAsmParser::UnresolvedOperand ordinal;
+    OpAsmParser::UnresolvedOperand buffer;
     Type bufferType;
-    OpAsmParser::OperandType bufferOffset;
-    OpAsmParser::OperandType bufferLength;
+    OpAsmParser::UnresolvedOperand bufferOffset;
+    OpAsmParser::UnresolvedOperand bufferLength;
     if (failed(parser.parseOperand(ordinal)) || failed(parser.parseEqual()) ||
         failed(parser.parseLParen()) || failed(parser.parseOperand(buffer)) ||
         failed(parser.parseColonType(bufferType)) ||
@@ -123,7 +124,7 @@
 
 static ParseResult parsePackSliceRanges(
     OpAsmParser &parser, ArrayAttr &lifetimeIntervals,
-    SmallVectorImpl<OpAsmParser::OperandType> &dynamicSliceSizes,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &dynamicSliceSizes,
     SmallVectorImpl<Type> &packedOffsetTypes) {
   auto indexType = parser.getBuilder().getIndexType();
   SmallVector<Attribute> lifetimeRangeValues;
@@ -131,7 +132,7 @@
     if (failed(parser.parseOptionalLSquare())) break;
     IntegerAttr lifetimeStart;
     IntegerAttr lifetimeEnd;
-    OpAsmParser::OperandType dynamicSliceSize;
+    OpAsmParser::UnresolvedOperand dynamicSliceSize;
     if (failed(parser.parseAttribute(lifetimeStart, indexType)) ||
         failed(parser.parseComma()) ||
         failed(parser.parseAttribute(lifetimeEnd, indexType)) ||
@@ -547,7 +548,7 @@
 }
 
 ParseResult DeviceSwitchOp::parse(OpAsmParser &parser, OperationState &result) {
-  OpAsmParser::OperandType device;
+  OpAsmParser::UnresolvedOperand device;
   Type deviceType;
   if (failed(parser.parseLess()) || failed(parser.parseOperand(device)) ||
       failed(parser.parseColonType(deviceType)) ||
@@ -569,7 +570,7 @@
       return failure();
     }
     conditionAttrs.push_back(conditionAttr);
-    SmallVector<OpAsmParser::OperandType> regionArgs;
+    SmallVector<OpAsmParser::UnresolvedOperand> regionArgs;
     SmallVector<Type> regionArgTypes;
     auto *regionBody = result.addRegion();
     if (failed(parser.parseRegion(*regionBody, regionArgs, regionArgTypes))) {
@@ -692,7 +693,7 @@
   // For now assume that the workload is at max 3D. So arguments to the region
   // are workload along x, y and z.
   std::unique_ptr<Region> region;
-  SmallVector<OpAsmParser::OperandType, 4> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 4> regionOperands;
   SmallVector<Type, 4> regionTypes;
   OptionalParseResult parseResult =
       parser.parseOptionalRegion(region, regionOperands, regionTypes);
diff --git a/iree/compiler/Dialect/Stream/IR/StreamOps.cpp b/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
index ec5e8a7..f77d09e 100644
--- a/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
+++ b/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
@@ -234,13 +234,14 @@
 //===----------------------------------------------------------------------===//
 
 static ParseResult parseResourceRegion(
-    OpAsmParser &parser, SmallVectorImpl<OpAsmParser::OperandType> &operands,
+    OpAsmParser &parser,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operands,
     SmallVectorImpl<Type> &operandTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &operandSizes,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operandSizes,
     SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultSizes,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultSizes,
     ArrayAttr &tiedOperands, Region &body) {
-  SmallVector<OpAsmParser::OperandType, 16> regionArgs;
+  SmallVector<OpAsmParser::UnresolvedOperand, 16> regionArgs;
   if (failed(parser.parseLParen())) {
     return failure();
   }
@@ -327,10 +328,12 @@
 //===----------------------------------------------------------------------===//
 
 static ParseResult parseExplicitResourceRegion(
-    OpAsmParser &parser, SmallVectorImpl<OpAsmParser::OperandType> &operands,
+    OpAsmParser &parser,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operands,
     SmallVectorImpl<Type> &operandTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &operandSizes, Region &body) {
-  SmallVector<OpAsmParser::OperandType, 16> regionArgs;
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operandSizes,
+    Region &body) {
+  SmallVector<OpAsmParser::UnresolvedOperand, 16> regionArgs;
   if (failed(parser.parseLParen())) {
     return failure();
   }
@@ -399,7 +402,7 @@
 
 static ParseResult parsePackSliceRanges(
     OpAsmParser &parser, ArrayAttr &lifetimeIntervals,
-    SmallVectorImpl<OpAsmParser::OperandType> &dynamicSliceSizes,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &dynamicSliceSizes,
     SmallVectorImpl<Type> &packedOffsetTypes) {
   auto indexType = parser.getBuilder().getIndexType();
   SmallVector<Attribute> lifetimeRangeValues;
@@ -407,7 +410,7 @@
     if (failed(parser.parseOptionalLSquare())) break;
     IntegerAttr lifetimeStart;
     IntegerAttr lifetimeEnd;
-    OpAsmParser::OperandType dynamicSliceSize;
+    OpAsmParser::UnresolvedOperand dynamicSliceSize;
     if (failed(parser.parseAttribute(lifetimeStart, indexType)) ||
         failed(parser.parseComma()) ||
         failed(parser.parseAttribute(lifetimeEnd, indexType)) ||
@@ -455,11 +458,12 @@
 
 static ParseResult parseConstantValueList(
     OpAsmParser &parser, SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultSizes, ArrayAttr &values) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultSizes,
+    ArrayAttr &values) {
   SmallVector<Attribute> valueAttrs;
   do {
     Type resultType;
-    OpAsmParser::OperandType resultSize;
+    OpAsmParser::UnresolvedOperand resultSize;
     Attribute valueAttr;
     if (failed(parseSizeAwareType(parser, resultType, resultSize)) ||
         failed(parser.parseEqual()) ||
@@ -1660,11 +1664,12 @@
 }
 
 static ParseResult parseDispatchResources(
-    OpAsmParser &parser, SmallVectorImpl<OpAsmParser::OperandType> &resources,
+    OpAsmParser &parser,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resources,
     SmallVectorImpl<Type> &resourceTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resourceSizes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resourceOffsets,
-    SmallVectorImpl<OpAsmParser::OperandType> &resourceLengths,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resourceSizes,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resourceOffsets,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resourceLengths,
     ArrayAttr &resourceAccesses) {
   SmallVector<Attribute> accessAttrs;
   do {
diff --git a/iree/compiler/Dialect/Util/IR/UtilOps.cpp b/iree/compiler/Dialect/Util/IR/UtilOps.cpp
index 31e5233..c41c874 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOps.cpp
+++ b/iree/compiler/Dialect/Util/IR/UtilOps.cpp
@@ -150,12 +150,13 @@
 //===----------------------------------------------------------------------===//
 // [%offset for %length], [%offset for %length], ...
 
-ParseResult parseRangeList(OpAsmParser &parser,
-                           SmallVectorImpl<OpAsmParser::OperandType> &offsets,
-                           SmallVectorImpl<OpAsmParser::OperandType> &lengths) {
+ParseResult parseRangeList(
+    OpAsmParser &parser,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &offsets,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &lengths) {
   do {
-    OpAsmParser::OperandType offset;
-    OpAsmParser::OperandType length;
+    OpAsmParser::UnresolvedOperand offset;
+    OpAsmParser::UnresolvedOperand length;
     if (failed(parser.parseLSquare()) || failed(parser.parseOperand(offset)) ||
         failed(parser.parseKeyword("for")) ||
         failed(parser.parseOperand(length)) || failed(parser.parseRSquare())) {
@@ -186,7 +187,7 @@
 // type{%size}
 
 ParseResult parseSizeAwareType(OpAsmParser &parser, Type &type,
-                               OpAsmParser::OperandType &size) {
+                               OpAsmParser::UnresolvedOperand &size) {
   if (failed(parser.parseType(type)) || failed(parser.parseLBrace()) ||
       failed(parser.parseOperand(size)) || failed(parser.parseRBrace())) {
     return failure();
@@ -208,12 +209,12 @@
 
 ParseResult parseSizeAwareTypeList(
     OpAsmParser &parser, SmallVectorImpl<Type> &types,
-    SmallVectorImpl<OpAsmParser::OperandType> &sizes) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &sizes) {
   do {
     Type type;
     if (failed(parser.parseType(type))) return failure();
     if (type.isa<IREE::Util::SizeAwareTypeInterface>()) {
-      OpAsmParser::OperandType size;
+      OpAsmParser::UnresolvedOperand size;
       if (failed(parser.parseLBrace()) || failed(parser.parseOperand(size)) ||
           failed(parser.parseRBrace())) {
         return failure();
@@ -241,7 +242,7 @@
 ParseResult parseSizeAwareTypeList(
     OpAsmParser &parser, SmallVectorImpl<Type> &types0,
     SmallVectorImpl<Type> &types1,
-    SmallVectorImpl<OpAsmParser::OperandType> &sizes) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &sizes) {
   if (failed(parseSizeAwareTypeList(parser, types0, sizes))) return failure();
   types1 = types0;
   return success();
@@ -260,16 +261,16 @@
 
 ParseResult parseShapedTiedResult(
     OpAsmParser &parser, Type &resultType,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims) {
   ArrayAttr tiedOperands;
   return parseShapedTiedResult(parser, resultType, resultDims, tiedOperands);
 }
 
 ParseResult parseShapedTiedResult(
     OpAsmParser &parser, Type &resultType,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands) {
-  OpAsmParser::OperandType tiedResult;
+  OpAsmParser::UnresolvedOperand tiedResult;
   auto res = parser.parseOptionalOperand(tiedResult);
   int64_t tiedOperandIndex = IREE::Util::TiedOpInterface::kUntiedIndex;
   if (res.hasValue() && succeeded(res.getValue())) {
@@ -279,7 +280,7 @@
   if (failed(parser.parseType(resultType))) return failure();
   if (auto shapedType = resultType.dyn_cast<ShapedType>()) {
     if (!shapedType.hasStaticShape()) {
-      SmallVector<OpAsmParser::OperandType, 4> dynamicDims;
+      SmallVector<OpAsmParser::UnresolvedOperand, 4> dynamicDims;
       if (failed(parser.parseLBrace()) ||
           failed(parser.parseOperandList(dynamicDims,
                                          shapedType.getNumDynamicDims(),
@@ -291,7 +292,7 @@
     }
   } else if (auto sizedType =
                  resultType.dyn_cast<IREE::Util::SizeAwareTypeInterface>()) {
-    OpAsmParser::OperandType size;
+    OpAsmParser::UnresolvedOperand size;
     if (failed(parser.parseLBrace()) || failed(parser.parseOperand(size)) ||
         failed(parser.parseRBrace())) {
       return failure();
@@ -346,13 +347,13 @@
 
 static ParseResult parseShapedOperandList(
     OpAsmParser &parser, SmallVectorImpl<Type> &types,
-    SmallVectorImpl<OpAsmParser::OperandType> &dims) {
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &dims) {
   do {
     Type type;
     if (failed(parser.parseType(type))) return failure();
     if (auto shapedType = type.dyn_cast<ShapedType>()) {
       if (!shapedType.hasStaticShape()) {
-        SmallVector<OpAsmParser::OperandType, 4> dynamicDims;
+        SmallVector<OpAsmParser::UnresolvedOperand, 4> dynamicDims;
         if (failed(parser.parseLBrace()) ||
             failed(parser.parseOperandList(dynamicDims,
                                            shapedType.getNumDynamicDims(),
@@ -364,7 +365,7 @@
       }
     } else if (auto sizedType =
                    type.dyn_cast<IREE::Util::SizeAwareTypeInterface>()) {
-      OpAsmParser::OperandType size;
+      OpAsmParser::UnresolvedOperand size;
       if (failed(parser.parseLBrace()) || failed(parser.parseOperand(size)) ||
           failed(parser.parseRBrace())) {
         return failure();
@@ -378,8 +379,9 @@
 
 // Finds the operand index in |operands| that |tiedResult| references.
 // Returns TiedOpInterface::kUntiedIndex if no operand is found.
-static int64_t findTiedOperand(OpAsmParser::OperandType tiedResult,
-                               ArrayRef<OpAsmParser::OperandType> operands) {
+static int64_t findTiedOperand(
+    OpAsmParser::UnresolvedOperand tiedResult,
+    ArrayRef<OpAsmParser::UnresolvedOperand> operands) {
   int64_t operandIndex = IREE::Util::TiedOpInterface::kUntiedIndex;
   for (int64_t i = 0; i < operands.size(); ++i) {
     if (operands[i].name == tiedResult.name &&
@@ -392,14 +394,15 @@
 }
 
 ParseResult parseShapedResultList(
-    OpAsmParser &parser, ArrayRef<OpAsmParser::OperandType> operands,
-    TypeRange operandTypes, ArrayRef<OpAsmParser::OperandType> operandDims,
+    OpAsmParser &parser, ArrayRef<OpAsmParser::UnresolvedOperand> operands,
+    TypeRange operandTypes,
+    ArrayRef<OpAsmParser::UnresolvedOperand> operandDims,
     SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands) {
   SmallVector<int64_t, 4> tiedOperandIndices;
   do {
-    OpAsmParser::OperandType tiedResult;
+    OpAsmParser::UnresolvedOperand tiedResult;
     auto res = parser.parseOptionalOperand(tiedResult);
     Type type;
     int64_t tiedOperandIndex = IREE::Util::TiedOpInterface::kUntiedIndex;
@@ -422,7 +425,7 @@
     }
     if (auto shapedType = type.dyn_cast<ShapedType>()) {
       if (!shapedType.hasStaticShape()) {
-        SmallVector<OpAsmParser::OperandType, 4> dynamicDims;
+        SmallVector<OpAsmParser::UnresolvedOperand, 4> dynamicDims;
         if (failed(parser.parseLBrace()) ||
             failed(parser.parseOperandList(dynamicDims,
                                            shapedType.getNumDynamicDims(),
@@ -434,7 +437,7 @@
       }
     } else if (auto sizedType =
                    type.dyn_cast<IREE::Util::SizeAwareTypeInterface>()) {
-      OpAsmParser::OperandType size;
+      OpAsmParser::UnresolvedOperand size;
       if (failed(parser.parseLBrace()) || failed(parser.parseOperand(size)) ||
           failed(parser.parseRBrace())) {
         return failure();
@@ -497,11 +500,11 @@
 }
 
 ParseResult parseShapedFunctionType(
-    OpAsmParser &parser, ArrayRef<OpAsmParser::OperandType> operands,
+    OpAsmParser &parser, ArrayRef<OpAsmParser::UnresolvedOperand> operands,
     SmallVectorImpl<Type> &operandTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &operandDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operandDims,
     SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands) {
   if (failed(parser.parseLParen())) return failure();
   if (failed(parser.parseOptionalRParen())) {
@@ -579,7 +582,7 @@
 }
 
 ParseResult DoNotOptimizeOp::parse(OpAsmParser &parser, OperationState &state) {
-  SmallVector<OpAsmParser::OperandType, 2> args;
+  SmallVector<OpAsmParser::UnresolvedOperand, 2> args;
   // Operands and results have the same types.
   auto &operandTypes = state.types;
 
diff --git a/iree/compiler/Dialect/Util/IR/UtilOps.h b/iree/compiler/Dialect/Util/IR/UtilOps.h
index 0793c49..86711d9 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOps.h
+++ b/iree/compiler/Dialect/Util/IR/UtilOps.h
@@ -82,7 +82,7 @@
 // type{%size}
 
 ParseResult parseSizeAwareType(OpAsmParser &parser, Type &type,
-                               OpAsmParser::OperandType &size);
+                               OpAsmParser::UnresolvedOperand &size);
 void printSizeAwareType(OpAsmPrinter &p, Operation *op, Type type, Value size);
 
 //===----------------------------------------------------------------------===//
@@ -92,13 +92,13 @@
 
 ParseResult parseSizeAwareTypeList(
     OpAsmParser &parser, SmallVectorImpl<Type> &types,
-    SmallVectorImpl<OpAsmParser::OperandType> &sizes);
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &sizes);
 void printSizeAwareTypeList(OpAsmPrinter &p, Operation *op, TypeRange types,
                             OperandRange sizes);
 ParseResult parseSizeAwareTypeList(
     OpAsmParser &parser, SmallVectorImpl<Type> &types0,
     SmallVectorImpl<Type> &types1,
-    SmallVectorImpl<OpAsmParser::OperandType> &sizes);
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &sizes);
 void printSizeAwareTypeList(OpAsmPrinter &p, Operation *op, TypeRange types0,
                             TypeRange types1, OperandRange sizes);
 
@@ -110,10 +110,11 @@
 
 ParseResult parseShapedTiedResult(
     OpAsmParser &parser, Type &resultType,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims);
-inline ParseResult parseShapedTiedResult(OpAsmParser &parser, Type &resultType,
-                                         OpAsmParser::OperandType &resultDim) {
-  SmallVector<OpAsmParser::OperandType, 1> resultDims;
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims);
+inline ParseResult parseShapedTiedResult(
+    OpAsmParser &parser, Type &resultType,
+    OpAsmParser::UnresolvedOperand &resultDim) {
+  SmallVector<OpAsmParser::UnresolvedOperand, 1> resultDims;
   if (failed(parseShapedTiedResult(parser, resultType, resultDims))) {
     return failure();
   }
@@ -126,15 +127,15 @@
 
 ParseResult parseShapedTiedResult(
     OpAsmParser &parser, Type &resultType,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands);
 void printShapedTiedResult(OpAsmPrinter &p, Operation *op, Type resultType,
                            ValueRange resultDims, ArrayAttr tiedOperands);
 
-inline ParseResult parseShapedTiedResult(OpAsmParser &parser, Type &resultType,
-                                         OpAsmParser::OperandType &resultDim,
-                                         ArrayAttr &tiedOperands) {
-  SmallVector<OpAsmParser::OperandType> resultDims;
+inline ParseResult parseShapedTiedResult(
+    OpAsmParser &parser, Type &resultType,
+    OpAsmParser::UnresolvedOperand &resultDim, ArrayAttr &tiedOperands) {
+  SmallVector<OpAsmParser::UnresolvedOperand> resultDims;
   if (failed(parseShapedTiedResult(parser, resultType, resultDims,
                                    tiedOperands))) {
     return failure();
@@ -150,10 +151,11 @@
 }
 
 ParseResult parseShapedResultList(
-    OpAsmParser &parser, ArrayRef<OpAsmParser::OperandType> operands,
-    TypeRange operandTypes, ArrayRef<OpAsmParser::OperandType> operandDims,
+    OpAsmParser &parser, ArrayRef<OpAsmParser::UnresolvedOperand> operands,
+    TypeRange operandTypes,
+    ArrayRef<OpAsmParser::UnresolvedOperand> operandDims,
     SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands);
 void printShapedResultList(OpAsmPrinter &p, Operation *op, ValueRange operands,
                            TypeRange operandTypes, ValueRange operandDims,
@@ -166,11 +168,11 @@
 // (type, type{%dim0, %dim1}, type) -> (type{%dim2}, %operand4)
 
 ParseResult parseShapedFunctionType(
-    OpAsmParser &parser, ArrayRef<OpAsmParser::OperandType> operands,
+    OpAsmParser &parser, ArrayRef<OpAsmParser::UnresolvedOperand> operands,
     SmallVectorImpl<Type> &operandTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &operandDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &operandDims,
     SmallVectorImpl<Type> &resultTypes,
-    SmallVectorImpl<OpAsmParser::OperandType> &resultDims,
+    SmallVectorImpl<OpAsmParser::UnresolvedOperand> &resultDims,
     ArrayAttr &tiedOperands);
 void printShapedFunctionType(OpAsmPrinter &p, Operation *op,
                              ValueRange operands, TypeRange operandTypes,
diff --git a/iree/compiler/Dialect/VM/Conversion/ImportUtils.h b/iree/compiler/Dialect/VM/Conversion/ImportUtils.h
index cf2440b..d60fc5e 100644
--- a/iree/compiler/Dialect/VM/Conversion/ImportUtils.h
+++ b/iree/compiler/Dialect/VM/Conversion/ImportUtils.h
@@ -110,7 +110,7 @@
                            }))));
   }
 
-  auto *callOp = rewriter.createOperation(state);
+  auto *callOp = rewriter.create(state);
   copyImportAttrs(importOp, callOp);
   return SmallVector<Value>(callOp->getResults());
 }
diff --git a/iree/compiler/Dialect/VM/IR/VMOps.cpp b/iree/compiler/Dialect/VM/IR/VMOps.cpp
index d9a2064..ddfb09a 100644
--- a/iree/compiler/Dialect/VM/IR/VMOps.cpp
+++ b/iree/compiler/Dialect/VM/IR/VMOps.cpp
@@ -213,7 +213,7 @@
   SmallVector<DictionaryAttr, 8> argAttrs;
   SmallVector<Type, 8> argTypes;
   while (failed(parser.parseOptionalRParen())) {
-    OpAsmParser::OperandType operand;
+    OpAsmParser::UnresolvedOperand operand;
     Type operandType;
     auto operandLoc = parser.getCurrentLocation();
     if (failed(parser.parseOperand(operand)) ||
@@ -865,9 +865,9 @@
 //===----------------------------------------------------------------------===//
 
 static ParseResult parseSwitchOp(OpAsmParser &parser, OperationState &result) {
-  SmallVector<OpAsmParser::OperandType, 4> values;
-  OpAsmParser::OperandType index;
-  OpAsmParser::OperandType defaultValue;
+  SmallVector<OpAsmParser::UnresolvedOperand, 4> values;
+  OpAsmParser::UnresolvedOperand index;
+  OpAsmParser::UnresolvedOperand defaultValue;
   Type type;
   if (failed(parser.parseOperand(index)) ||
       failed(parser.parseOperandList(values, OpAsmParser::Delimiter::Square)) ||
@@ -1060,17 +1060,17 @@
   // We'll instead parse each segment as a flat list so `[(%a, %b), (%c, %d)]`
   // parses as `[%a, %b, %c, %d]` and then do the accounting below when parsing
   // types.
-  SmallVector<OpAsmParser::OperandType, 4> flatOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 4> flatOperands;
   SmallVector<int16_t, 4> flatSegmentSizes;
   while (failed(parser.parseOptionalRParen())) {
     if (succeeded(parser.parseOptionalLSquare())) {
       // Variadic list.
-      SmallVector<OpAsmParser::OperandType, 4> flatSegmentOperands;
+      SmallVector<OpAsmParser::UnresolvedOperand, 4> flatSegmentOperands;
       while (failed(parser.parseOptionalRSquare())) {
         if (succeeded(parser.parseOptionalLParen())) {
           // List contains tuples, so track the () and parse inside of it.
           while (failed(parser.parseOptionalRParen())) {
-            OpAsmParser::OperandType segmentOperand;
+            OpAsmParser::UnresolvedOperand segmentOperand;
             if (failed(parser.parseOperand(segmentOperand))) {
               return parser.emitError(parser.getCurrentLocation())
                      << "invalid operand";
@@ -1086,7 +1086,7 @@
           }
         } else {
           // Flat list of operands.
-          OpAsmParser::OperandType segmentOperand;
+          OpAsmParser::UnresolvedOperand segmentOperand;
           if (failed(parser.parseOperand(segmentOperand))) {
             return parser.emitError(parser.getCurrentLocation())
                    << "invalid operand";
@@ -1106,7 +1106,7 @@
                           flatSegmentOperands.end());
     } else {
       // Normal single operand.
-      OpAsmParser::OperandType operand;
+      OpAsmParser::UnresolvedOperand operand;
       if (failed(parser.parseOperand(operand))) {
         return parser.emitError(parser.getCurrentLocation())
                << "malformed non-variadic operand";
@@ -1276,7 +1276,7 @@
 
 ParseResult CondFailOp::parse(OpAsmParser &parser, OperationState &result) {
   // First operand is either 'condition' or 'status', both i32.
-  OpAsmParser::OperandType condition;
+  OpAsmParser::UnresolvedOperand condition;
   if (failed(parser.parseOperand(condition))) {
     return failure();
   }
@@ -1284,7 +1284,7 @@
   // First try looking for an operand after a comma. If no operand, keep track
   // of the already parsed comma to avoid checking for a comma later on.
   bool trailingComma = false;
-  OpAsmParser::OperandType status = condition;
+  OpAsmParser::UnresolvedOperand status = condition;
   if (succeeded(parser.parseOptionalComma()) &&
       !parser.parseOptionalOperand(status).hasValue()) {
     trailingComma = true;
diff --git a/iree/compiler/InputConversion/Common/IREEImportPublic.cpp b/iree/compiler/InputConversion/Common/IREEImportPublic.cpp
index dabf718..6b3f11e 100644
--- a/iree/compiler/InputConversion/Common/IREEImportPublic.cpp
+++ b/iree/compiler/InputConversion/Common/IREEImportPublic.cpp
@@ -75,7 +75,7 @@
 
     OperationState state(srcOp->getLoc(), targetName, operands, resultTypes,
                          srcOp->getAttrs());
-    Operation *targetOp = rewriter.createOperation(state);
+    Operation *targetOp = rewriter.create(state);
     rewriter.replaceOp(srcOp, targetOp->getResults());
     return success();
   }
@@ -247,7 +247,7 @@
           newRegion->getArgumentTypes(), result);
       rewriter.applySignatureConversion(newRegion, result);
     }
-    Operation *newOp = rewriter.createOperation(state);
+    Operation *newOp = rewriter.create(state);
     rewriter.replaceOp(op, newOp->getResults());
     return success();
   }
diff --git a/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp b/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
index ac40eca..7f6f763 100644
--- a/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
+++ b/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
@@ -127,7 +127,7 @@
     }
   }
 
-  auto *newOp = builder.createOperation(state);
+  auto *newOp = builder.create(state);
 
   for (auto oldNewResult :
        llvm::zip(oldOp->getResults(), newOp->getResults())) {
diff --git a/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp b/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
index 3e94508..0040ae1 100644
--- a/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
+++ b/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
@@ -290,7 +290,7 @@
       }
       rewriter.applySignatureConversion(newRegion, result);
     }
-    Operation *newOp = rewriter.createOperation(state);
+    Operation *newOp = rewriter.create(state);
     rewriter.replaceOp(op, newOp->getResults());
     return success();
   }
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
index 4ae75cc..d72c312 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/IR/LinalgExtInterfaces.td
@@ -421,7 +421,7 @@
           $_op->getAttrs());
         for (Region &r : $_op->getRegions())
           r.cloneInto(state.addRegion(), bvm);
-        return b.createOperation(state);
+        return b.create(state);
       }]
     >
   ];
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/Transforms/Transforms.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/Transforms/Transforms.h
index a5644d4..311ed01 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/Transforms/Transforms.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgExt/Transforms/Transforms.h
@@ -7,6 +7,7 @@
 #ifndef IREE_DIALECTS_DIALECT_LINALGEXT_TRANSFORMS_TRANSFORMS_H_
 #define IREE_DIALECTS_DIALECT_LINALGEXT_TRANSFORMS_TRANSFORMS_H_
 
+#include "iree-dialects/Dialect/LinalgExt/IR/LinalgExtOps.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
 #include "mlir/IR/PatternMatch.h"
 
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
index 6c06913..723e10c 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
@@ -1327,13 +1327,13 @@
 ParseResult TileOp::parse(OpAsmParser &parser, OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  OpAsmParser::OperandType tileSizes;
+  OpAsmParser::UnresolvedOperand tileSizes;
   // TODO: also allow tensor<..xindex> and figure out a good syntax.
   // Type tensorOfIndexType =
   //     RankedTensorType::get({ShapedType::kDynamicSize}, indexType);
   Type tileSizesType = builder.getIndexType();
   SmallVector<Type> outsTypes;
-  SmallVector<OpAsmParser::OperandType, 4> outsOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 4> outsOperands;
 
   llvm::SMLoc outputsOperandsLoc;
   if (parser.parseOperand(tileSizes) ||
@@ -1369,7 +1369,7 @@
   if (parser.parseArrowTypeList(result.types))
     return failure();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   SmallVector<Type, 8> operandTypes, regionTypes;
   if (parser.parseRegion(*region, regionOperands, regionTypes))
@@ -1431,7 +1431,7 @@
 ParseResult InParallelOp::parse(OpAsmParser &parser, OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  OpAsmParser::OperandType numThreads;
+  OpAsmParser::UnresolvedOperand numThreads;
   Type indexType = builder.getIndexType();
 
   if (parser.parseOperand(numThreads) ||
@@ -1440,7 +1440,7 @@
   if (parser.parseArrowTypeList(result.types))
     return failure();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   SmallVector<Type, 8> regionTypes;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   if (parser.parseRegion(*region, regionOperands, regionTypes))
@@ -1608,7 +1608,7 @@
                                          OperationState &result) {
   auto &builder = parser.getBuilder();
 
-  SmallVector<OpAsmParser::OperandType, 8> regionOperands;
+  SmallVector<OpAsmParser::UnresolvedOperand, 8> regionOperands;
   SmallVector<Type, 8> regionTypes;
   std::unique_ptr<Region> region = std::make_unique<Region>();
   if (parser.parseRegion(*region, regionOperands, regionTypes))
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
index c2fea6b..a5b7458 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/LinalgTransformOps.cpp
@@ -428,7 +428,7 @@
 ParseResult transform::VectorizeOp::parse(OpAsmParser &parser,
                                           OperationState &result) {
   auto operationType = pdl::OperationType::get(parser.getContext());
-  OpAsmParser::OperandType target;
+  OpAsmParser::UnresolvedOperand target;
   OptionalParseResult parseResult = parser.parseOptionalOperand(target);
   if (parseResult.hasValue()) {
     if (parseResult.getValue().failed() ||
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
index e8d9477..0a39f85 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/PDL.cpp
@@ -10,6 +10,7 @@
 #include "mlir/Dialect/Arithmetic/Utils/Utils.h"
 #include "mlir/Dialect/Linalg/Transforms/Transforms.h"
 #include "mlir/Dialect/PDL/IR/PDLOps.h"
+#include "mlir/IR/Attributes.h"
 #include "mlir/IR/SymbolTable.h"
 #include "mlir/Rewrite/FrozenRewritePatternSet.h"
 #include "mlir/Rewrite/PatternApplicator.h"
@@ -34,26 +35,28 @@
       });
 }
 
-/// Hook for PDL driver to check if an operation (`value`) is directly nested in
-/// a function with the name provided as constant parameter.
+/// Hook for PDL driver to check if an operation (`values[0]`) is directly
+/// nested in a function with the name provided by an attribute (`values[1]`).
 /// TODO: PDL needs user-defined "questions".
-static LogicalResult nestedInFunc(PDLValue value, ArrayAttr constantParams,
+static LogicalResult nestedInFunc(ArrayRef<PDLValue> values,
                                   PatternRewriter &rewriter) {
-  auto *operation = value.cast<Operation *>();
-  auto func = operation->getParentOfType<FuncOp>();
-  assert(constantParams.size() == 1 &&
-         "expected a constant param with function name");
-  auto functionSymbol = constantParams[0].dyn_cast<SymbolRefAttr>();
-  assert(functionSymbol && "expected a function name");
+  assert(values.size() == 2 && "expected two arguments");
+  auto *operation = values[0].cast<Operation *>();
+  auto attr = values[1].cast<Attribute>();
+
+  auto func = operation->getParentOfType<func::FuncOp>();
+  auto functionSymbol = attr.dyn_cast<SymbolRefAttr>();
 
   if (!func)
     return rewriter.notifyMatchFailure(operation, "not nested in a function");
+  if (!functionSymbol)
+    return rewriter.notifyMatchFailure(operation, "not a function identifier");
   return success(functionSymbol.getLeafReference() == func.getName());
 }
 
 /// PDL rewrite hook that does nothing.
-static void noOpRewriter(ArrayRef<PDLValue> args, ArrayAttr constantParams,
-                         PatternRewriter &rewriter, PDLResultList &results) {
+static void noOpRewriter(ArrayRef<PDLValue> args, PatternRewriter &rewriter,
+                         PDLResultList &results) {
   assert(args.size() == 1 && "expected one argument");
 #ifndef NDEBUG
   args.front().cast<Operation *>()->setAttr("iree_linalg_transform.matched",
@@ -130,48 +133,44 @@
   return haveEquivalentBodies(linalgOp, linalgModelOp, rewriter);
 }
 
-/// Check whether the unique Operation* `op` stored in `value` (assumed) is
-/// equivalent to the unique StringRefAttr operation name passed in
-/// `constantParams`.
+/// Check whether the unique Operation* stored in `values[0]` (assumed) is
+/// equivalent to the unique StringRefAttr passed in `values[1]` (assumed).
 /// Equivalence is achieved when either:
-///   1. `op` has the name stored in `constantParams`.
-///   2. `op` and `constantParams` are both linalg ops and their structured
+///   1. `values[0]` has the name stored in `values[1]`.
+///   2. `values[0]` and `values[1]` are both linalg ops and their structured
 ///      interfaces as well as their bodies are equivalent.
 ///      Structured interfaces equivalence is a simple attribute level check.
 ///      Body equivalence is more involved and currently limited:
 ///        a. the current impl constructs an instance of the op whose name is
-///           specified in `constantParams` and checks for exact body equality.
+///           specified in `values[1]` and checks for exact body equality.
 ///        b. a more advanced version would "subtract" the bodies and fold, cse
 ///           and canonicalize to fixed point. If the result is "all zeros",
 ///           then the bodies would be equivalent (really isomorphic).
 ///   3. other cases TBD (e.g. vector.generic when available).
-static LogicalResult isEquivalentToOp(PDLValue value, ArrayAttr constantParams,
+static LogicalResult isEquivalentToOp(ArrayRef<PDLValue> values,
                                       PatternRewriter &rewriter) {
-  auto *maybeOp = value.dyn_cast<Operation *>();
-  if (!maybeOp)
-    return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
-  Operation *op = maybeOp;
+  assert(values.size() == 2 && "expected two arguments");
+  auto *operation = values[0].cast<Operation *>();
+  auto attribute = values[1].cast<Attribute>();
 
-  ArrayRef<Attribute> attrs = constantParams.getValue();
-  if (attrs.size() != 1)
-    return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
-  auto modelOpNameAttr = attrs.front().dyn_cast<StringAttr>();
+  auto modelOpNameAttr = attribute.dyn_cast<StringAttr>();
   if (!modelOpNameAttr)
     return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
   auto modelOpName = modelOpNameAttr.strref();
 
   // 1. If op has name `modelOpName`, the match is trivial.
-  if (op->getName().getStringRef() == modelOpName)
+  if (operation->getName().getStringRef() == modelOpName)
     return success();
 
   // 2. Linalg vs Linalg.
-  // Create op from `constantParams`.
-  OperationState modelOpState(op->getLoc(), modelOpName, op->getOperands(),
-                              op->getResultTypes(), op->getAttrs());
+  // Create op from `modelOpName`.
+  OperationState modelOpState(
+      operation->getLoc(), modelOpName, operation->getOperands(),
+      operation->getResultTypes(), operation->getAttrs());
   modelOpState.addRegion();
-  Operation *modelOp = rewriter.createOperation(modelOpState);
+  Operation *modelOp = rewriter.create(modelOpState);
   auto g1 = llvm::make_scope_exit([&]() { rewriter.eraseOp(modelOp); });
-  LinalgOp linalgOp = dyn_cast<LinalgOp>(op);
+  LinalgOp linalgOp = dyn_cast<LinalgOp>(operation);
   LinalgOp linalgModelOp = dyn_cast<LinalgOp>(modelOp);
   if (linalgOp && linalgModelOp)
     return isEquivalentToOpImpl(linalgOp, linalgModelOp, rewriter);
@@ -181,21 +180,20 @@
 }
 
 /// Assume that:
-///   1. `value` is an operands range
-///   2. `constantParams` contains a DictAttr with `operand_number`, `dim` and
+///   1. `values[0]` is an operands range
+///   2. `values[1]` contains a DictAttr with `operand_number`, `dim` and
 ///      `divisor` IntegerAttr entries.
-/// Succeed if `value`[`operand_number`] is a ranked type whose `dim` is a
+/// Succeed if `operands`[`operand_number`] is a ranked type whose `dim` is a
 /// multiple of `divisor`.
 /// Note: 0 is the convention to express "do not tile", it is considered to
 /// divide everything.
-static LogicalResult isDimMultipleOf(PDLValue value, ArrayAttr constantParams,
+static LogicalResult isDimMultipleOf(ArrayRef<PDLValue> values,
                                      PatternRewriter &rewriter) {
-  auto maybeOperands = value.dyn_cast<ValueRange>();
-  if (!maybeOperands)
-    return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
-  auto operands = *maybeOperands;
+  assert(values.size() == 2 && "expected two arguments");
+  auto operands = values[0].cast<ValueRange>();
+  auto attribute = values[1].cast<Attribute>();
 
-  auto dict = constantParams.begin()->dyn_cast<DictionaryAttr>();
+  auto dict = attribute.dyn_cast<DictionaryAttr>();
   if (!dict)
     return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
 
@@ -227,19 +225,18 @@
 }
 
 /// Assume that:
-///   1. `value` is an operands range
-///   2. `constantParams` contains a DictAttr with `operand_number` and `dim`
+///   1. `values[0]` is an operands range
+///   2. `values[1]` contains a DictAttr with `operand_number` and `dim`
 ///       IntegerAttr entries.
 /// Succeed if `value`[`operand_number`] is a ranked type whose `dim` is
 /// dynamic.
-static LogicalResult isDimStatic(PDLValue value, ArrayAttr constantParams,
+static LogicalResult isDimStatic(ArrayRef<PDLValue> values,
                                  PatternRewriter &rewriter) {
-  auto maybeOperands = value.dyn_cast<ValueRange>();
-  if (!maybeOperands)
-    return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
-  auto operands = *maybeOperands;
+  assert(values.size() == 2 && "expected two arguments");
+  auto operands = values[0].cast<ValueRange>();
+  auto attribute = values[1].cast<Attribute>();
 
-  auto dict = constantParams.begin()->dyn_cast<DictionaryAttr>();
+  auto dict = attribute.dyn_cast<DictionaryAttr>();
   if (!dict)
     return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
 
@@ -262,19 +259,18 @@
 }
 
 /// Assume that:
-///   1. `value` is an operands range
-///   2. `constantParams` contains a DictAttr with `operand_number` and `dim`
+///   1. `values[0]` is an operands range
+///   2. `values[1]` contains a DictAttr with `operand_number` and `dim`
 ///       IntegerAttr entries.
 /// Succeed if `value`[`operand_number`] is a ranked type whose `dim` is
 /// dynamic.
-static LogicalResult isDimDynamic(PDLValue value, ArrayAttr constantParams,
+static LogicalResult isDimDynamic(ArrayRef<PDLValue> values,
                                   PatternRewriter &rewriter) {
-  auto maybeOperands = value.dyn_cast<ValueRange>();
-  if (!maybeOperands)
-    return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
-  auto operands = *maybeOperands;
+  assert(values.size() == 2 && "expected two arguments");
+  auto operands = values[0].cast<ValueRange>();
+  auto attribute = values[1].cast<Attribute>();
 
-  auto dict = constantParams.begin()->dyn_cast<DictionaryAttr>();
+  auto dict = attribute.dyn_cast<DictionaryAttr>();
   if (!dict)
     return failure(); // TODO: notifyMatchFailure needs an Operation* handle.
 
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
index f4ad03a..6b00086 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/PyDM/IR/PyDMOps.cpp
@@ -458,7 +458,7 @@
   Region *elseRegion = result.addRegion();
 
   auto &builder = parser.getBuilder();
-  OpAsmParser::OperandType cond;
+  OpAsmParser::UnresolvedOperand cond;
   Type conditionType = builder.getType<PyBoolType>();
   if (parser.parseOperand(cond) ||
       parser.resolveOperand(cond, conditionType, result.operands))
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/convert_to_loops.mlir b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/convert_to_loops.mlir
index f4871a8..a739875 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/convert_to_loops.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/convert_to_loops.mlir
@@ -382,12 +382,11 @@
 // CHECK-DAG:     %[[C16:.+]] = arith.constant 16 : index
 // CHECK-DAG:     %[[COEFF:.+]] = arith.constant -3.14159274 : f32
 // CHECK:         scf.for %[[K:.+]] = %[[C0]] to %[[C16]] step %[[C2]]
-// CHECK-DAG:       %[[HM:.+]] = arith.shrsi %[[C2]], %[[C1]] : index
-// CHECK:           %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[K]]] [%[[HM]]] [1]
-// CHECK:           %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[K]]] [%[[HM]]] [1]
-// CHECK:           %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[HM]] : index
-// CHECK:           %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[R_OFFSET]]] [%[[HM]]] [1]
-// CHECK:           %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[R_OFFSET]]] [%[[HM]]] [1]
+// CHECK:           %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[K]]] [%[[C1]]] [1]
+// CHECK:           %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[K]]] [%[[C1]]] [1]
+// CHECK:           %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[C1]] : index
+// CHECK:           %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[R_OFFSET]]] [%[[C1]]] [1]
+// CHECK:           %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[R_OFFSET]]] [%[[C1]]] [1]
 // CHECK:           linalg.generic
 // CHECK-SAME:        indexing_maps = [#[[MAP1]], #[[MAP1]], #[[MAP1]], #[[MAP1]]]
 // CHECK-SAME:        iterator_types = ["parallel"]
@@ -441,12 +440,11 @@
 // CHECK-DAG:     %[[D0:.+]] = memref.dim %[[REAL]], %[[C0]] : memref<?x16xf32>
 // CHECK:         scf.for %[[I:.+]] = %[[C0]] to %[[D0]] step %[[C1]]
 // CHECK:           scf.for %[[K:.+]] = %[[C0]] to %[[C16]] step %[[C4]]
-// CHECK-DAG:         %[[HM:.+]] = arith.shrsi %[[C4]], %[[C1]] : index
-// CHECK:             %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[K]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[K]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[HM]] : index
-// CHECK:             %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[R_OFFSET]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[R_OFFSET]]] [1, %[[HM]]] [1, 1]
+// CHECK:             %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[K]]] [1, %[[C2]]] [1, 1]
+// CHECK:             %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[K]]] [1, %[[C2]]] [1, 1]
+// CHECK:             %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[C2]] : index
+// CHECK:             %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[R_OFFSET]]] [1, %[[C2]]] [1, 1]
+// CHECK:             %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[R_OFFSET]]] [1, %[[C2]]] [1, 1]
 // CHECK:             linalg.generic
 // CHECK-SAME:          indexing_maps = [#[[MAP1]], #[[MAP1]], #[[MAP1]], #[[MAP1]]]
 // CHECK-SAME:          iterator_types = ["parallel", "parallel"]
@@ -479,12 +477,11 @@
 // CHECK-DAG:     %[[D0:.+]] = memref.dim %[[REAL]], %[[C0]] : memref<?x16xf32>
 // CHECK:         scf.for %[[I:.+]] = %[[C0]] to %[[D0]] step %[[C1]]
 // CHECK:           scf.for %[[K:.+]] = %[[C0]] to %[[C16]] step %[[C2]]
-// CHECK-DAG:         %[[HM:.+]] = arith.shrsi %[[C2]], %[[C1]] : index
-// CHECK:             %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[K]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[K]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[HM]] : index
-// CHECK:             %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[R_OFFSET]]] [1, %[[HM]]] [1, 1]
-// CHECK:             %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[R_OFFSET]]] [1, %[[HM]]] [1, 1]
+// CHECK:             %[[L_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[K]]] [1, %[[C1]]] [1, 1]
+// CHECK:             %[[L_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[K]]] [1, %[[C1]]] [1, 1]
+// CHECK:             %[[R_OFFSET:.+]] = arith.addi %[[K]], %[[C1]] : index
+// CHECK:             %[[R_REAL_SLICE:.+]] = memref.subview %[[REAL]][%[[I]], %[[R_OFFSET]]] [1, %[[C1]]] [1, 1]
+// CHECK:             %[[R_IMAG_SLICE:.+]] = memref.subview %[[IMAG]][%[[I]], %[[R_OFFSET]]] [1, %[[C1]]] [1, 1]
 // CHECK:             linalg.generic
 // CHECK-SAME:          indexing_maps = [#[[MAP1]], #[[MAP1]], #[[MAP2]], #[[MAP2]], #[[MAP2]], #[[MAP2]]]
 // CHECK-SAME:          iterator_types = ["parallel", "parallel"]
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/tiling-to-tile-op.mlir b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/tiling-to-tile-op.mlir
index 0e0ea93..0e540d7 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/tiling-to-tile-op.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/iree_linalg_ext/tiling-to-tile-op.mlir
@@ -1,6 +1,6 @@
 // RUN: iree-dialects-opt %s -linalg-interp-transforms --split-input-file | FileCheck %s
 
-// CHECK: #[[$MAP:.+]] = affine_map<(d0, d1)[s0] -> (d0, -d1 + s0)>
+// CHECK: #[[$MAP:.+]] = affine_map<(d0, d1)[s0] -> (-d1 + s0, d0)>
 module {
 // CHECK-LABEL: matmul(
 //  CHECK-SAME:   %[[A:[0-9a-z]+]]: tensor<?x?xf32>
@@ -12,11 +12,11 @@
   //      CHECK: ^bb0(%[[OFF:.*]]: index, %[[SZ:.*]]: index, %[[C_ITER:.*]]: tensor<?x?xf32>):
   //      CHECK:   %[[tA:.*]] = tensor.extract_slice %[[A]]{{.*}} : tensor<?x?xf32> to tensor<?x?xf32>
   //      CHECK:   %[[tB:.*]] = tensor.extract_slice %[[B]]{{.*}} : tensor<?x?xf32> to tensor<?x?xf32>
-  //      CHECK:   %[[RES:.*]] = linalg.matmul 
+  //      CHECK:   %[[RES:.*]] = linalg.matmul
   // CHECK-SAME:      ins(%[[tA]], %[[tB]] : tensor<?x?xf32>, tensor<?x?xf32>)
   // CHECK-SAME:     outs(%[[C_ITER]] : tensor<?x?xf32>) -> tensor<?x?xf32>
   //      CHECK:   iree_linalg_ext.tile_yield %[[RES]] : tensor<?x?xf32>
-    %0 = linalg.matmul ins(%A, %B : tensor<?x?xf32>, tensor<?x?xf32>) 
+    %0 = linalg.matmul ins(%A, %B : tensor<?x?xf32>, tensor<?x?xf32>)
                       outs(%C : tensor<?x?xf32>) -> (tensor<?x?xf32>)
     return %0 : tensor<?x?xf32>
   }
@@ -34,7 +34,7 @@
 
 // -----
 
-// CHECK: #[[$MAP:.+]] = affine_map<(d0, d1) -> (d0, -d1 + 100)>
+// CHECK: #[[$MAP:.+]] = affine_map<(d0, d1) -> (-d1 + 100, d0)>
 module {
 // CHECK-LABEL: matmul_static(
 //  CHECK-SAME:   %[[A:[0-9a-z]+]]: tensor<100x200xf32>
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/bufferize.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/bufferize.mlir
index b4b7bde..c2dc9ec 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/bufferize.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/bufferize.mlir
@@ -23,7 +23,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/double-tiling.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/double-tiling.mlir
index 74d6cff..b6bd4c0 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/double-tiling.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/double-tiling.mlir
@@ -31,7 +31,8 @@
   %args = operands
   %results= types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   rewrite %0 with "iree_linalg_transform.apply"
 }
 iree_linalg_transform.sequence {
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/drop-schedule.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/drop-schedule.mlir
index c82252b..1ce44dc 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/drop-schedule.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/drop-schedule.mlir
@@ -1,7 +1,7 @@
 // RUN: iree-dialects-opt -linalg-drop-schedule %s | FileCheck %s
 
 func @matmul_tensors(
-  %arg0: tensor<128x128xf32>, %arg1: tensor<128x128xf32>, %arg2: tensor<128x128xf32> { linalg.inplaceable = true}) 
+  %arg0: tensor<128x128xf32>, %arg1: tensor<128x128xf32>, %arg2: tensor<128x128xf32> { linalg.inplaceable = true})
     -> tensor<128x128xf32> {
   %0 = linalg.matmul  ins(%arg0, %arg1: tensor<128x128xf32>, tensor<128x128xf32>)
                      outs(%arg2: tensor<128x128xf32>)
@@ -14,7 +14,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/expert.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/expert.mlir
index b5825ee..7bbbb6d 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/expert.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/expert.mlir
@@ -18,7 +18,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -100,7 +101,8 @@
   %args = pdl.operands
   %results = pdl.types
   %0 = pdl.operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  pdl.apply_native_constraint "nestedInFunc"[@matmul_tensors2](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors2
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   pdl.rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/failure.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/failure.mlir
index f0ecf7c..971db0b 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/failure.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/failure.mlir
@@ -118,7 +118,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@no_replacement](%0 : !pdl.operation)
+  %1 = pdl.attribute @no_replacement
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -148,7 +149,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@repeated_match](%0 : !pdl.operation)
+  %1 = pdl.attribute @repeated_match
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -158,7 +160,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@repeated_match](%0 : !pdl.operation)
+  %1 = pdl.attribute @repeated_match
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -169,7 +172,7 @@
   // expected-error @below {{failed to apply}}
   // expected-note @below {{handle}}
   %1 = match @pdl_target2
-  
+
   // Add references to handles produced by match so that they are not DCE'd.
   tile %0
   tile %1
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/fuse.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/fuse.mlir
index 6a78eb3..4d2d060 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/fuse.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/fuse.mlir
@@ -20,7 +20,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "linalg.elemwise_binary"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@fuse_unary](%0 : !pdl.operation)
+  %1 = pdl.attribute @fuse_unary
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/generalize.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/generalize.mlir
index ea12b9a..916e591 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/generalize.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/generalize.mlir
@@ -16,7 +16,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "linalg.elemwise_unary"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@generalize_unary](%0 : !pdl.operation)
+  %1 = pdl.attribute @generalize_unary
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/interchange.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/interchange.mlir
index e988133..77c1bbc 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/interchange.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/interchange.mlir
@@ -23,7 +23,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "linalg.generic"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@interchange_generic](%0 : !pdl.operation)
+  %1 = pdl.attribute @interchange_generic
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/pad.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/pad.mlir
index d6d627b..24ebc1c 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/pad.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/pad.mlir
@@ -31,7 +31,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "linalg.elemwise_unary"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@pad_unary](%0 : !pdl.operation)
+  %1 = pdl.attribute @pad_unary
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/peel.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/peel.mlir
index f6c0a7c..774671f 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/peel.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/peel.mlir
@@ -37,7 +37,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "scf.for"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@fully_dynamic_bounds](%0 : !pdl.operation)
+  %1 = pdl.attribute @fully_dynamic_bounds
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/print.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/print.mlir
new file mode 100644
index 0000000..e9cf0ee
--- /dev/null
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/print.mlir
@@ -0,0 +1,8 @@
+// RUN: iree-dialects-opt -linalg-interp-transforms %s | FileCheck %s
+
+// CHECK-LABEL: IR printer: test print
+// CHECK-NEXT:  module
+// CHECK-NEXT:  iree_linalg_transform.sequence
+iree_linalg_transform.sequence {
+  print {name = "test print"}
+}
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/selective-targeting.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/selective-targeting.mlir
index fdcd2f9..58bca60 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/selective-targeting.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/selective-targeting.mlir
@@ -52,7 +52,8 @@
   %results = types
   %attr = attribute
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) {"test.attrA" = %attr}-> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -63,7 +64,8 @@
   %results = types
   %attr = attribute
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) {"test.attrC" = %attr}-> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
@@ -99,7 +101,8 @@
   %results = types
   %attr = attribute
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) {"test.attrA" = %attr}-> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@vectorize_one](%0 : !pdl.operation)
+  %1 = pdl.attribute @vectorize_one
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir
index adffa86..ea4caf8 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir
@@ -18,7 +18,8 @@
   %args = operands
   %results = types
   %0 = pdl.operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile-interchange.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile-interchange.mlir
index 88286aa..4c8f712 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile-interchange.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile-interchange.mlir
@@ -23,7 +23,8 @@
   %0 = operands
   %1 = types
   %2 = operation "linalg.generic"(%0 : !pdl.range<value>)  -> (%1 : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc" [@matmul_021](%2 : !pdl.operation)
+  %3 = pdl.attribute @matmul_021
+  apply_native_constraint "nestedInFunc"(%2, %3 : !pdl.operation, !pdl.attribute)
   rewrite %2 with "iree_linalg_transform.apply"
 }
 
@@ -60,7 +61,8 @@
   %0 = operands
   %1 = types
   %2 = operation "linalg.generic"(%0 : !pdl.range<value>)  -> (%1 : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc" [@matmul_210](%2 : !pdl.operation)
+  %3 = pdl.attribute @matmul_210
+  apply_native_constraint "nestedInFunc"(%2, %3 : !pdl.operation, !pdl.attribute)
   rewrite %2 with "iree_linalg_transform.apply"
 }
 
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile.mlir
index ba94d44..d940527 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/tile.mlir
@@ -33,7 +33,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/vectorize-transforms.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/vectorize-transforms.mlir
index 60864ee..4a609b6 100644
--- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/vectorize-transforms.mlir
+++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/vectorize-transforms.mlir
@@ -5,7 +5,8 @@
   %args = operands
   %results = types
   %0 = operation "linalg.matmul"(%args : !pdl.range<value>) -> (%results : !pdl.range<type>)
-  apply_native_constraint "nestedInFunc"[@matmul_tensors](%0 : !pdl.operation)
+  %1 = pdl.attribute @matmul_tensors
+  apply_native_constraint "nestedInFunc"(%0, %1 : !pdl.operation, !pdl.attribute)
   // TODO: we don't want this, but it is the required terminator for pdl.pattern
   rewrite %0 with "iree_linalg_transform.apply"
 }
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 7e5e146..5c116d5 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 7e5e146f0f31fab1e45e5554ce93068655098fcb
+Subproject commit 5c116d50e42f93ef4fa9a9719121378ec6b99b69
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index 467cd37..e918d22 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit 467cd37703dc0c4195ce6351617ef320bb60e927
+Subproject commit e918d22b258375050a140b320eeb1d1167079e43