diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALTypes.h b/compiler/src/iree/compiler/Dialect/HAL/IR/HALTypes.h
index fefe68f..d716806 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALTypes.h
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALTypes.h
@@ -190,91 +190,6 @@
 
 } // namespace mlir::iree_compiler::IREE::HAL
 
-// It's unfortunate this is required.
-namespace mlir {
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::HAL::CollectiveReductionOp>> {
-  static FailureOr<mlir::iree_compiler::IREE::HAL::CollectiveReductionOp>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::HAL::symbolizeEnum<
-        mlir::iree_compiler::IREE::HAL::CollectiveReductionOp>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-static inline AsmPrinter &
-operator<<(AsmPrinter &printer,
-           std::optional<mlir::iree_compiler::IREE::HAL::CollectiveReductionOp>
-               param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::HAL::stringifyEnum(param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::HAL::PipelineLayoutFlags>> {
-  static FailureOr<mlir::iree_compiler::IREE::HAL::PipelineLayoutFlags>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::HAL::symbolizeEnum<
-        mlir::iree_compiler::IREE::HAL::PipelineLayoutFlags>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-static inline AsmPrinter &operator<<(
-    AsmPrinter &printer,
-    std::optional<mlir::iree_compiler::IREE::HAL::PipelineLayoutFlags> param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::HAL::stringifyEnum(param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::HAL::DescriptorFlags>> {
-  static FailureOr<mlir::iree_compiler::IREE::HAL::DescriptorFlags>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::HAL::symbolizeEnum<
-        mlir::iree_compiler::IREE::HAL::DescriptorFlags>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-static inline AsmPrinter &operator<<(
-    AsmPrinter &printer,
-    std::optional<mlir::iree_compiler::IREE::HAL::DescriptorFlags> param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::HAL::stringifyEnum(param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-static inline AsmPrinter &
-operator<<(AsmPrinter &printer,
-           mlir::iree_compiler::IREE::HAL::DescriptorType param) {
-  printer << mlir::iree_compiler::IREE::HAL::stringifyEnum(param);
-  return printer;
-}
-
-} // namespace mlir
-
 // clang-format off: must be included after all LLVM/MLIR headers.
 #define GET_ATTRDEF_CLASSES
 #include "iree/compiler/Dialect/HAL/IR/HALAttrs.h.inc" // IWYU pragma: keep
diff --git a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamTypes.h b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamTypes.h
index d69e226..75cc00e 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamTypes.h
+++ b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamTypes.h
@@ -27,37 +27,6 @@
 #include "iree/compiler/Dialect/Stream/IR/StreamEnums.h.inc" // IWYU pragma: export
 // clang-format on
 
-// It's unfortunate this is required.
-namespace mlir {
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::Stream::CollectiveReductionOp>> {
-  static FailureOr<mlir::iree_compiler::IREE::Stream::CollectiveReductionOp>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::Stream::symbolizeEnum<
-        mlir::iree_compiler::IREE::Stream::CollectiveReductionOp>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-static inline AsmPrinter &operator<<(
-    AsmPrinter &printer,
-    std::optional<mlir::iree_compiler::IREE::Stream::CollectiveReductionOp>
-        param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::Stream::stringifyEnum(
-                        param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-} // namespace mlir
-
 namespace mlir::iree_compiler::IREE::Stream {
 class AffinityAttr;
 } // namespace mlir::iree_compiler::IREE::Stream
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputDialect.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputDialect.h
index 0ae1d30..032dbd0 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputDialect.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/Input/InputDialect.h
@@ -40,72 +40,4 @@
 
 } // namespace mlir::iree_compiler::IREE::Input
 
-//===----------------------------------------------------------------------===//
-// Specialize templates in mlir namespace to support enum attributes
-//===----------------------------------------------------------------------===//
-
-namespace mlir {
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::Input::PipelineLayoutFlags>> {
-  static FailureOr<mlir::iree_compiler::IREE::Input::PipelineLayoutFlags>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::Input::symbolizeEnum<
-        mlir::iree_compiler::IREE::Input::PipelineLayoutFlags>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-
-static inline AsmPrinter &
-operator<<(AsmPrinter &printer,
-           std::optional<mlir::iree_compiler::IREE::Input::PipelineLayoutFlags>
-               param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::Input::stringifyEnum(
-                        param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-template <>
-struct FieldParser<
-    std::optional<mlir::iree_compiler::IREE::Input::DescriptorFlags>> {
-  static FailureOr<mlir::iree_compiler::IREE::Input::DescriptorFlags>
-  parse(AsmParser &parser) {
-    std::string value;
-    if (parser.parseKeywordOrString(&value))
-      return failure();
-    auto result = mlir::iree_compiler::IREE::Input::symbolizeEnum<
-        mlir::iree_compiler::IREE::Input::DescriptorFlags>(value);
-    if (!result.has_value())
-      return failure();
-    return result.value();
-  }
-};
-
-static inline AsmPrinter &operator<<(
-    AsmPrinter &printer,
-    std::optional<mlir::iree_compiler::IREE::Input::DescriptorFlags> param) {
-  printer << (param.has_value()
-                  ? mlir::iree_compiler::IREE::Input::stringifyEnum(
-                        param.value())
-                  : StringRef{""});
-  return printer;
-}
-
-static inline AsmPrinter &
-operator<<(AsmPrinter &printer,
-           mlir::iree_compiler::IREE::Input::DescriptorType param) {
-  printer << mlir::iree_compiler::IREE::Input::stringifyEnum(param);
-  return printer;
-}
-
-} // namespace mlir
-
 #endif // IREE_DIALECTS_DIALECT_INPUT_DIALECT_H
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 3833fdc..dfbfc05 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 3833fdcdb01b69c2815db08388e0e092a79cbc58
+Subproject commit dfbfc059488770ac1b96a8074739c605475166f9
