aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTai Ly <tai.ly@arm.com>2024-01-25 18:37:27 +0000
committerTai Ly <tai.ly@arm.com>2024-01-30 17:26:14 +0000
commit06cb91ba15e860adf72409341143f30613b336c1 (patch)
tree2e558c2421777c914c78ce202873e5aed52761b9
parent4d04238050a50081f35d7e615b590d00e702f501 (diff)
downloadtosa_mlir_translator-06cb91ba15e860adf72409341143f30613b336c1.tar.gz
Change PadOp's padding to TOSA Shape
PadOp's padding input is now a tosa.shape type. Changed serialization of PadOp to not store padding as attribute. Changed deserialization of PadOp to not restore padding from attribute. Signed-off-by: Tai Ly <tai.ly@arm.com> Change-Id: I8a622978ea184b8d2779d311adba629c1a0d1fbd
-rw-r--r--src/TosaDeserialize.cpp14
-rw-r--r--src/TosaSerialize.cpp21
2 files changed, 9 insertions, 26 deletions
diff --git a/src/TosaDeserialize.cpp b/src/TosaDeserialize.cpp
index 2421d79..5956bc8 100644
--- a/src/TosaDeserialize.cpp
+++ b/src/TosaDeserialize.cpp
@@ -1029,6 +1029,7 @@ template <>
std::vector<mlir::Value>
TosaMlirOperatorBuilder::build<Op_PAD>(TosaSerializationOperator *op) const {
mlir::Value input_val = tensor_map->at(op->GetInputTensorNames()[0]);
+ mlir::Value padding_val = tensor_map->at(op->GetInputTensorNames()[1]);
mlir::RankedTensorType input_type =
tensor_type_map->at(op->GetInputTensorNames()[0]);
mlir::RankedTensorType output_type =
@@ -1038,15 +1039,6 @@ TosaMlirOperatorBuilder::build<Op_PAD>(TosaSerializationOperator *op) const {
Attribute_PadAttribute); // double check attribute type
TosaPadAttribute *attr = static_cast<TosaPadAttribute *>(op->GetAttribute());
- // padding has shape {rank(input_type), 2}
- auto padding_type = mlir::RankedTensorType::get({input_type.getRank(), 2},
- op_builder->getI32Type());
- auto padding_attr =
- BuildDenseI32ElementsAttr(op_builder, padding_type, attr->padding());
- mlir::Operation *mlir_const_op =
- op_builder->create<mlir::tosa::ConstOp>(loc, padding_type, padding_attr);
- block->push_back(mlir_const_op);
- auto padding_value = mlir_const_op->getResult(0);
auto pad_const_int = attr->pad_const_int();
auto pad_const_fp = attr->pad_const_fp();
// todo: int input_zp = attr->pad_input_zp();
@@ -1055,7 +1047,7 @@ TosaMlirOperatorBuilder::build<Op_PAD>(TosaSerializationOperator *op) const {
if (pad_const_int == 0 && pad_const_fp == 0.0f) {
// no pad_const input
mlir_op = op_builder->create<mlir::tosa::PadOp>(loc, output_type, input_val,
- padding_value);
+ padding_val);
} else {
// create a const value for pad_const input
const auto input_element_type =
@@ -1083,7 +1075,7 @@ TosaMlirOperatorBuilder::build<Op_PAD>(TosaSerializationOperator *op) const {
pad_const_value = pad_const_fp_op->getResult(0);
}
mlir_op = op_builder->create<mlir::tosa::PadOp>(
- loc, output_type, input_val, padding_value, pad_const_value);
+ loc, output_type, input_val, padding_val, pad_const_value);
}
block->push_back(mlir_op);
return std::vector<mlir::Value>({mlir_op->getResult(0)});
diff --git a/src/TosaSerialize.cpp b/src/TosaSerialize.cpp
index 4f2c358..de301fe 100644
--- a/src/TosaSerialize.cpp
+++ b/src/TosaSerialize.cpp
@@ -1205,19 +1205,10 @@ TosaSerializationOperator *
TosaSerializationOperatorBuilder::build<mlir::tosa::PadOp>(
mlir::Operation &op) const {
std::string input_name = GetTensorName(op.getOperand(0));
+ std::string padding_name = GetTensorName(op.getOperand(1));
std::string output_name = GetTensorName(op.getResult(0));
auto pad_op = llvm::cast<mlir::tosa::PadOp>(op);
- // Match padding tensor as compile-time constant attribute
- mlir::ElementsAttr paddings_elems;
- if (!matchPattern(pad_op.getPadding(), m_Constant(&paddings_elems)))
- return nullptr;
-
- std::vector<int> paddings;
- for (int32_t val : paddings_elems.getValues<int32_t>()) {
- paddings.push_back(val);
- }
-
auto quant_info = pad_op.getQuantizationInfoAttr();
// pad_const includes the zero point if the tensor uses a zero point.
int32_t pad_const_int = quant_info ? quant_info.getInputZp() : 0;
@@ -1242,12 +1233,12 @@ TosaSerializationOperatorBuilder::build<mlir::tosa::PadOp>(
}
}
- TosaPadAttribute attribute(paddings, pad_const_int, pad_const_fp);
+ TosaPadAttribute attribute({}, pad_const_int, pad_const_fp);
- TosaSerializationOperator *tyop =
- new TosaSerializationOperator(Op_PAD, Attribute_PadAttribute, &attribute,
- std::vector<std::string>{input_name},
- std::vector<std::string>{output_name});
+ TosaSerializationOperator *tyop = new TosaSerializationOperator(
+ Op_PAD, Attribute_PadAttribute, &attribute,
+ std::vector<std::string>{input_name, padding_name},
+ std::vector<std::string>{output_name});
return tyop;
}