From eecc90165c5d37b75aca83f4d00cb4481872b238 Mon Sep 17 00:00:00 2001 From: Tai Ly Date: Thu, 29 Feb 2024 18:53:35 +0000 Subject: [tosa_mlir_translator] change rescale attrs to inputs This patch is for RescaleOp multiplier/shift changing from attributes to inputs Signed-off-by: Tai Ly Change-Id: I2fe3aa3cd37134f36873240c92b387b9610e3f9d --- src/TosaDeserialize.cpp | 13 +++++-------- src/TosaSerialize.cpp | 11 +++++------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/TosaDeserialize.cpp b/src/TosaDeserialize.cpp index 5ad7e6e..9660833 100644 --- a/src/TosaDeserialize.cpp +++ b/src/TosaDeserialize.cpp @@ -1174,9 +1174,6 @@ TosaMlirOperatorBuilder::build(TosaSerializationOperator *op) const { mlir::RankedTensorType output_type = tensor_type_map->at(op->GetOutputTensorNames()[0]); - assert(op->GetAttributeType() == - Attribute_SliceAttribute); // double check attribute type - mlir::Value start = tensor_map->at(op->GetInputTensorNames()[1]); mlir::Value size = tensor_map->at(op->GetInputTensorNames()[2]); @@ -1336,6 +1333,8 @@ template <> std::vector TosaMlirOperatorBuilder::build( TosaSerializationOperator *op) const { mlir::Value input_val = tensor_map->at(op->GetInputTensorNames()[0]); + mlir::Value multiplier_val = tensor_map->at(op->GetInputTensorNames()[1]); + mlir::Value shift_val = tensor_map->at(op->GetInputTensorNames()[2]); mlir::RankedTensorType output_type = tensor_type_map->at(op->GetOutputTensorNames()[0]); @@ -1347,9 +1346,6 @@ std::vector TosaMlirOperatorBuilder::build( auto input_zp = op_builder->getI32IntegerAttr(attr->input_zp()); auto output_zp = op_builder->getI32IntegerAttr(attr->output_zp()); - auto multiplier = BuildDenseI32ArrayAttr(op_builder, attr->multiplier()); - auto shift = BuildDenseI8ArrayAttr(op_builder, attr->shift()); - auto scale32 = op_builder->getBoolAttr(attr->scale32()); auto double_round = op_builder->getBoolAttr(attr->double_round()); auto per_channel = op_builder->getBoolAttr(attr->per_channel()); @@ -1358,8 +1354,9 @@ std::vector TosaMlirOperatorBuilder::build( auto output_unsigned = op_builder->getBoolAttr(attr->output_unsigned()); mlir::Operation *mlir_op = op_builder->create( - loc, output_type, input_val, input_zp, output_zp, multiplier, shift, - scale32, double_round, per_channel, input_unsigned, output_unsigned); + loc, output_type, input_val, multiplier_val, shift_val, input_zp, + output_zp, scale32, double_round, per_channel, input_unsigned, + output_unsigned); block->push_back(mlir_op); return std::vector({mlir_op->getResult(0)}); } diff --git a/src/TosaSerialize.cpp b/src/TosaSerialize.cpp index 0d5e044..74988c8 100644 --- a/src/TosaSerialize.cpp +++ b/src/TosaSerialize.cpp @@ -1356,10 +1356,6 @@ TosaSerializationOperatorBuilder::build( bool per_channel = op.getAttr("per_channel").dyn_cast().getValue(); - auto multiplier = - op.getAttr("multiplier").dyn_cast().asArrayRef(); - auto shift = getDenseI8ArrayAttr(op.getAttr("shift")); - bool input_unsigned = op.getAttr("input_unsigned").dyn_cast().getValue(); bool output_unsigned = @@ -1371,15 +1367,18 @@ TosaSerializationOperatorBuilder::build( auto output_ty = output.getType().cast(); std::string input_name = GetTensorName(input); + std::string multiplier_name = GetTensorName(op.getOperand(1)); + std::string shift_name = GetTensorName(op.getOperand(2)); std::string output_name = GetTensorName(output); - TosaRescaleAttribute attribute(input_zp, output_zp, multiplier, shift, + TosaRescaleAttribute attribute(input_zp, output_zp, + /* multiplier = */ {}, /* shift = */ {}, scale32, double_round, per_channel, input_unsigned, output_unsigned); TosaSerializationOperator *tyop = new TosaSerializationOperator( Op_RESCALE, Attribute_RescaleAttribute, &attribute, - std::vector{input_name}, + std::vector{input_name, multiplier_name, shift_name}, std::vector{output_name}); return tyop; -- cgit v1.2.1