Merge pull request #7723 from rsuderman:main-to-google

PiperOrigin-RevId: 411660910
diff --git a/SUBMODULE_VERSIONS.txt b/SUBMODULE_VERSIONS.txt
index 018ac78..7896a76 100644
--- a/SUBMODULE_VERSIONS.txt
+++ b/SUBMODULE_VERSIONS.txt
@@ -4,14 +4,14 @@
 aa533abfd4232b01f9e57041d70114d5a77e6de0 third_party/googletest
 88b845dee001723c4a0db1fe5477de735b6d3bb0 third_party/liburing
 acd6f6f014c25e46363e718381e0b35205df2d83 third_party/libyaml
-274f12a44c606ecd20152f3e63c4f186793d9a8c third_party/llvm-project
-d1aa0659cedd784e91adc99fff435138a28ca1f7 third_party/mlir-hlo
+4348cd42c385e71b63e5da7e492172cff6a79d7b third_party/llvm-project
+d059fb99f7be3cf412ff9179fffa548829aa7731 third_party/mlir-hlo
 3f701faace7addc75d16dea8a6cd769fa5b3f260 third_party/musl
 4c7697dbe973ed01ae6fbec37d186ebd05982e1f third_party/pybind11
 2e1b5fb39ebc2ef4cb77005f8267e4f3a6241ba1 third_party/spirv_cross
 f5417a4b6633c3217c9a1bc2f0c70b1454975ba7 third_party/spirv_headers
 b42009b3b9d4ca35bc703f5310eedc74f584be58 third_party/stblib
-548efc0654f4e10ca5ecc541a545b49e769830d4 third_party/tensorflow
+276d16f16c7db0906ca20e7df96ecda5999e1074 third_party/tensorflow
 058e89011fceca912d43638ebb6b85992147fcfe third_party/tracy
 9d10a96f2d57c3c37e167f2e73c9a31ac2e51fa5 third_party/vulkan_headers
 8d4a9e9174a9c6ad6a3a3ae981b915ef13fc12c4 third_party/vulkan_memory_allocator
diff --git a/integrations/tensorflow/iree_tf_compiler/MHLO/FlattenTuplesInCFG.cpp b/integrations/tensorflow/iree_tf_compiler/MHLO/FlattenTuplesInCFG.cpp
index 840f198..0fcf381 100644
--- a/integrations/tensorflow/iree_tf_compiler/MHLO/FlattenTuplesInCFG.cpp
+++ b/integrations/tensorflow/iree_tf_compiler/MHLO/FlattenTuplesInCFG.cpp
@@ -53,11 +53,11 @@
   for (const auto &oldAttr : oldOp->getAttrs()) {
     // Don't copy segment attributes as these correspond to the number operands,
     // which may be different.
-    if (oldAttr.first == "operand_segment_sizes" ||
-        oldAttr.first == "result_segment_sizes")
+    if (oldAttr.getName() == "operand_segment_sizes" ||
+        oldAttr.getName() == "result_segment_sizes")
       continue;
 
-    newOp->setAttr(oldAttr.first, oldAttr.second);
+    newOp->setAttr(oldAttr.getName(), oldAttr.getValue());
   }
 }
 
@@ -237,8 +237,8 @@
   BlockAndValueMapping mapping;
 
   for (auto attr : oldFunction->getAttrs()) {
-    if (attr.first != oldFunction.getTypeAttrName()) {
-      newFunction->setAttr(attr.first, attr.second);
+    if (attr.getName() != oldFunction.getTypeAttrName()) {
+      newFunction->setAttr(attr.getName(), attr.getValue());
     }
   }
 
diff --git a/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp b/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
index daedf83..ba3c421 100644
--- a/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
+++ b/integrations/tensorflow/iree_tf_compiler/TF/ConvertToMHLO.cpp
@@ -62,8 +62,8 @@
     mlir::TF::PopulateTFLoweringBeforeHLOPatterns(context, &lowerTfPatterns);
 
     OwningRewritePatternList canonicalizePatterns(&getContext());
-    for (auto *op : context->getRegisteredOperations()) {
-      op->getCanonicalizationPatterns(canonicalizePatterns, context);
+    for (auto op : context->getRegisteredOperations()) {
+      op.getCanonicalizationPatterns(canonicalizePatterns, context);
     }
 
     OwningRewritePatternList patterns(&getContext());
diff --git a/integrations/tensorflow/iree_tf_compiler/TF/StripMetadata.cpp b/integrations/tensorflow/iree_tf_compiler/TF/StripMetadata.cpp
index b44db44..f1fc99c 100644
--- a/integrations/tensorflow/iree_tf_compiler/TF/StripMetadata.cpp
+++ b/integrations/tensorflow/iree_tf_compiler/TF/StripMetadata.cpp
@@ -17,11 +17,11 @@
 namespace TF {
 
 static bool isTFAttr(NamedAttribute &namedAttr) {
-  auto name = namedAttr.first.strref();
+  auto name = namedAttr.getName().strref();
   if (name.startswith("tf.") || name.startswith("tf_")) {
     return true;
   }
-  StringRef attrNamespace = namedAttr.second.getDialect().getNamespace();
+  StringRef attrNamespace = namedAttr.getValue().getDialect().getNamespace();
   return attrNamespace == mlir::TF::TensorFlowDialect::getDialectNamespace() ||
          attrNamespace == mlir::tf_executor::TensorFlowExecutorDialect::
                               getDialectNamespace() ||
@@ -48,7 +48,7 @@
         moduleOp->getAttrs(),
         [](NamedAttribute namedAttr) { return isTFAttr(namedAttr); }));
     for (auto namedAttr : stripAttrs) {
-      moduleOp->removeAttr(namedAttr.first);
+      moduleOp->removeAttr(namedAttr.getName());
     }
   }
 };
@@ -70,7 +70,7 @@
         funcOp->getAttrs(),
         [](NamedAttribute namedAttr) { return isTFAttr(namedAttr); }));
     for (auto namedAttr : stripAttrs) {
-      funcOp->removeAttr(namedAttr.first);
+      funcOp->removeAttr(namedAttr.getName());
     }
 
     for (int i = 0; i < funcOp.getNumArguments(); ++i) {
@@ -78,7 +78,7 @@
           funcOp.getArgAttrs(i),
           [](NamedAttribute namedAttr) { return isTFAttr(namedAttr); }));
       for (auto namedAttr : stripAttrs) {
-        funcOp.removeArgAttr(i, namedAttr.first);
+        funcOp.removeArgAttr(i, namedAttr.getName());
       }
     }
 
@@ -87,7 +87,7 @@
           funcOp.getResultAttrs(i),
           [](NamedAttribute namedAttr) { return isTFAttr(namedAttr); }));
       for (auto namedAttr : stripAttrs) {
-        funcOp.removeResultAttr(i, namedAttr.first);
+        funcOp.removeResultAttr(i, namedAttr.getName());
       }
     }
   }
diff --git a/integrations/tensorflow/iree_tf_compiler/TFL/StripMetadata.cpp b/integrations/tensorflow/iree_tf_compiler/TFL/StripMetadata.cpp
index 0ba99e6..af1dbe6 100644
--- a/integrations/tensorflow/iree_tf_compiler/TFL/StripMetadata.cpp
+++ b/integrations/tensorflow/iree_tf_compiler/TFL/StripMetadata.cpp
@@ -16,12 +16,12 @@
 
 static bool isTFLAttr(NamedAttribute &namedAttr) {
   // NOTE: tflite mixes tf and tfl, for some reason.
-  auto name = namedAttr.first.strref();
+  auto name = namedAttr.getName().strref();
   if (name.startswith("tf.") || name.startswith("tf_") ||
       name.startswith("tfl.") || name.startswith("tfl_")) {
     return true;
   }
-  StringRef attrNamespace = namedAttr.second.getDialect().getNamespace();
+  StringRef attrNamespace = namedAttr.getValue().getDialect().getNamespace();
   return attrNamespace == "tf" || attrNamespace == "tfl";
 }
 
@@ -35,7 +35,7 @@
         moduleOp->getAttrs(),
         [](NamedAttribute namedAttr) { return isTFLAttr(namedAttr); }));
     for (auto namedAttr : stripAttrs) {
-      moduleOp->removeAttr(namedAttr.first);
+      moduleOp->removeAttr(namedAttr.getName());
     }
   }
 };
@@ -50,7 +50,7 @@
         funcOp->getAttrs(),
         [](NamedAttribute namedAttr) { return isTFLAttr(namedAttr); }));
     for (auto namedAttr : stripAttrs) {
-      funcOp->removeAttr(namedAttr.first);
+      funcOp->removeAttr(namedAttr.getName());
     }
 
     for (int i = 0; i < funcOp.getNumArguments(); ++i) {
@@ -58,7 +58,7 @@
           funcOp.getArgAttrs(i),
           [](NamedAttribute namedAttr) { return isTFLAttr(namedAttr); }));
       for (auto namedAttr : stripAttrs) {
-        funcOp.removeArgAttr(i, namedAttr.first);
+        funcOp.removeArgAttr(i, namedAttr.getName());
       }
     }
 
@@ -67,7 +67,7 @@
           funcOp.getResultAttrs(i),
           [](NamedAttribute namedAttr) { return isTFLAttr(namedAttr); }));
       for (auto namedAttr : stripAttrs) {
-        funcOp.removeResultAttr(i, namedAttr.first);
+        funcOp.removeResultAttr(i, namedAttr.getName());
       }
     }
   }
