Skip to content

[mlir][Transforms] Delete 1:N dialect conversion driver #121389

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

matthias-springer
Copy link
Member

@matthias-springer matthias-springer commented Dec 31, 2024

The 1:N dialect conversion driver has been deprecated. Use the regular dialect conversion driver instead. This commit deletes the 1:N dialect conversion driver.

For details, see https://discourse.llvm.org/t/rfc-merging-1-1-and-1-n-dialect-conversions/82513.

I plan to merge this PR in April 2025.

@llvmbot llvmbot added mlir:core MLIR Core Infrastructure mlir:spirv mlir:sparse Sparse compiler in MLIR mlir mlir:scf bazel "Peripheral" support tier build system: utils/bazel mlir:func labels Dec 31, 2024
@matthias-springer matthias-springer changed the title [mlir][Transforms] Remove 1:N dialect conversion driver [mlir][Transforms] Delete 1:N dialect conversion driver Dec 31, 2024
@llvmbot
Copy link
Member

llvmbot commented Dec 31, 2024

@llvm/pr-subscribers-mlir-core
@llvm/pr-subscribers-mlir
@llvm/pr-subscribers-mlir-scf
@llvm/pr-subscribers-mlir-sparse

@llvm/pr-subscribers-mlir-spirv

Author: Matthias Springer (matthias-springer)

Changes

The 1:N dialect conversion driver has been deprecated. Use the regular dialect conversion driver instead. This commit deletes the 1:N dialect conversion driver.

For details, see https://discourse.llvm.org/t/rfc-merging-1-1-and-1-n-dialect-conversions/82513.

I plan to merge this PR in April 2025.

Depends on #116524.


Patch is 99.66 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/121389.diff

24 Files Affected:

  • (removed) mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h (-26)
  • (modified) mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h (-10)
  • (modified) mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h (-1)
  • (modified) mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h (-1)
  • (modified) mlir/include/mlir/Transforms/DialectConversion.h (-20)
  • (removed) mlir/include/mlir/Transforms/OneToNTypeConversion.h (-290)
  • (modified) mlir/lib/Dialect/Func/Transforms/CMakeLists.txt (-1)
  • (removed) mlir/lib/Dialect/Func/Transforms/OneToNFuncConversions.cpp (-87)
  • (modified) mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt (-1)
  • (removed) mlir/lib/Dialect/SCF/Transforms/OneToNTypeConversion.cpp (-215)
  • (modified) mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp (+4-3)
  • (modified) mlir/lib/Transforms/Utils/CMakeLists.txt (-1)
  • (modified) mlir/lib/Transforms/Utils/DialectConversion.cpp (-11)
  • (removed) mlir/lib/Transforms/Utils/OneToNTypeConversion.cpp (-458)
  • (removed) mlir/test/Conversion/OneToNTypeConversion/one-to-n-type-conversion.mlir (-140)
  • (removed) mlir/test/Conversion/OneToNTypeConversion/scf-structural-one-to-n-type-conversion.mlir (-183)
  • (modified) mlir/test/Transforms/decompose-call-graph-types.mlir (-53)
  • (modified) mlir/test/lib/Conversion/CMakeLists.txt (-1)
  • (removed) mlir/test/lib/Conversion/OneToNTypeConversion/CMakeLists.txt (-21)
  • (removed) mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp (-261)
  • (modified) mlir/tools/mlir-opt/CMakeLists.txt (-1)
  • (modified) mlir/tools/mlir-opt/mlir-opt.cpp (-2)
  • (modified) utils/bazel/llvm-project-overlay/mlir/BUILD.bazel (-2)
  • (modified) utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel (-17)
