[llvm-branch-commits] [mlir] 399c88b - Revert "[mlir][tosa] Add support for dense_resource in tosa-narrow-* passes (…"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Feb 19 03:07:51 PST 2026
Author: Luke Hutton
Date: 2026-02-19T11:07:47Z
New Revision: 399c88b39e0a4dbdc763199108033932e52d2766
URL: https://github.com/llvm/llvm-project/commit/399c88b39e0a4dbdc763199108033932e52d2766
DIFF: https://github.com/llvm/llvm-project/commit/399c88b39e0a4dbdc763199108033932e52d2766.diff
LOG: Revert "[mlir][tosa] Add support for dense_resource in tosa-narrow-* passes (…"
This reverts commit 4053765e4290266ec640c13dcd2920c3bab96f72.
Added:
Modified:
mlir/include/mlir/Dialect/Tosa/Utils/ConversionUtils.h
mlir/lib/Dialect/Tosa/Transforms/TosaFolders.cpp
mlir/lib/Dialect/Tosa/Transforms/TosaNarrowTypes.cpp
mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32-aggressive.mlir
mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32.mlir
mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32-aggressive.mlir
mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Tosa/Utils/ConversionUtils.h b/mlir/include/mlir/Dialect/Tosa/Utils/ConversionUtils.h
index 3a48608e7fd94..cdcd099ec7d22 100644
--- a/mlir/include/mlir/Dialect/Tosa/Utils/ConversionUtils.h
+++ b/mlir/include/mlir/Dialect/Tosa/Utils/ConversionUtils.h
@@ -17,7 +17,6 @@
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Tosa/Utils/ShapeUtils.h"
#include "mlir/Dialect/Utils/StructuredOpsUtils.h"
-#include "mlir/IR/DialectResourceBlobManager.h"
#include "mlir/IR/ImplicitLocOpBuilder.h"
#include "mlir/IR/PatternMatch.h"
#include <optional>
@@ -249,28 +248,6 @@ SmallVector<int64_t> convertFromIntAttr(const DenseElementsAttr &attr,
// per batch
bool hasUniqueConstantScatterIndices(ShapedType indicesType,
DenseIntElementsAttr indicesAttr);
-
-// Try to get the values of a DenseResourceElementsAttr construct
-template <typename T>
-std::optional<ArrayRef<T>> tryGetDenseResourceValues(ElementsAttr attr) {
- if (auto denseResource = dyn_cast<DenseResourceElementsAttr>(attr)) {
- // Check that the resource memory blob exists
- AsmResourceBlob *blob = denseResource.getRawHandle().getBlob();
- if (!blob)
- return std::nullopt;
-
- // Check that the data are in a valid form
- if (!DenseElementsAttr::isValidRawBuffer(attr.getShapedType(),
- blob->getData())) {
- return std::nullopt;
- }
-
- return blob->template getDataAs<T>();
- }
-
- return std::nullopt;
-}
-
} // namespace tosa
} // namespace mlir
diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaFolders.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaFolders.cpp
index 0a035bbd3df00..f01a87afaa2aa 100644
--- a/mlir/lib/Dialect/Tosa/Transforms/TosaFolders.cpp
+++ b/mlir/lib/Dialect/Tosa/Transforms/TosaFolders.cpp
@@ -15,10 +15,10 @@
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
#include "mlir/Dialect/Tosa/Transforms/Passes.h"
-#include "mlir/Dialect/Tosa/Utils/ConversionUtils.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/BuiltinTypes.h"
+#include "mlir/IR/DialectResourceBlobManager.h"
#include "mlir/IR/Matchers.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
@@ -175,6 +175,27 @@ DenseElementsAttr transposeType(const RangeType &data, ShapedType inputType,
llvm::ArrayRef<ElementType>(outputValues));
}
+// Try to get the values of a DenseResourceElementsAttr construct
+template <typename T>
+std::optional<ArrayRef<T>> tryGetDenseResourceValues(ElementsAttr attr) {
+ if (auto denseResource = dyn_cast<DenseResourceElementsAttr>(attr)) {
+ // Check that the resource memory blob exists
+ AsmResourceBlob *blob = denseResource.getRawHandle().getBlob();
+ if (!blob)
+ return std::nullopt;
+
+ // Check that the data are in a valid form
+ if (!DenseElementsAttr::isValidRawBuffer(attr.getShapedType(),
+ blob->getData())) {
+ return std::nullopt;
+ }
+
+ return blob->template getDataAs<T>();
+ }
+
+ return std::nullopt;
+}
+
// A type specialized transposition of an ElementsAttr.
// This implementation tries to operate on the underlying data in its raw
// representation when possible to avoid allocating a large number of Attribute
diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaNarrowTypes.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaNarrowTypes.cpp
index 983472762e791..d9651f7321269 100644
--- a/mlir/lib/Dialect/Tosa/Transforms/TosaNarrowTypes.cpp
+++ b/mlir/lib/Dialect/Tosa/Transforms/TosaNarrowTypes.cpp
@@ -15,16 +15,12 @@
#include "llvm/ADT/APFloat.h"
-#include <algorithm>
#include <limits>
#include <type_traits>
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/Func/Transforms/FuncConversions.h"
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
-#include "mlir/Dialect/Tosa/Utils/ConversionUtils.h"
-#include "mlir/IR/BuiltinDialect.h"
-#include "mlir/IR/DialectResourceBlobManager.h"
#include "mlir/IR/Verifier.h"
#include "mlir/Pass/Pass.h"
@@ -242,70 +238,6 @@ convertDenseFPElementsAttr(ShapedType type, DenseFPElementsAttr attr,
return convertedAttr;
}
-template <TosaNarrowKind Kind>
-FailureOr<Attribute> convertDenseResourceElementsAttr(
- ShapedType type, DenseResourceElementsAttr attr,
- const TypeConverter &typeConverter, bool allowLossyConversion) {
- static_assert(Kind == TosaNarrowKind::Int64ToInt32 ||
- Kind == TosaNarrowKind::Float64ToFloat32);
- using From =
- std::conditional_t<Kind == TosaNarrowKind::Int64ToInt32, int64_t, double>;
- using To =
- std::conditional_t<Kind == TosaNarrowKind::Int64ToInt32, int32_t, float>;
-
- if (Kind == TosaNarrowKind::Int64ToInt32 &&
- !isa<DenseI64ResourceElementsAttr>(attr)) {
- return attr;
- }
-
- if (Kind == TosaNarrowKind::Float64ToFloat32 &&
- !isa<DenseF64ResourceElementsAttr>(attr)) {
- return attr;
- }
-
- auto narrow = [](From value) {
- if constexpr (Kind == TosaNarrowKind::Int64ToInt32) {
- value = std::clamp<From>(value, std::numeric_limits<To>::min(),
- std::numeric_limits<To>::max());
- }
-
- return static_cast<To>(value);
- };
-
- const auto newType =
- dyn_cast_or_null<ShapedType>(typeConverter.convertType(type));
- if (!newType) {
- return failure();
- }
-
- const std::optional<ArrayRef<From>> values =
- tryGetDenseResourceValues<From>(attr);
- if (!values) {
- return failure();
- }
-
- SmallVector<To> newValues;
- newValues.reserve(values->size());
- for (From value : *values) {
- const To convertedValue = narrow(value);
- if (!allowLossyConversion && convertedValue != value) {
- return failure();
- }
-
- newValues.push_back(convertedValue);
- }
-
- AsmResourceBlob blob = HeapAsmResourceBlob::allocateAndCopyInferAlign(
- ArrayRef<To>(newValues.data(), newValues.size()));
-
- auto resourceManager =
- DenseResourceElementsHandle::getManagerInterface(attr.getContext());
- resourceManager.getBlobManager().update(attr.getRawHandle().getKey(),
- std::move(blob));
-
- return DenseResourceElementsAttr::get(newType, attr.getRawHandle());
-}
-
template <TosaNarrowKind Kind, typename AttrT>
FailureOr<Attribute>
convertAttributeWithTypeConverter(AttrT attr, Type type,
@@ -408,20 +340,6 @@ LogicalResult convertGenericOp(Operation *op, ValueRange operands,
continue;
}
- if (const auto denseResourceElementsAttr =
- dyn_cast<DenseResourceElementsAttr>(attribute)) {
- FailureOr<Attribute> convertedAttr =
- convertAttributeWithTypeConverter<Kind>(
- denseResourceElementsAttr, denseResourceElementsAttr.getType(),
- typeConverter);
- if (failed(convertedAttr))
- return rewriter.notifyMatchFailure(
- op, "Failed to convert dense resource elements attribute without "
- "precision loss; enable aggressive rewrite to override.");
- state.addAttribute(namedAttribute.getName(), convertedAttr.value());
- continue;
- }
-
state.addAttribute(namedAttribute.getName(), attribute);
}
@@ -621,18 +539,6 @@ LogicalResult runTosaNarrowing(Operation *op, bool aggressiveRewrite,
typeConverter.addSourceMaterialization(materializeCast);
typeConverter.addTargetMaterialization(materializeCast);
- typeConverter.addTypeAttributeConversion(
- [&typeConverter, allowLossyConversion](ShapedType type,
- DenseResourceElementsAttr attr)
- -> TypeConverter::AttributeConversionResult {
- FailureOr<Attribute> converted = convertDenseResourceElementsAttr<Kind>(
- type, attr, typeConverter, allowLossyConversion);
- if (failed(converted))
- return TypeConverter::AttributeConversionResult::abort();
- return TypeConverter::AttributeConversionResult::result(
- converted.value());
- });
-
if constexpr (Kind == TosaNarrowKind::Int64ToInt32) {
typeConverter.addTypeAttributeConversion(
[allowLossyConversion](IntegerType /*type*/, IntegerAttr attribute)
diff --git a/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32-aggressive.mlir b/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32-aggressive.mlir
index 191a337e88874..69547194dee3f 100644
--- a/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32-aggressive.mlir
+++ b/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32-aggressive.mlir
@@ -68,23 +68,3 @@ func.func @test_f64_const() -> tensor<2xf64> {
// FUNCBOUND: return %[[CONST]] : tensor<2xf32>
return %0 : tensor<2xf64>
}
-
-// -----
-
-// CHECK-LABEL: test_dense_ressource_f64
-func.func @test_dense_ressource_f64() -> tensor<1x2xf64> {
- // COMMON: %[[CONST:.*]] = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xf32>}> : () -> tensor<1x2xf32>
- %0 = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xf64>}> : () -> tensor<1x2xf64>
- // DEFAULT: %[[OUT_CAST:.*]] = tosa.cast %[[CONST]] : (tensor<1x2xf32>) -> tensor<1x2xf64>
- // DEFAULT: return %[[OUT_CAST]] : tensor<1x2xf64>
- // FUNCBOUND: return %[[CONST]] : tensor<1x2xf32>
- return %0 : tensor<1x2xf64>
-}
-{-#
- dialect_resources: {
- builtin: {
- // COMMON: resource: "0x04000000DB0F4940EAD6FCBD"
- resource: "0x04000000182D4454FB21094059F64637DD9ABFBF"
- }
- }
-#-}
diff --git a/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32.mlir b/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32.mlir
index be596eb890aad..1034ee67f65e2 100644
--- a/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32.mlir
+++ b/mlir/test/Dialect/Tosa/tosa-narrow-f64-to-f32.mlir
@@ -178,23 +178,3 @@ func.func @test_f64_add_diagnostic(%arg0: tensor<13x21x1xf64>, %arg1: tensor<13x
return %0 : tensor<13x21x3xf64>
}
}
-
-// -----
-
-// CHECK-LABEL: test_dense_ressource_f64
-func.func @test_dense_ressource_f64() -> tensor<1x2xf64> {
- // COMMON: %[[CONST:.*]] = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xf32>}> : () -> tensor<1x2xf32>
- %0 = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xf64>}> : () -> tensor<1x2xf64>
- // DEFAULT: %[[OUT_CAST:.*]] = tosa.cast %[[CONST]] : (tensor<1x2xf32>) -> tensor<1x2xf64>
- // DEFAULT: return %[[OUT_CAST]] : tensor<1x2xf64>
- // FUNCBOUND: return %[[CONST]] : tensor<1x2xf32>
- return %0 : tensor<1x2xf64>
-}
-{-#
- dialect_resources: {
- builtin: {
- // COMMON: resource: "0x040000000000803F000080BF"
- resource: "0x04000000000000000000F03F000000000000F0BF"
- }
- }
-#-}
diff --git a/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32-aggressive.mlir b/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32-aggressive.mlir
index f7ba9765be556..9848fe4abb345 100644
--- a/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32-aggressive.mlir
+++ b/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32-aggressive.mlir
@@ -88,23 +88,3 @@ func.func @test_clamp_trunc(%arg0: tensor<100xi64>) -> tensor<100xi64> {
%1 = tosa.clamp %arg0 {max_val = 3000000000 : i64, min_val = -2147483648 : i64} : (tensor<100xi64>) -> tensor<100xi64>
return %1 : tensor<100xi64>
}
-
-// -----
-
-// CHECK-LABEL: test_dense_ressource_i64
-func.func @test_dense_ressource_i64() -> tensor<1x2xi64> {
- // COMMON: %[[CONST:.*]] = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xi32>}> : () -> tensor<1x2xi32>
- %1 = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xi64>}> : () -> tensor<1x2xi64>
- // DEFAULT: %[[OUT_CAST:.*]] = tosa.cast %[[CONST]] : (tensor<1x2xi32>) -> tensor<1x2xi64>
- // DEFAULT: return %[[OUT_CAST]] : tensor<1x2xi64>
- // FUNCBOUND: return %[[CONST]] : tensor<1x2xi32>
- return %1 : tensor<1x2xi64>
-}
-{-#
- dialect_resources: {
- builtin: {
- // COMMON: resource: "0x04000000FFFFFF7F00000080"
- resource: "0x04000000000000000800000000000000F8FFFFFF"
- }
- }
-#-}
diff --git a/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32.mlir b/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32.mlir
index 6c01d80bdb38f..42e63346d8c33 100644
--- a/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32.mlir
+++ b/mlir/test/Dialect/Tosa/tosa-narrow-i64-to-i32.mlir
@@ -199,23 +199,3 @@ func.func @test_clamp_min_outside_i32_range(%arg0: tensor<100xi64>) -> tensor<10
%1 = tosa.clamp %arg0 {max_val = 2147483647 : i64, min_val = -2147483649 : i64} : (tensor<100xi64>) -> tensor<100xi64>
return %1 : tensor<100xi64>
}
-
-// -----
-
-// CHECK-LABEL: test_dense_ressource_i64
-func.func @test_dense_ressource_i64() -> tensor<1x2xi64> {
- // COMMON: %[[CONST:.*]] = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xi32>}> : () -> tensor<1x2xi32>
- %1 = "tosa.const"() <{values = dense_resource<resource> : tensor<1x2xi64>}> : () -> tensor<1x2xi64>
- // DEFAULT: %[[OUT_CAST:.*]] = tosa.cast %[[CONST]] : (tensor<1x2xi32>) -> tensor<1x2xi64>
- // DEFAULT: return %[[OUT_CAST]] : tensor<1x2xi64>
- // FUNCBOUND: return %[[CONST]] : tensor<1x2xi32>
- return %1 : tensor<1x2xi64>
-}
-{-#
- dialect_resources: {
- builtin: {
- // COMMON: resource: "0x04000000FEFFFF7F905AE75A"
- resource: "0x04000000FEFFFF7F00000000905AE75A00000000"
- }
- }
-#-}
More information about the llvm-branch-commits
mailing list