diff --git a/iree/builtins/musl/bin/build.sh b/iree/builtins/musl/bin/build.sh
old mode 100644
new mode 100755
diff --git a/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp b/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
index 03ff4d7..4e102d2 100644
--- a/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
+++ b/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
@@ -169,8 +169,8 @@
     SmallVector<NamedAttribute, 4> attrs;
     auto abiAttr = entryFuncOp->getAttr("iree.abi");
     if (abiAttr) {
-      attrs.push_back(std::make_pair(
-          Identifier::get("iree.abi", entryFuncOp.getContext()), abiAttr));
+      attrs.emplace_back(StringAttr::get(entryFuncOp.getContext(), "iree.abi"),
+                         abiAttr);
     }
     if (!attrs.empty()) {
       auto reflectionAttr = DictionaryAttr::get(&getContext(), attrs);
diff --git a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
index 2025fbd..c96e44d 100644
--- a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
+++ b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
@@ -97,7 +97,7 @@
                                 ConversionPatternRewriter &rewriter,
                                 SmallVectorImpl<NamedAttribute> &newAttrs) {
     for (auto attr : attrs) {
-      if (auto fpAttr = attr.second.dyn_cast<DenseFPElementsAttr>()) {
+      if (auto fpAttr = attr.getValue().dyn_cast<DenseFPElementsAttr>()) {
         std::vector<llvm::APFloat> args;
         if (!fpAttr.getType().getElementType().isF32()) continue;
         for (llvm::APFloat f : fpAttr.getValues<APFloat>()) {
@@ -107,16 +107,15 @@
         }
         auto tensorType = RankedTensorType::get(fpAttr.getType().getShape(),
                                                 rewriter.getF16Type());
-        newAttrs.push_back(std::make_pair(
-            attr.first, DenseElementsAttr::get(tensorType, args)));
-      } else if (auto typeAttr = attr.second.dyn_cast<TypeAttr>()) {
+        newAttrs.emplace_back(attr.getName(),
+                              DenseElementsAttr::get(tensorType, args));
+      } else if (auto typeAttr = attr.getValue().dyn_cast<TypeAttr>()) {
         if (isIllegalType(typeAttr.getValue())) {
           if (auto tensorType =
                   typeAttr.getValue().dyn_cast<RankedTensorType>()) {
             Type newType = RankedTensorType::get(tensorType.getShape(),
                                                  rewriter.getF16Type());
-            newAttrs.push_back(
-                std::make_pair(attr.first, TypeAttr::get(newType)));
+            newAttrs.emplace_back(attr.getName(), TypeAttr::get(newType));
           }
         }
       } else {
diff --git a/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp b/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp
index d89fd17..62eeb4e 100644
--- a/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp
+++ b/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp
@@ -434,8 +434,8 @@
     // MLIR implicitly.
     SmallVector<NamedAttribute, 4> funcAttrs;
     for (auto attr : stdFuncOp->getAttrs()) {
-      if (attr.first == SymbolTable::getSymbolAttrName() ||
-          attr.first == mlir::function_like_impl::getTypeAttrName()) {
+      if (attr.getName() == SymbolTable::getSymbolAttrName() ||
+          attr.getName() == mlir::function_like_impl::getTypeAttrName()) {
         continue;
       }
       funcAttrs.push_back(attr);
diff --git a/iree/compiler/Codegen/LLVMGPU/ConvertToLLVM.cpp b/iree/compiler/Codegen/LLVMGPU/ConvertToLLVM.cpp
index 116680f..e7c8e95 100644
--- a/iree/compiler/Codegen/LLVMGPU/ConvertToLLVM.cpp
+++ b/iree/compiler/Codegen/LLVMGPU/ConvertToLLVM.cpp
@@ -192,8 +192,8 @@
     // Construct newFunc with all attributes except return type & symbol name.
     SmallVector<NamedAttribute, 4> funcAttrs;
     for (auto attr : funcOp->getAttrs()) {
-      if (attr.first == SymbolTable::getSymbolAttrName() ||
-          attr.first == mlir::function_like_impl::getTypeAttrName()) {
+      if (attr.getName() == SymbolTable::getSymbolAttrName() ||
+          attr.getName() == mlir::function_like_impl::getTypeAttrName()) {
         continue;
       }
       funcAttrs.push_back(attr);
diff --git a/iree/compiler/Codegen/SPIRV/KernelConfig.cpp b/iree/compiler/Codegen/SPIRV/KernelConfig.cpp
index dff4182..339e4d5 100644
--- a/iree/compiler/Codegen/SPIRV/KernelConfig.cpp
+++ b/iree/compiler/Codegen/SPIRV/KernelConfig.cpp
@@ -308,6 +308,12 @@
     // No tiled loops means we cannot tile (and distribute) at all. Use just one
     // single thread to run everything.
     auto pipeline = IREE::Codegen::DispatchLoweringPassPipeline::SPIRVVectorize;
+    if (auto linalgOp = dyn_cast<linalg::GenericOp>(op)) {
+      auto untiledResultShape = getUntiledResultShape(linalgOp, 0);
+      if (untiledResultShape.empty()) {
+        pipeline = IREE::Codegen::DispatchLoweringPassPipeline::SPIRVDistribute;
+      }
+    }
     std::array<int64_t, 3> workgroupSize = {1, 1, 1};
     return setOpConfigAndEntryPointFnTranslation(funcOp, op, {}, {}, pipeline,
                                                  workgroupSize);
@@ -388,6 +394,7 @@
   };
 
   // Whether we can try to use the vectorization pipeline.
+  auto untiledResultShape = getUntiledResultShape(linalgOp, 0);
   bool vectorizable =
       !linalgOp.hasIndexSemantics() &&
       // Skip vectorization for non-minor identity inputs as it generates
@@ -400,7 +407,8 @@
       // TODO: Lowering of integers other than i32 may require emulation.
       // This is currently not supported for vector operation.
       llvm::all_of(linalgOp->getOperands(), has32BitElementType) &&
-      llvm::none_of(getUntiledResultShape(linalgOp, 0), ShapedType::isDynamic);
+      !untiledResultShape.empty() &&
+      llvm::none_of(untiledResultShape, ShapedType::isDynamic);
 
   LLVM_DEBUG({
     llvm::dbgs() << "Linalg op " << linalgOp << "\n  partitioned loops: [";
diff --git a/iree/compiler/Codegen/Transforms/Transforms.cpp b/iree/compiler/Codegen/Transforms/Transforms.cpp
index b4b6056..7d65ba4 100644
--- a/iree/compiler/Codegen/Transforms/Transforms.cpp
+++ b/iree/compiler/Codegen/Transforms/Transforms.cpp
@@ -48,12 +48,12 @@
       entryPointOp.workgroup_local_memoryAttr(), 1);
   // Copy over all attributes
   for (auto attr : entryPointOp->getAttrs()) {
-    if (attr.first != entryPointOp.sym_nameAttrName() &&
-        attr.first != entryPointOp.ordinalAttrName() &&
-        attr.first != entryPointOp.interfaceAttrName() &&
-        attr.first != entryPointOp.workgroup_sizeAttrName() &&
-        attr.first != entryPointOp.workgroup_local_memoryAttrName()) {
-      clonedOp->setAttr(attr.first, attr.second);
+    if (attr.getName() != entryPointOp.sym_nameAttrName() &&
+        attr.getName() != entryPointOp.ordinalAttrName() &&
+        attr.getName() != entryPointOp.interfaceAttrName() &&
+        attr.getName() != entryPointOp.workgroup_sizeAttrName() &&
+        attr.getName() != entryPointOp.workgroup_local_memoryAttrName()) {
+      clonedOp->setAttr(attr.getName(), attr.getValue());
     }
   }
   Region *region = clonedOp.getBody();
diff --git a/iree/compiler/Dialect/Flow/Transforms/DeduplicateExecutables.cpp b/iree/compiler/Dialect/Flow/Transforms/DeduplicateExecutables.cpp
index 8989fbc..359919c 100644
--- a/iree/compiler/Dialect/Flow/Transforms/DeduplicateExecutables.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/DeduplicateExecutables.cpp
@@ -132,8 +132,8 @@
   if (!compare_ranges(
           lhs.getAttrs(), rhs.getAttrs(),
           [&](const NamedAttribute &lhs, const NamedAttribute &rhs) {
-            if (lhs.first == "function_ref" ||
-                lhs.first == SymbolTable::getSymbolAttrName()) {
+            if (lhs.getName() == "function_ref" ||
+                lhs.getName() == SymbolTable::getSymbolAttrName()) {
               return true;
             }
             return lhs == rhs;
diff --git a/iree/compiler/Dialect/HAL/Target/CUDA/CUDATarget.cpp b/iree/compiler/Dialect/HAL/Target/CUDA/CUDATarget.cpp
index 55f6cdf..6c0e24e 100644
--- a/iree/compiler/Dialect/HAL/Target/CUDA/CUDATarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/CUDA/CUDATarget.cpp
@@ -165,7 +165,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
@@ -323,8 +323,7 @@
     SmallVector<NamedAttribute> configItems;
     // Add some configurations to the `hal.executable.target` attribute.
     auto addConfig = [&](StringRef name, Attribute value) {
-      configItems.emplace_back(
-          std::make_pair(Identifier::get(name, context), value));
+      configItems.emplace_back(StringAttr::get(context, name), value);
     };
     // Set target arch
     addConfig("target_arch", StringAttr::get(context, clTargetChip));
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp b/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
index 13d0a53..ecc8906 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
@@ -618,8 +618,7 @@
     // Add some configurations to the `hal.executable.target` attribute.
     SmallVector<NamedAttribute> config;
     auto addConfig = [&](StringRef name, Attribute value) {
-      config.emplace_back(
-          std::make_pair(Identifier::get(name, context), value));
+      config.emplace_back(StringAttr::get(context, name), value);
     };
 
     // Set target triple.
diff --git a/iree/compiler/Dialect/Stream/Transforms/ScheduleExecution.cpp b/iree/compiler/Dialect/Stream/Transforms/ScheduleExecution.cpp
index b75e7bc..42747ac 100644
--- a/iree/compiler/Dialect/Stream/Transforms/ScheduleExecution.cpp
+++ b/iree/compiler/Dialect/Stream/Transforms/ScheduleExecution.cpp
@@ -323,8 +323,8 @@
     for (auto *dialect : context->getLoadedDialects()) {
       dialect->getCanonicalizationPatterns(patterns);
     }
-    for (auto *op : context->getRegisteredOperations()) {
-      op->getCanonicalizationPatterns(patterns, context);
+    for (auto op : context->getRegisteredOperations()) {
+      op.getCanonicalizationPatterns(patterns, context);
     }
     FrozenRewritePatternSet frozenPatterns(std::move(patterns));
     if (failed(applyPatternsAndFoldGreedily(getOperation(), frozenPatterns))) {
diff --git a/iree/compiler/Dialect/Util/Analysis/Position.h b/iree/compiler/Dialect/Util/Analysis/Position.h
index 38e4f1a..b86ab5c 100644
--- a/iree/compiler/Dialect/Util/Analysis/Position.h
+++ b/iree/compiler/Dialect/Util/Analysis/Position.h
@@ -82,7 +82,7 @@
   void print(llvm::raw_ostream &os, AsmState &asmState) const;
 
  private:
-  template <typename T>
+  template <typename T, typename Enable>
   friend struct llvm::DenseMapInfo;
   friend llvm::raw_ostream &operator<<(llvm::raw_ostream &os, Position pos);
 
diff --git a/iree/compiler/Dialect/Util/IR/BUILD b/iree/compiler/Dialect/Util/IR/BUILD
index c602293..e68c1c9 100644
--- a/iree/compiler/Dialect/Util/IR/BUILD
+++ b/iree/compiler/Dialect/Util/IR/BUILD
@@ -30,6 +30,7 @@
     deps = [
         "@llvm-project//mlir:CallInterfacesTdFiles",
         "@llvm-project//mlir:ControlFlowInterfacesTdFiles",
+        "@llvm-project//mlir:InferTypeOpInterfaceTdFiles",
         "@llvm-project//mlir:OpBaseTdFiles",
         "@llvm-project//mlir:SideEffectTdFiles",
         "@llvm-project//mlir:SubElementInterfacesTdFiles",
diff --git a/iree/compiler/Dialect/Util/IR/UtilBase.td b/iree/compiler/Dialect/Util/IR/UtilBase.td
index 42a1f46..ca0ba39 100644
--- a/iree/compiler/Dialect/Util/IR/UtilBase.td
+++ b/iree/compiler/Dialect/Util/IR/UtilBase.td
@@ -147,7 +147,6 @@
   let description = [{
     Pointer to a typed value.
   }];
-  let builderCall = "$_builder.getType<IREE::Util::PtrType>()";
 }
 
 class Util_PtrOf<Type type> :
diff --git a/iree/compiler/Dialect/Util/IR/UtilOps.h b/iree/compiler/Dialect/Util/IR/UtilOps.h
index 02cc7ad..ce84b3f 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOps.h
+++ b/iree/compiler/Dialect/Util/IR/UtilOps.h
@@ -15,6 +15,7 @@
 #include "mlir/IR/OpImplementation.h"
 #include "mlir/IR/SymbolTable.h"
 #include "mlir/Interfaces/ControlFlowInterfaces.h"
+#include "mlir/Interfaces/InferTypeOpInterface.h"
 #include "mlir/Interfaces/SideEffectInterfaces.h"
 #include "mlir/Transforms/DialectConversion.h"
 
diff --git a/iree/compiler/Dialect/Util/IR/UtilOps.td b/iree/compiler/Dialect/Util/IR/UtilOps.td
index fb3b917..ef8a064 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOps.td
+++ b/iree/compiler/Dialect/Util/IR/UtilOps.td
@@ -12,6 +12,7 @@
 include "mlir/IR/SymbolInterfaces.td"
 include "mlir/Interfaces/CallInterfaces.td"
 include "mlir/Interfaces/ControlFlowInterfaces.td"
+include "mlir/Interfaces/InferTypeOpInterface.td"
 include "mlir/Interfaces/SideEffectInterfaces.td"
 
 //===----------------------------------------------------------------------===//
diff --git a/iree/compiler/Dialect/Util/Transforms/ApplyPatterns.cpp b/iree/compiler/Dialect/Util/Transforms/ApplyPatterns.cpp
index 7dfb296..69d41cb 100644
--- a/iree/compiler/Dialect/Util/Transforms/ApplyPatterns.cpp
+++ b/iree/compiler/Dialect/Util/Transforms/ApplyPatterns.cpp
@@ -41,8 +41,8 @@
     for (auto *dialect : context->getLoadedDialects()) {
       dialect->getCanonicalizationPatterns(patterns);
     }
-    for (auto *op : context->getRegisteredOperations()) {
-      op->getCanonicalizationPatterns(patterns, context);
+    for (auto op : context->getRegisteredOperations()) {
+      op.getCanonicalizationPatterns(patterns, context);
     }
     IREE::Util::populateCommonPatterns(context, patterns);
 
diff --git a/iree/compiler/Dialect/Util/Transforms/FoldGlobals.cpp b/iree/compiler/Dialect/Util/Transforms/FoldGlobals.cpp
index 10b012c..6f9c37d 100644
--- a/iree/compiler/Dialect/Util/Transforms/FoldGlobals.cpp
+++ b/iree/compiler/Dialect/Util/Transforms/FoldGlobals.cpp
@@ -383,8 +383,8 @@
     for (auto *dialect : context->getLoadedDialects()) {
       dialect->getCanonicalizationPatterns(patterns);
     }
-    for (auto *op : context->getRegisteredOperations()) {
-      op->getCanonicalizationPatterns(patterns, context);
+    for (auto op : context->getRegisteredOperations()) {
+      op.getCanonicalizationPatterns(patterns, context);
     }
 
     FrozenRewritePatternSet frozenPatterns(std::move(patterns));
diff --git a/iree/compiler/Dialect/VM/Analysis/ValueLiveness.cpp b/iree/compiler/Dialect/VM/Analysis/ValueLiveness.cpp
index 9ffe386..06d60ad 100644
--- a/iree/compiler/Dialect/VM/Analysis/ValueLiveness.cpp
+++ b/iree/compiler/Dialect/VM/Analysis/ValueLiveness.cpp
@@ -120,7 +120,7 @@
   // Markup all ops with their attributes.
   for (auto &opAttrs : livenessAttrs) {
     for (auto nameAttr : opAttrs.getSecond().getAttrs()) {
-      opAttrs.getFirst()->setAttr(nameAttr.first, nameAttr.second);
+      opAttrs.getFirst()->setAttr(nameAttr.getName(), nameAttr.getValue());
     }
   }
 
diff --git a/iree/compiler/Dialect/VM/IR/VMOps.cpp b/iree/compiler/Dialect/VM/IR/VMOps.cpp
index 35213d0..e4008de 100644
--- a/iree/compiler/Dialect/VM/IR/VMOps.cpp
+++ b/iree/compiler/Dialect/VM/IR/VMOps.cpp
@@ -102,8 +102,8 @@
   SmallVector<NamedAttribute> attrs(existingAttr.begin(), existingAttr.end());
   bool didFind = false;
   for (size_t i = 0; i < attrs.size(); ++i) {
-    if (attrs[i].first == name) {
-      attrs[i].second = value;
+    if (attrs[i].getName() == name) {
+      attrs[i].setValue(value);
       didFind = true;
       break;
     }
diff --git a/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp b/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
index 0f052e1..a4ee999 100644
--- a/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
+++ b/iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.cpp
@@ -386,20 +386,18 @@
 
   // Add all VM canonicalization patterns and mark pseudo-ops illegal.
   auto *context = moduleOp.getContext();
-  for (auto *op : context->getRegisteredOperations()) {
+  for (auto op : context->getRegisteredOperations()) {
     // Non-serializable ops must be removed prior to serialization.
-    if (op->hasTrait<OpTrait::IREE::VM::PseudoOp>()) {
-      op->getCanonicalizationPatterns(patterns, context);
-      target.setOpAction(OperationName(op->name, context),
-                         ConversionTarget::LegalizationAction::Illegal);
+    if (op.hasTrait<OpTrait::IREE::VM::PseudoOp>()) {
+      op.getCanonicalizationPatterns(patterns, context);
+      target.setOpAction(op, ConversionTarget::LegalizationAction::Illegal);
     }
 
     // Debug ops must not be present when stripping.
     // TODO(benvanik): add RemoveDisabledDebugOp pattern.
-    if (op->hasTrait<OpTrait::IREE::VM::DebugOnly>() &&
+    if (op.hasTrait<OpTrait::IREE::VM::DebugOnly>() &&
         targetOptions.stripDebugOps) {
-      target.setOpAction(OperationName(op->name, context),
-                         ConversionTarget::LegalizationAction::Illegal);
+      target.setOpAction(op, ConversionTarget::LegalizationAction::Illegal);
     }
   }
 
@@ -502,8 +500,8 @@
           funcOp->getAttrOfType<DictionaryAttr>("iree.reflection")) {
     SmallVector<iree_vm_ReflectionAttrDef_ref_t, 4> reflectionAttrRefs;
     for (auto reflectionAttr : reflectionAttrs) {
-      auto key = reflectionAttr.first.strref();
-      auto value = reflectionAttr.second.dyn_cast<StringAttr>();
+      auto key = reflectionAttr.getName().strref();
+      auto value = reflectionAttr.getValue().dyn_cast<StringAttr>();
       if (!value || key.empty()) continue;
       // NOTE: if we actually want to keep these we should dedupe them (as the
       // keys and likely several of the values are shared across all functions).
diff --git a/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp b/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
index 90c8bc8..0effb7a 100644
--- a/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
+++ b/iree/compiler/Dialect/VM/Target/C/CModuleTarget.cpp
@@ -264,20 +264,18 @@
 
   // Add all VM canonicalization patterns and mark pseudo-ops illegal.
   auto *context = moduleOp.getContext();
-  for (auto *op : context->getRegisteredOperations()) {
+  for (auto op : context->getRegisteredOperations()) {
     // Non-serializable ops must be removed prior to serialization.
-    if (op->hasTrait<OpTrait::IREE::VM::PseudoOp>()) {
-      op->getCanonicalizationPatterns(patterns, context);
-      target.setOpAction(OperationName(op->name, context),
-                         ConversionTarget::LegalizationAction::Illegal);
+    if (op.hasTrait<OpTrait::IREE::VM::PseudoOp>()) {
+      op.getCanonicalizationPatterns(patterns, context);
+      target.setOpAction(op, ConversionTarget::LegalizationAction::Illegal);
     }
 
     // Debug ops must not be present when stripping.
     // TODO(benvanik): add RemoveDisabledDebugOp pattern.
-    if (op->hasTrait<OpTrait::IREE::VM::DebugOnly>() &&
+    if (op.hasTrait<OpTrait::IREE::VM::DebugOnly>() &&
         targetOptions.stripDebugOps) {
-      target.setOpAction(OperationName(op->name, context),
-                         ConversionTarget::LegalizationAction::Illegal);
+      target.setOpAction(op, ConversionTarget::LegalizationAction::Illegal);
     }
   }
 
diff --git a/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp b/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
index 5cf8e42..5d99e15 100644
--- a/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
+++ b/iree/compiler/InputConversion/MHLO/LegalizeInputTypes.cpp
@@ -99,12 +99,12 @@
       llvm::isa<IREE::Util::GlobalOp>(oldOp)) {
     for (auto attr : oldOp->getAttrs()) {
       auto newAttr =
-          convertAttribute(oldOp->getLoc(), attr.second, typeConverter);
+          convertAttribute(oldOp->getLoc(), attr.getValue(), typeConverter);
       if (!newAttr) {
         return oldOp->emitOpError()
-               << "failed to convert attribute " << attr.first;
+               << "failed to convert attribute " << attr.getName();
       }
-      state.addAttribute(attr.first, newAttr);
+      state.addAttribute(attr.getName(), newAttr);
     }
   } else {
     state.attributes = llvm::to_vector<4>(oldOp->getAttrs());
diff --git a/llvm-external-projects/iree-dialects/BUILD b/llvm-external-projects/iree-dialects/BUILD
index d5bd80f..38059f7 100644
--- a/llvm-external-projects/iree-dialects/BUILD
+++ b/llvm-external-projects/iree-dialects/BUILD
@@ -71,6 +71,7 @@
     ],
     includes = ["include"],
     deps = [
+        "@llvm-project//mlir:InferTypeOpInterfaceTdFiles",
         "@llvm-project//mlir:OpBaseTdFiles",
         "@llvm-project//mlir:SideEffectTdFiles",
     ],
@@ -126,6 +127,7 @@
         "@llvm-project//llvm:Support",
         "@llvm-project//mlir:ArithmeticDialect",
         "@llvm-project//mlir:IR",
+        "@llvm-project//mlir:InferTypeOpInterface",
         "@llvm-project//mlir:Support",
     ],
 )
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.h
index 6d7cc49..abf07a3 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.h
@@ -13,6 +13,7 @@
 #include "mlir/IR/Dialect.h"
 #include "mlir/IR/OpDefinition.h"
 #include "mlir/IR/SymbolTable.h"
+#include "mlir/Interfaces/InferTypeOpInterface.h"
 #include "mlir/Interfaces/SideEffectInterfaces.h"
 
 #define GET_OP_CLASSES
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.td b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.td
index ec2f019..f9706dd 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.td
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputOps.td
@@ -8,6 +8,7 @@
 #define IREE_DIALECTS_DIALECT_INPUT_OPS_TD
 
 include "iree-dialects/Dialect/Input/InputDialect.td"
+include "mlir/Interfaces/InferTypeOpInterface.td"
 include "mlir/Interfaces/SideEffectInterfaces.td"
 include "mlir/IR/SymbolInterfaces.td"
 
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/PyDM/IR/PyDMOps.td b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/PyDM/IR/PyDMOps.td
index 5d5e821..ad82868 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/PyDM/IR/PyDMOps.td
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/PyDM/IR/PyDMOps.td
@@ -221,7 +221,7 @@
     $exc_result `:` type($exc_result) attr-dict
   }];
 
-  let hasFolder = 1;
+  let hasCanonicalizeMethod = 1;
 }
 
 def IREEPyDM_CallOp : IREEPyDM_Op<"call", [
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 7ef7bfc..3b3e961 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
@@ -697,12 +697,10 @@
 // RaiseOnFailureOp
 //===----------------------------------------------------------------------===//
 
-LogicalResult PYDM::RaiseOnFailureOp::fold(
-    ArrayRef<Attribute> operands, SmallVectorImpl<OpFoldResult> &results) {
-  assert(operands.size() == 1 && "expected one fold operand");
-  // Unit exception result is success. Just elide.
-  if (operands[0] && operands[0].isa<UnitAttr>()) {
-    erase();
+LogicalResult PYDM::RaiseOnFailureOp::canonicalize(RaiseOnFailureOp op,
+                                                   PatternRewriter &rewriter) {
+  if (op.exc_result().getDefiningOp<SuccessOp>()) {
+    op.getOperation()->erase();
     return success();
   }
   return failure();
diff --git a/llvm-external-projects/iree-dialects/test/iree_linalgext/convert_to_loops.mlir b/llvm-external-projects/iree-dialects/test/iree_linalgext/convert_to_loops.mlir
index a50a1b2..f96850f 100644
--- a/llvm-external-projects/iree-dialects/test/iree_linalgext/convert_to_loops.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_linalgext/convert_to_loops.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file -iree-linalg-ext-to-loops %s | FileCheck --enable-var-scope --dump-input=fail %s
+// RUN: iree-dialects-opt -split-input-file -iree-linalg-ext-to-loops %s | FileCheck %s
 
 func @sort_1d(%arg0: memref<128xi32>) {
   iree_linalg_ext.sort dimension(0)
diff --git a/llvm-external-projects/iree-dialects/test/iree_linalgext/tiling.mlir b/llvm-external-projects/iree-dialects/test/iree_linalgext/tiling.mlir
index c0352ef..219ee59 100644
--- a/llvm-external-projects/iree-dialects/test/iree_linalgext/tiling.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_linalgext/tiling.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -iree-linalg-ext-tile -split-input-file %s | FileCheck --enable-var-scope --dump-input=fail %s
+// RUN: iree-dialects-opt -iree-linalg-ext-tile -split-input-file %s | FileCheck  %s
 
 func @scatter_tiling(
     %original: tensor<?x?xf32>, %indices: tensor<?x1xi32>,
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/booleans.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/booleans.mlir
index a0c134d..b6e2a44 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/booleans.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/booleans.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @fold_none
 iree_pydm.func @fold_none(%arg0 : !iree_pydm.none) -> (!iree_pydm.exception_result, !iree_pydm.bool) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/boxing.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/boxing.mlir
index f6dcccb..37bd985 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/boxing.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/boxing.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @elide_boxing_noop
 iree_pydm.func @elide_boxing_noop(%arg0 : !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/exceptions.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/exceptions.mlir
index 363af77..420ed6a 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/exceptions.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/exceptions.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @elide_raise_on_failure_success
 iree_pydm.func @elide_raise_on_failure_success() -> (!iree_pydm.exception_result, !iree_pydm.none) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/numerics.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/numerics.mlir
index 3f84984..0020ab6 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/numerics.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/canonicalize/numerics.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file --allow-unregistered-dialect -canonicalize %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @dynamic_binary_promote_same_type
 iree_pydm.func @dynamic_binary_promote_same_type(%arg0 : !iree_pydm.bool, %arg1 : !iree_pydm.bool) -> (!iree_pydm.exception_result, !iree_pydm.none) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/ops_types_parse.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/ops_types_parse.mlir
index 3c7488b..ee7547b 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/ops_types_parse.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/ops_types_parse.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt %s | iree-dialects-opt | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt %s | iree-dialects-opt | FileCheck  --dump-input-filter=all %s
 
 iree_pydm.func @free_var(%arg0 : !iree_pydm.bool) -> (!iree_pydm.exception_result, !iree_pydm.bool) {
   %var = alloc_free_var "foo" -> !iree_pydm.free_var_ref
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/local_propagate_types.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/local_propagate_types.mlir
index 517e673..6038c0d 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/local_propagate_types.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/local_propagate_types.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -pydm-local-propagate-types --allow-unregistered-dialect %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -pydm-local-propagate-types --allow-unregistered-dialect %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @sink_static_info_cast_into_refinable
 // "neg" implements TypeRefinableOpInterface and thus can have casts sunk
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/variables_to_ssa.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/variables_to_ssa.mlir
index 516038b..c8b38fe 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/variables_to_ssa.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/optimize/variables_to_ssa.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -pydm-variables-to-ssa --allow-unregistered-dialect %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -pydm-variables-to-ssa --allow-unregistered-dialect %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @entry_block_does_not_hoist
 // Hoisting must be disabled for the entry block as that would change the
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/link.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/link.mlir
index 52a6daa..dcaeeae 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/link.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/link.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -verify-diagnostics -split-input-file -lower-iree-pydm-to-rtl -link-iree-pydm-rtl='rtl-file=%resources_dir/PyDMRTL/PyDMRTLBase.mlir' %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -verify-diagnostics -split-input-file -lower-iree-pydm-to-rtl -link-iree-pydm-rtl='rtl-file=%resources_dir/PyDMRTL/PyDMRTLBase.mlir' %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: module @multi_with_private
 // A multiple module import with additional private symbols included.
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/lower_to_rtl.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/lower_to_rtl.mlir
index 6214782..a6462a9 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/lower_to_rtl.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/rtl/lower_to_rtl.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file -lower-iree-pydm-to-rtl %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file -lower-iree-pydm-to-rtl %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @object_as_bool
 // Doubles as a check for the general machinery.
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/constants.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/constants.mlir
index 73e8268..5bd0341 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/constants.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/constants.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @none_constant
 iree_pydm.func @none_constant() -> (!iree_pydm.exception_result, !iree_pydm.none) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/integer_compare.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/integer_compare.mlir
index c0dfc32..f42426d 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/integer_compare.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/integer_compare.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -convert-iree-pydm-to-iree %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -convert-iree-pydm-to-iree %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @lt
 iree_pydm.func @lt(%arg0 : !iree_pydm.integer, %arg1 : !iree_pydm.integer) -> (!iree_pydm.exception_result, !iree_pydm.bool) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/numeric.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/numeric.mlir
index f1c395a..7e2b849 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/numeric.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/numeric.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL:   func @neg_integer(
 // CHECK-SAME:                      %[[VAL_0:.*]]: i32) -> (i32, i32) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/real_compare.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/real_compare.mlir
index fb38be0..bd7a19f 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/real_compare.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/real_compare.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -convert-iree-pydm-to-iree %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -convert-iree-pydm-to-iree %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @lt
 iree_pydm.func @lt(%arg0 : !iree_pydm.real, %arg1 : !iree_pydm.real) -> (!iree_pydm.exception_result, !iree_pydm.bool) {
diff --git a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/structural.mlir b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/structural.mlir
index 7b0d4b0..b863f80 100644
--- a/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/structural.mlir
+++ b/llvm-external-projects/iree-dialects/test/iree_pydm/to_iree/structural.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck --enable-var-scope --dump-input-filter=all %s
+// RUN: iree-dialects-opt -split-input-file -convert-iree-pydm-to-iree %s | FileCheck  --dump-input-filter=all %s
 
 // CHECK-LABEL: @bool_to_pred
 // NOTE: Also tests cond_br conversion.
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 274f12a..4348cd4 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 274f12a44c606ecd20152f3e63c4f186793d9a8c
+Subproject commit 4348cd42c385e71b63e5da7e492172cff6a79d7b
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index d1aa065..d059fb9 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit d1aa0659cedd784e91adc99fff435138a28ca1f7
+Subproject commit d059fb99f7be3cf412ff9179fffa548829aa7731
diff --git a/third_party/tensorflow b/third_party/tensorflow
index 548efc0..276d16f 160000
--- a/third_party/tensorflow
+++ b/third_party/tensorflow
@@ -1 +1 @@
-Subproject commit 548efc0654f4e10ca5ecc541a545b49e769830d4
+Subproject commit 276d16f16c7db0906ca20e7df96ecda5999e1074