diff --git a/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h b/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h
deleted file mode 100644
index c9e407daf9bf8c..00000000000000
--- a/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//===- OneToNTypeFuncConversions.h - 1:N type conv. for Func ----*- C++ -*-===//
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
-#define MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
-
-namespace mlir {
-class TypeConverter;
-class RewritePatternSet;
-} // namespace mlir
-
-namespace mlir {
-
-// Populates the provided pattern set with patterns that do 1:N type conversions
-// on func ops. This is intended to be used with `applyPartialOneToNConversion`.
-void populateFuncTypeConversionPatterns(const TypeConverter &typeConverter,
-                                        RewritePatternSet &patterns);
-
-} // namespace mlir
-
-#endif // MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
diff --git a/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h b/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
index 9c1479d28c305f..00c8a5c0c517b7 100644
--- a/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
+++ b/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
@@ -63,16 +63,6 @@ void populateSCFStructuralTypeConversions(const TypeConverter &typeConverter,
 void populateSCFStructuralTypeConversionTarget(
     const TypeConverter &typeConverter, ConversionTarget &target);
 
-/// Populates the provided pattern set with patterns that do 1:N type
-/// conversions on (some) SCF ops. This is intended to be used with
-/// applyPartialOneToNConversion.
-/// FIXME: The 1:N dialect conversion is deprecated and will be removed soon.
-/// 1:N support has been added to the regular dialect conversion driver.
-LLVM_DEPRECATED("Use populateSCFStructuralTypeConversions() instead",
-                "populateSCFStructuralTypeConversions")
-void populateSCFStructuralOneToNTypeConversions(
-    const TypeConverter &typeConverter, RewritePatternSet &patterns);
-
 /// Populate patterns for SCF software pipelining transformation. See the
 /// ForLoopPipeliningPattern for the transformation details.
 void populateSCFLoopPipeliningPatterns(RewritePatternSet &patterns,
diff --git a/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h b/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
index bed4d66ccd6cbe..3d22ec918f4c5f 100644
--- a/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
+++ b/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
@@ -20,7 +20,6 @@
 #include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h"
 #include "mlir/Transforms/DialectConversion.h"
 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
-#include "mlir/Transforms/OneToNTypeConversion.h"
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/Support/LogicalResult.h"
 
diff --git a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
index 2e9c297f20182a..acd347c530d58b 100644
--- a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
+++ b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
@@ -16,7 +16,6 @@
 #include "mlir/IR/PatternMatch.h"
 #include "mlir/Pass/Pass.h"
 #include "mlir/Transforms/DialectConversion.h"
-#include "mlir/Transforms/OneToNTypeConversion.h"
 
 //===----------------------------------------------------------------------===//
 // Include the generated pass header (which needs some early definitions).
diff --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h
index 9a6975dcf8dfae..7e5389a83855a5 100644
--- a/mlir/include/mlir/Transforms/DialectConversion.h
+++ b/mlir/include/mlir/Transforms/DialectConversion.h
@@ -45,13 +45,11 @@ class TypeConverter {
   // Copy the registered conversions, but not the caches
   TypeConverter(const TypeConverter &other)
       : conversions(other.conversions),
-        argumentMaterializations(other.argumentMaterializations),
         sourceMaterializations(other.sourceMaterializations),
         targetMaterializations(other.targetMaterializations),
         typeAttributeConversions(other.typeAttributeConversions) {}
   TypeConverter &operator=(const TypeConverter &other) {
     conversions = other.conversions;
-    argumentMaterializations = other.argumentMaterializations;
     sourceMaterializations = other.sourceMaterializations;
     targetMaterializations = other.targetMaterializations;
     typeAttributeConversions = other.typeAttributeConversions;
@@ -177,21 +175,6 @@ class TypeConverter {
   /// can be a TypeRange; in that case, the function must return a
   /// SmallVector<Value>.
 
-  /// This method registers a materialization that will be called when
-  /// converting (potentially multiple) block arguments that were the result of
-  /// a signature conversion of a single block argument, to a single SSA value
-  /// with the old block argument type.
-  ///
-  /// Note: Argument materializations are used only with the 1:N dialect
-  /// conversion driver. The 1:N dialect conversion driver will be removed soon
-  /// and so will be argument materializations.
-  template <typename FnT, typename T = typename llvm::function_traits<
-                              std::decay_t<FnT>>::template arg_t<1>>
-  void addArgumentMaterialization(FnT &&callback) {
-    argumentMaterializations.emplace_back(
-        wrapMaterialization<T>(std::forward<FnT>(callback)));
-  }
-
   /// This method registers a materialization that will be called when
   /// converting a replacement value back to its original source type.
   /// This is used when some uses of the original value persist beyond the main
@@ -319,8 +302,6 @@ class TypeConverter {
   /// generating a cast sequence of some kind. See the respective
   /// `add*Materialization` for more information on the context for these
   /// methods.
-  Value materializeArgumentConversion(OpBuilder &builder, Location loc,
-                                      Type resultType, ValueRange inputs) const;
   Value materializeSourceConversion(OpBuilder &builder, Location loc,
                                     Type resultType, ValueRange inputs) const;
   Value materializeTargetConversion(OpBuilder &builder, Location loc,
@@ -507,7 +488,6 @@ class TypeConverter {
   SmallVector<ConversionCallbackFn, 4> conversions;
 
   /// The list of registered materialization functions.
-  SmallVector<MaterializationCallbackFn, 2> argumentMaterializations;
   SmallVector<MaterializationCallbackFn, 2> sourceMaterializations;
   SmallVector<TargetMaterializationCallbackFn, 2> targetMaterializations;
 
diff --git a/mlir/include/mlir/Transforms/OneToNTypeConversion.h b/mlir/include/mlir/Transforms/OneToNTypeConversion.h
deleted file mode 100644
index 9c74bf916d971b..00000000000000
--- a/mlir/include/mlir/Transforms/OneToNTypeConversion.h
+++ /dev/null
@@ -1,290 +0,0 @@
-//===-- OneToNTypeConversion.h - Utils for 1:N type conversion --*- C++ -*-===//
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Note: The 1:N dialect conversion is deprecated and will be removed soon.
-// 1:N support has been added to the regular dialect conversion driver.
-//
-// This file provides utils for implementing (poor-man's) dialect conversion
-// passes with 1:N type conversions.
-//
-// The main function, `applyPartialOneToNConversion`, first applies a set of
-// `RewritePattern`s, which produce unrealized casts to convert the operands and
-// results from and to the source types, and then replaces all newly added
-// unrealized casts by user-provided materializations. For this to work, the
-// main function requires a special `TypeConverter`, a special
-// `PatternRewriter`, and special RewritePattern`s, which extend their
-// respective base classes for 1:N type converions.
-//
-// Note that this is much more simple-minded than the "real" dialect conversion,
-// which checks for legality before applying patterns and does probably many
-// other additional things. Ideally, some of the extensions here could be
-// integrated there.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_TRANSFORMS_ONETONTYPECONVERSION_H
-#define MLIR_TRANSFORMS_ONETONTYPECONVERSION_H
-
-#include "mlir/IR/PatternMatch.h"
-#include "mlir/Transforms/DialectConversion.h"
-#include "llvm/ADT/SmallVector.h"
-
-namespace mlir {
-
-/// Stores a 1:N mapping of types and provides several useful accessors. This
-/// class extends `SignatureConversion`, which already supports 1:N type
-/// mappings but lacks some accessors into the mapping as well as access to the
-/// original types.
-class OneToNTypeMapping : public TypeConverter::SignatureConversion {
-public:
-  OneToNTypeMapping(TypeRange originalTypes)
-      : TypeConverter::SignatureConversion(originalTypes.size()),
-        originalTypes(originalTypes) {}
-
-  using TypeConverter::SignatureConversion::getConvertedTypes;
-
-  /// Returns the list of types that corresponds to the original type at the
-  /// given index.
-  TypeRange getConvertedTypes(unsigned originalTypeNo) const;
-
-  /// Returns the list of original types.
-  TypeRange getOriginalTypes() const { return originalTypes; }
-
-  /// Returns the slice of converted values that corresponds the original value
-  /// at the given index.
-  ValueRange getConvertedValues(ValueRange convertedValues,
-                                unsigned originalValueNo) const;
-
-  /// Fills the given result vector with as many copies of the location of the
-  /// original value as the number of values it is converted to.
-  void convertLocation(Value originalValue, unsigned originalValueNo,
-                       llvm::SmallVectorImpl<Location> &result) const;
-
-  /// Fills the given result vector with as many copies of the lociation of each
-  /// original value as the number of values they are respectively converted to.
-  void convertLocations(ValueRange originalValues,
-                        llvm::SmallVectorImpl<Location> &result) const;
-
-  /// Returns true iff at least one type conversion maps an input type to a type
-  /// that is different from itself.
-  bool hasNonIdentityConversion() const;
-
-private:
-  llvm::SmallVector<Type> originalTypes;
-};
-
-/// Extends the basic `RewritePattern` class with a type converter member and
-/// some accessors to it. This is useful for patterns that are not
-/// `ConversionPattern`s but still require access to a type converter.
-class RewritePatternWithConverter : public mlir::RewritePattern {
-public:
-  /// Construct a conversion pattern with the given converter, and forward the
-  /// remaining arguments to RewritePattern.
-  template <typename... Args>
-  RewritePatternWithConverter(const TypeConverter &typeConverter,
-                              Args &&...args)
-      : RewritePattern(std::forward<Args>(args)...),
-        typeConverter(&typeConverter) {}
-
-  /// Return the type converter held by this pattern, or nullptr if the pattern
-  /// does not require type conversion.
-  const TypeConverter *getTypeConverter() const { return typeConverter; }
-
-  template <typename ConverterTy>
-  std::enable_if_t<std::is_base_of<TypeConverter, ConverterTy>::value,
-                   const ConverterTy *>
-  getTypeConverter() const {
-    return static_cast<const ConverterTy *>(typeConverter);
-  }
-
-protected:
-  /// A type converter for use by this pattern.
-  const TypeConverter *const typeConverter;
-};
-
-/// Specialization of `PatternRewriter` that `OneToNConversionPattern`s use. The
-/// class provides additional rewrite methods that are specific to 1:N type
-/// conversions.
-class OneToNPatternRewriter : public PatternRewriter {
-public:
-  OneToNPatternRewriter(MLIRContext *context,
-                        OpBuilder::Listener *listener = nullptr)
-      : PatternRewriter(context, listener) {}
-
-  /// Replaces the results of the operation with the specified list of values
-  /// mapped back to the original types as specified in the provided type
-  /// mapping. That type mapping must match the replaced op (i.e., the original
-  /// types must be the same as the result types of the op) and the new values
-  /// (i.e., the converted types must be the same as the types of the new
-  /// values).
-  /// FIXME: The 1:N dialect conversion is deprecated and will be removed soon.
-  /// 1:N support has been added to the regular dialect conversion driver.
-  LLVM_DEPRECATED("Use replaceOpWithMultiple() instead",
-                  "replaceOpWithMultiple")
-  void replaceOp(Operation *op, ValueRange newValues,
-                 const OneToNTypeMapping &resultMapping);
-  using PatternRewriter::replaceOp;
-
-  /// Applies the given argument conversion to the given block. This consists of
-  /// replacing each original argument with N arguments as specified in the
-  /// argument conversion and inserting unrealized casts from the converted
-  /// values to the original types, which are then used in lieu of the original
-  /// ones. (Eventually, `applyPartialOneToNConversion` replaces these casts
-  /// with a user-provided argument materialization if necessary.) This is
-  /// similar to `ArgConverter::applySignatureConversion` but (1) handles 1:N
-  /// type conversion properly and probably (2) doesn't handle many other edge
-  /// cases.
-  Block *applySignatureConversion(Block *block,
-                                  OneToNTypeMapping &argumentConversion);
-};
-
-/// Base class for patterns with 1:N type conversions. Derived classes have to
-/// overwrite the `matchAndRewrite` overlaod that provides additional
-/// information for 1:N type conversions.
-class OneToNConversionPattern : public RewritePatternWithConverter {
-public:
-  using RewritePatternWithConverter::RewritePatternWithConverter;
-
-  /// This function has to be implemented by derived classes and is called from
-  /// the usual overloads. Like in "normal" `DialectConversion`, the function is
-  /// provided with the converted operands (which thus have target types). Since
-  /// 1:N conversions are supported, there is usually no 1:1 relationship
-  /// between the original and the converted operands. Instead, the provided
-  /// `operandMapping` can be used to access the converted operands that
-  /// correspond to a particular original operand. Similarly, `resultMapping`
-  /// is provided to help with assembling the result values, which may have 1:N
-  /// correspondences as well. In that case, the original op should be replaced
-  /// with the overload of `replaceOp` that takes the provided `resultMapping`
-  /// in order to deal with the mapping of converted result values to their
-  /// usages in the original types correctly.
-  virtual LogicalResult matchAndRewrite(Operation *op,
-                                        OneToNPatternRewriter &rewriter,
-                                        const OneToNTypeMapping &operandMapping,
-                                        const OneToNTypeMapping &resultMapping,
-                                        ValueRange convertedOperands) const = 0;
-
-  LogicalResult matchAndRewrite(Operation *op,
-                                PatternRewriter &rewriter) const final;
-};
-
-/// This class is a wrapper around `OneToNConversionPattern` for matching
-/// against instances of a particular op class.
-template <typename SourceOp>
-class OneToNOpConversionPattern : public OneToNConversionPattern {
-public:
-  OneToNOpConversionPattern(const TypeConverter &typeConverter,
-                            MLIRContext *context, PatternBenefit benefit = 1,
-                            ArrayRef<StringRef> generatedNames = {})
-      : OneToNConversionPattern(typeConverter, SourceOp::getOperationName(),
-                                benefit, context, generatedNames) {}
-  /// Generic adaptor around the root op of this pattern using the converted
-  /// operands. Importantly, each operand is represented as a *range* of values,
-  /// namely the N values each original operand gets converted to. Concretely,
-  /// this makes the result type of the accessor functions of the adaptor class
-  /// be a `ValueRange`.
-  class OpAdaptor
-      : public SourceOp::template GenericAdaptor<ArrayRef<ValueRange>> {
-  public:
-    using RangeT = ArrayRef<ValueRange>;
-    using BaseT = typename SourceOp::template GenericAdaptor<RangeT>;
-    using Properties = typename SourceOp::template InferredProperties<SourceOp>;
-
-    OpAdaptor(const OneToNTypeMapping *operandMapping,
-              const OneToNTypeMapping *resultMapping,
-              const ValueRange *convertedOperands, RangeT values, SourceOp op)
-        : BaseT(values, op), operandMapping(operandMapping),
-          resultMapping(resultMapping), convertedOperands(convertedOperands) {}
-
-    /// Get the type mapping of the original operands to the converted operands.
-    const OneToNTypeMapping &getOperandMapping() const {
-      return *operandMapping;
-    }
-
-    /// Get the type mapping of the original results to the converted results.
-    const OneToNTypeMapping &getResultMapping() const { return *resultMapping; }
-
-    /// Get a flat range of all converted operands. Unlike `getOperands`, which
-    /// returns an `ArrayRef` with one `ValueRange` for each original operand,
-    /// this function returns a `ValueRange` that contains all converted
-    /// operands irrespectively of which operand they originated from.
-    ValueRange getFlatOperands() const { return *convertedOperands; }
-
-  private:
-    const OneToNTypeMapping *operandMapping;
-    const OneToNTypeMapping *resultMapping;
-    const ValueRange *convertedOperands;
-  };
-
-  using OneToNConversionPattern::matchAndRewrite;
-
-  /// Overload that derived classes have to override for their op type.
-  virtual LogicalResult
-  matchAndRewrite(SourceOp op, OpAdaptor adaptor,
-                  OneToNPatternRewriter &rewriter) const = 0;
-
-  LogicalResult matchAndRewrite(Operation *op, OneToNPatternRewriter &rewriter,
-                                const OneToNTypeMapping &operandMapping,
-                                const OneToNTypeMapping &resultMapping,
-                                ValueRange convertedOperands) const final {
-    // Wrap converted operands and type mappings into an adaptor.
-    SmallVector<ValueRange> valueRanges;
-    for (int64_t i = 0; i < op->getNumOperands(); i++) {
-      auto values = operandMapping.getConvertedValues(convertedOperands, i);
-      valueRanges.push_back(values);
-    }
-    OpAdaptor adaptor(&operandMapping, &resultMapping, &convertedOperands,
-                      valueRanges, cast<SourceOp>(op));
-
-    // Call overload implemented by the derived class.
-    return matchAndRewrite(cast<SourceOp>(op), adaptor, rewriter);
-  }
-};
-
-/// Applies the given set of patterns recursively on the given op and adds user
-/// materializations where necessary. The patterns are expected to be
-/// `OneToNConversionPattern`, which help converting the types of the operands
-/// and results of the matched ops. The provided type converter is used to
-/// convert the operands of matched ops from their original types to operands
-/// with different types. Unlike in `DialectConversion`, this supports 1:N type
-/// conversions. Those conversions at the "boundary" of the pattern application,
-/// where converted results are not consumed by replaced ops that expect the
-/// converted operands or vice versa, the function inserts user materializations
-/// from the type converter. Also unlike `DialectConversion`, there are no legal
-/// or illegal types; the function simply applies the given patterns and does
-/// not fail if some ops or types remain unconverted (i.e., the conversion is
-/// only "partial").
-/// FIXME: The 1:N dialect ...
[truncated]

@llvmbot
Copy link
Member

llvmbot commented Dec 31, 2024

@llvm/pr-subscribers-mlir-func

Author: Matthias Springer (matthias-springer)

Changes

The 1:N dialect conversion driver has been deprecated. Use the regular dialect conversion driver instead. This commit deletes the 1:N dialect conversion driver.

For details, see https://discourse.llvm.org/t/rfc-merging-1-1-and-1-n-dialect-conversions/82513.

I plan to merge this PR in April 2025.

Depends on #116524.


Patch is 99.66 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/121389.diff

24 Files Affected:

  • (removed) mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h (-26)
  • (modified) mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h (-10)
  • (modified) mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h (-1)
  • (modified) mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h (-1)
  • (modified) mlir/include/mlir/Transforms/DialectConversion.h (-20)
  • (removed) mlir/include/mlir/Transforms/OneToNTypeConversion.h (-290)
  • (modified) mlir/lib/Dialect/Func/Transforms/CMakeLists.txt (-1)
  • (removed) mlir/lib/Dialect/Func/Transforms/OneToNFuncConversions.cpp (-87)
  • (modified) mlir/lib/Dialect/SCF/Transforms/CMakeLists.txt (-1)
  • (removed) mlir/lib/Dialect/SCF/Transforms/OneToNTypeConversion.cpp (-215)
  • (modified) mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp (+4-3)
  • (modified) mlir/lib/Transforms/Utils/CMakeLists.txt (-1)
  • (modified) mlir/lib/Transforms/Utils/DialectConversion.cpp (-11)
  • (removed) mlir/lib/Transforms/Utils/OneToNTypeConversion.cpp (-458)
  • (removed) mlir/test/Conversion/OneToNTypeConversion/one-to-n-type-conversion.mlir (-140)
  • (removed) mlir/test/Conversion/OneToNTypeConversion/scf-structural-one-to-n-type-conversion.mlir (-183)
  • (modified) mlir/test/Transforms/decompose-call-graph-types.mlir (-53)
  • (modified) mlir/test/lib/Conversion/CMakeLists.txt (-1)
  • (removed) mlir/test/lib/Conversion/OneToNTypeConversion/CMakeLists.txt (-21)
  • (removed) mlir/test/lib/Conversion/OneToNTypeConversion/TestOneToNTypeConversionPass.cpp (-261)
  • (modified) mlir/tools/mlir-opt/CMakeLists.txt (-1)
  • (modified) mlir/tools/mlir-opt/mlir-opt.cpp (-2)
  • (modified) utils/bazel/llvm-project-overlay/mlir/BUILD.bazel (-2)
  • (modified) utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel (-17)
diff --git a/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h b/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h
deleted file mode 100644
index c9e407daf9bf8c..00000000000000
--- a/mlir/include/mlir/Dialect/Func/Transforms/OneToNFuncConversions.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//===- OneToNTypeFuncConversions.h - 1:N type conv. for Func ----*- C++ -*-===//
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
-#define MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
-
-namespace mlir {
-class TypeConverter;
-class RewritePatternSet;
-} // namespace mlir
-
-namespace mlir {
-
-// Populates the provided pattern set with patterns that do 1:N type conversions
-// on func ops. This is intended to be used with `applyPartialOneToNConversion`.
-void populateFuncTypeConversionPatterns(const TypeConverter &typeConverter,
-                                        RewritePatternSet &patterns);
-
-} // namespace mlir
-
-#endif // MLIR_DIALECT_FUNC_TRANSFORMS_ONETONTYPEFUNCCONVERSIONS_H
diff --git a/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h b/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
index 9c1479d28c305f..00c8a5c0c517b7 100644
--- a/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
+++ b/mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h
@@ -63,16 +63,6 @@ void populateSCFStructuralTypeConversions(const TypeConverter &typeConverter,
 void populateSCFStructuralTypeConversionTarget(
     const TypeConverter &typeConverter, ConversionTarget &target);
 
-/// Populates the provided pattern set with patterns that do 1:N type
-/// conversions on (some) SCF ops. This is intended to be used with
-/// applyPartialOneToNConversion.
-/// FIXME: The 1:N dialect conversion is deprecated and will be removed soon.
-/// 1:N support has been added to the regular dialect conversion driver.
-LLVM_DEPRECATED("Use populateSCFStructuralTypeConversions() instead",
-                "populateSCFStructuralTypeConversions")
-void populateSCFStructuralOneToNTypeConversions(
-    const TypeConverter &typeConverter, RewritePatternSet &patterns);
-
 /// Populate patterns for SCF software pipelining transformation. See the
 /// ForLoopPipeliningPattern for the transformation details.
 void populateSCFLoopPipeliningPatterns(RewritePatternSet &patterns,
diff --git a/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h b/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
index bed4d66ccd6cbe..3d22ec918f4c5f 100644
--- a/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
+++ b/mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h
@@ -20,7 +20,6 @@
 #include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h"
 #include "mlir/Transforms/DialectConversion.h"
 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
-#include "mlir/Transforms/OneToNTypeConversion.h"
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/Support/LogicalResult.h"
 
diff --git a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
index 2e9c297f20182a..acd347c530d58b 100644
--- a/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
+++ b/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h
@@ -16,7 +16,6 @@
 #include "mlir/IR/PatternMatch.h"
 #include "mlir/Pass/Pass.h"
 #include "mlir/Transforms/DialectConversion.h"
-#include "mlir/Transforms/OneToNTypeConversion.h"
 
 //===----------------------------------------------------------------------===//
 // Include the generated pass header (which needs some early definitions).
diff --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h
index 9a6975dcf8dfae..7e5389a83855a5 100644
--- a/mlir/include/mlir/Transforms/DialectConversion.h
+++ b/mlir/include/mlir/Transforms/DialectConversion.h
@@ -45,13 +45,11 @@ class TypeConverter {
   // Copy the registered conversions, but not the caches
   TypeConverter(const TypeConverter &other)
       : conversions(other.conversions),
-        argumentMaterializations(other.argumentMaterializations),
         sourceMaterializations(other.sourceMaterializations),
         targetMaterializations(other.targetMaterializations),
         typeAttributeConversions(other.typeAttributeConversions) {}
   TypeConverter &operator=(const TypeConverter &other) {
     conversions = other.conversions;
-    argumentMaterializations = other.argumentMaterializations;
     sourceMaterializations = other.sourceMaterializations;
     targetMaterializations = other.targetMaterializations;
     typeAttributeConversions = other.typeAttributeConversions;
@@ -177,21 +175,6 @@ class TypeConverter {
   /// can be a TypeRange; in that case, the function must return a
   /// SmallVector<Value>.
 
-  /// This method registers a materialization that will be called when
-  /// converting (potentially multiple) block arguments that were the result of
-  /// a signature conversion of a single block argument, to a single SSA value
-  /// with the old block argument type.
-  ///
-  /// Note: Argument materializations are used only with the 1:N dialect
-  /// conversion driver. The 1:N dialect conversion driver will be removed soon
-  /// and so will be argument materializations.
-  template <typename FnT, typename T = typename llvm::function_traits<
-                              std::decay_t<FnT>>::template arg_t<1>>
-  void addArgumentMaterialization(FnT &&callback) {
-    argumentMaterializations.emplace_back(
-        wrapMaterialization<T>(std::forward<FnT>(callback)));
-  }
-
   /// This method registers a materialization that will be called when
   /// converting a replacement value back to its original source type.
   /// This is used when some uses of the original value persist beyond the main
@@ -319,8 +302,6 @@ class TypeConverter {
   /// generating a cast sequence of some kind. See the respective
   /// `add*Materialization` for more information on the context for these
   /// methods.
-  Value materializeArgumentConversion(OpBuilder &builder, Location loc,
-                                      Type resultType, ValueRange inputs) const;
   Value materializeSourceConversion(OpBuilder &builder, Location loc,
                                     Type resultType, ValueRange inputs) const;
   Value materializeTargetConversion(OpBuilder &builder, Location loc,
@@ -507,7 +488,6 @@ class TypeConverter {
   SmallVector<ConversionCallbackFn, 4> conversions;
 
   /// The list of registered materialization functions.
-  SmallVector<MaterializationCallbackFn, 2> argumentMaterializations;
   SmallVector<MaterializationCallbackFn, 2> sourceMaterializations;
   SmallVector<TargetMaterializationCallbackFn, 2> targetMaterializations;
 
diff --git a/mlir/include/mlir/Transforms/OneToNTypeConversion.h b/mlir/include/mlir/Transforms/OneToNTypeConversion.h
deleted file mode 100644
index 9c74bf916d971b..00000000000000
--- a/mlir/include/mlir/Transforms/OneToNTypeConversion.h
+++ /dev/null
@@ -1,290 +0,0 @@
-//===-- OneToNTypeConversion.h - Utils for 1:N type conversion --*- C++ -*-===//
-//
-// Licensed under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Note: The 1:N dialect conversion is deprecated and will be removed soon.
-// 1:N support has been added to the regular dialect conversion driver.
-//
-// This file provides utils for implementing (poor-man's) dialect conversion
-// passes with 1:N type conversions.
-//
-// The main function, `applyPartialOneToNConversion`, first applies a set of
-// `RewritePattern`s, which produce unrealized casts to convert the operands and
-// results from and to the source types, and then replaces all newly added
-// unrealized casts by user-provided materializations. For this to work, the
-// main function requires a special `TypeConverter`, a special
-// `PatternRewriter`, and special RewritePattern`s, which extend their
-// respective base classes for 1:N type converions.
-//
-// Note that this is much more simple-minded than the "real" dialect conversion,
-// which checks for legality before applying patterns and does probably many
-// other additional things. Ideally, some of the extensions here could be
-// integrated there.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_TRANSFORMS_ONETONTYPECONVERSION_H
-#define MLIR_TRANSFORMS_ONETONTYPECONVERSION_H
-
-#include "mlir/IR/PatternMatch.h"
-#include "mlir/Transforms/DialectConversion.h"
-#include "llvm/ADT/SmallVector.h"
-
-namespace mlir {
-
-/// Stores a 1:N mapping of types and provides several useful accessors. This
-/// class extends `SignatureConversion`, which already supports 1:N type
-/// mappings but lacks some accessors into the mapping as well as access to the
-/// original types.
-class OneToNTypeMapping : public TypeConverter::SignatureConversion {
-public:
-  OneToNTypeMapping(TypeRange originalTypes)
-      : TypeConverter::SignatureConversion(originalTypes.size()),
-        originalTypes(originalTypes) {}
-
-  using TypeConverter::SignatureConversion::getConvertedTypes;
-
-  /// Returns the list of types that corresponds to the original type at the
-  /// given index.
-  TypeRange getConvertedTypes(unsigned originalTypeNo) const;
-
-  /// Returns the list of original types.
-  TypeRange getOriginalTypes() const { return originalTypes; }
-
-  /// Returns the slice of converted values that corresponds the original value
-  /// at the given index.
-  ValueRange getConvertedValues(ValueRange convertedValues,
-                                unsigned originalValueNo) const;
-
-  /// Fills the given result vector with as many copies of the location of the
-  /// original value as the number of values it is converted to.
-  void convertLocation(Value originalValue, unsigned originalValueNo,
-                       llvm::SmallVectorImpl<Location> &result) const;
-
-  /// Fills the given result vector with as many copies of the lociation of each
-  /// original value as the number of values they are respectively converted to.
-  void convertLocations(ValueRange originalValues,
-                        llvm::SmallVectorImpl<Location> &result) const;
-
-  /// Returns true iff at least one type conversion maps an input type to a type
-  /// that is different from itself.
-  bool hasNonIdentityConversion() const;
-
-private:
-  llvm::SmallVector<Type> originalTypes;
-};
-
-/// Extends the basic `RewritePattern` class with a type converter member and
-/// some accessors to it. This is useful for patterns that are not
-/// `ConversionPattern`s but still require access to a type converter.
-class RewritePatternWithConverter : public mlir::RewritePattern {
-public:
-  /// Construct a conversion pattern with the given converter, and forward the
-  /// remaining arguments to RewritePattern.
-  template <typename... Args>
-  RewritePatternWithConverter(const TypeConverter &typeConverter,
-                              Args &&...args)
-      : RewritePattern(std::forward<Args>(args)...),
-        typeConverter(&typeConverter) {}
-
-  /// Return the type converter held by this pattern, or nullptr if the pattern
-  /// does not require type conversion.
-  const TypeConverter *getTypeConverter() const { return typeConverter; }
-
-  template <typename ConverterTy>
-  std::enable_if_t<std::is_base_of<TypeConverter, ConverterTy>::value,
-                   const ConverterTy *>
-  getTypeConverter() const {
-    return static_cast<const ConverterTy *>(typeConverter);
-  }
-
-protected:
-  /// A type converter for use by this pattern.
-  const TypeConverter *const typeConverter;
-};
-
-/// Specialization of `PatternRewriter` that `OneToNConversionPattern`s use. The
-/// class provides additional rewrite methods that are specific to 1:N type
-/// conversions.
-class OneToNPatternRewriter : public PatternRewriter {
-public:
-  OneToNPatternRewriter(MLIRContext *context,
-                        OpBuilder::Listener *listener = nullptr)
-      : PatternRewriter(context, listener) {}
-
-  /// Replaces the results of the operation with the specified list of values
-  /// mapped back to the original types as specified in the provided type
-  /// mapping. That type mapping must match the replaced op (i.e., the original
-  /// types must be the same as the result types of the op) and the new values
-  /// (i.e., the converted types must be the same as the types of the new
-  /// values).
-  /// FIXME: The 1:N dialect conversion is deprecated and will be removed soon.
-  /// 1:N support has been added to the regular dialect conversion driver.
-  LLVM_DEPRECATED("Use replaceOpWithMultiple() instead",
-                  "replaceOpWithMultiple")
-  void replaceOp(Operation *op, ValueRange newValues,
-                 const OneToNTypeMapping &resultMapping);
-  using PatternRewriter::replaceOp;
-
-  /// Applies the given argument conversion to the given block. This consists of
-  /// replacing each original argument with N arguments as specified in the
-  /// argument conversion and inserting unrealized casts from the converted
-  /// values to the original types, which are then used in lieu of the original
-  /// ones. (Eventually, `applyPartialOneToNConversion` replaces these casts
-  /// with a user-provided argument materialization if necessary.) This is
-  /// similar to `ArgConverter::applySignatureConversion` but (1) handles 1:N
-  /// type conversion properly and probably (2) doesn't handle many other edge
-  /// cases.
-  Block *applySignatureConversion(Block *block,
-                                  OneToNTypeMapping &argumentConversion);
-};
-
-/// Base class for patterns with 1:N type conversions. Derived classes have to
-/// overwrite the `matchAndRewrite` overlaod that provides additional
-/// information for 1:N type conversions.
-class OneToNConversionPattern : public RewritePatternWithConverter {
-public:
-  using RewritePatternWithConverter::RewritePatternWithConverter;
-
-  /// This function has to be implemented by derived classes and is called from
-  /// the usual overloads. Like in "normal" `DialectConversion`, the function is
-  /// provided with the converted operands (which thus have target types). Since
-  /// 1:N conversions are supported, there is usually no 1:1 relationship
-  /// between the original and the converted operands. Instead, the provided
-  /// `operandMapping` can be used to access the converted operands that
-  /// correspond to a particular original operand. Similarly, `resultMapping`
-  /// is provided to help with assembling the result values, which may have 1:N
-  /// correspondences as well. In that case, the original op should be replaced
-  /// with the overload of `replaceOp` that takes the provided `resultMapping`
-  /// in order to deal with the mapping of converted result values to their
-  /// usages in the original types correctly.
-  virtual LogicalResult matchAndRewrite(Operation *op,
-                                        OneToNPatternRewriter &rewriter,
-                                        const OneToNTypeMapping &operandMapping,
-                                        const OneToNTypeMapping &resultMapping,
-                                        ValueRange convertedOperands) const = 0;
-
-  LogicalResult matchAndRewrite(Operation *op,
-                                PatternRewriter &rewriter) const final;
-};
-
-/// This class is a wrapper around `OneToNConversionPattern` for matching
-/// against instances of a particular op class.
-template <typename SourceOp>
-class OneToNOpConversionPattern : public OneToNConversionPattern {
-public:
-  OneToNOpConversionPattern(const TypeConverter &typeConverter,
-                            MLIRContext *context, PatternBenefit benefit = 1,
-                            ArrayRef<StringRef> generatedNames = {})
-      : OneToNConversionPattern(typeConverter, SourceOp::getOperationName(),
-                                benefit, context, generatedNames) {}
-  /// Generic adaptor around the root op of this pattern using the converted
-  /// operands. Importantly, each operand is represented as a *range* of values,
-  /// namely the N values each original operand gets converted to. Concretely,
-  /// this makes the result type of the accessor functions of the adaptor class
-  /// be a `ValueRange`.
-  class OpAdaptor
-      : public SourceOp::template GenericAdaptor<ArrayRef<ValueRange>> {
-  public:
-    using RangeT = ArrayRef<ValueRange>;
-    using BaseT = typename SourceOp::template GenericAdaptor<RangeT>;
-    using Properties = typename SourceOp::template InferredProperties<SourceOp>;
-
-    OpAdaptor(const OneToNTypeMapping *operandMapping,
-              const OneToNTypeMapping *resultMapping,
-              const ValueRange *convertedOperands, RangeT values, SourceOp op)
-        : BaseT(values, op), operandMapping(operandMapping),
-          resultMapping(resultMapping), convertedOperands(convertedOperands) {}
-
-    /// Get the type mapping of the original operands to the converted operands.
-    const OneToNTypeMapping &getOperandMapping() const {
-      return *operandMapping;
-    }
-
-    /// Get the type mapping of the original results to the converted results.
-    const OneToNTypeMapping &getResultMapping() const { return *resultMapping; }
-
-    /// Get a flat range of all converted operands. Unlike `getOperands`, which
-    /// returns an `ArrayRef` with one `ValueRange` for each original operand,
-    /// this function returns a `ValueRange` that contains all converted
-    /// operands irrespectively of which operand they originated from.
-    ValueRange getFlatOperands() const { return *convertedOperands; }
-
-  private:
-    const OneToNTypeMapping *operandMapping;
-    const OneToNTypeMapping *resultMapping;
-    const ValueRange *convertedOperands;
-  };
-
-  using OneToNConversionPattern::matchAndRewrite;
-
-  /// Overload that derived classes have to override for their op type.
-  virtual LogicalResult
-  matchAndRewrite(SourceOp op, OpAdaptor adaptor,
-                  OneToNPatternRewriter &rewriter) const = 0;
-
-  LogicalResult matchAndRewrite(Operation *op, OneToNPatternRewriter &rewriter,
-                                const OneToNTypeMapping &operandMapping,
-                                const OneToNTypeMapping &resultMapping,
-                                ValueRange convertedOperands) const final {
-    // Wrap converted operands and type mappings into an adaptor.
-    SmallVector<ValueRange> valueRanges;
-    for (int64_t i = 0; i < op->getNumOperands(); i++) {
-      auto values = operandMapping.getConvertedValues(convertedOperands, i);
-      valueRanges.push_back(values);
-    }
-    OpAdaptor adaptor(&operandMapping, &resultMapping, &convertedOperands,
-                      valueRanges, cast<SourceOp>(op));
-
-    // Call overload implemented by the derived class.
-    return matchAndRewrite(cast<SourceOp>(op), adaptor, rewriter);
-  }
-};
-
-/// Applies the given set of patterns recursively on the given op and adds user
-/// materializations where necessary. The patterns are expected to be
-/// `OneToNConversionPattern`, which help converting the types of the operands
-/// and results of the matched ops. The provided type converter is used to
-/// convert the operands of matched ops from their original types to operands
-/// with different types. Unlike in `DialectConversion`, this supports 1:N type
-/// conversions. Those conversions at the "boundary" of the pattern application,
-/// where converted results are not consumed by replaced ops that expect the
-/// converted operands or vice versa, the function inserts user materializations
-/// from the type converter. Also unlike `DialectConversion`, there are no legal
-/// or illegal types; the function simply applies the given patterns and does
-/// not fail if some ops or types remain unconverted (i.e., the conversion is
-/// only "partial").
-/// FIXME: The 1:N dialect ...
[truncated]

Copy link
Member

@zero9178 zero9178 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love the colour red

@matthias-springer matthias-springer force-pushed the users/matthias-springer/1n_conversion_value_mapping branch from 8e9b48a to d78dfb2 Compare January 3, 2025 12:33
@matthias-springer matthias-springer force-pushed the users/matthias-springer/1n_conversion_value_mapping branch from 488d8be to 209d922 Compare January 3, 2025 13:35
Base automatically changed from users/matthias-springer/1n_conversion_value_mapping to main January 3, 2025 15:11
@matthias-springer matthias-springer force-pushed the users/matthias-springer/remove_1_n_conversion branch from c26bd82 to cded913 Compare January 3, 2025 15:37
Copy link
Contributor

@ingomueller-net ingomueller-net left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice -- great to see this marathonic effort getting over the finish line!

Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 15, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 15, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 15, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 15, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to Muzammiluddin-Syed-ECE/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to iree-org/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Muzammiluddin-Syed-ECE pushed a commit to iree-org/llvm-project that referenced this pull request May 16, 2025
…#121389)"

This reverts commit 23e3cbb.

Signed-off-by: nithinsubbiah <nithinsubbiah@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bazel "Peripheral" support tier build system: utils/bazel mlir:core MLIR Core Infrastructure mlir:func mlir:scf mlir:sparse Sparse compiler in MLIR mlir:spirv mlir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants