diff options
author | Tai Ly <tai.ly@arm.com> | 2023-07-07 23:36:04 +0000 |
---|---|---|
committer | Eric Kunze <eric.kunze@arm.com> | 2023-07-12 15:20:51 +0000 |
commit | 787606544db8664ff42a31958f554fe7088427b5 (patch) | |
tree | 1abcacc8fb205bf313c66c197c3e99fa0764818b /src/TosaSerialize.cpp | |
parent | 9a57b9fe6f9832fa0406daac367fd3fc09afa018 (diff) | |
download | tosa_mlir_translator-787606544db8664ff42a31958f554fe7088427b5.tar.gz |
[tosa_mlir_translator] Fix Pad const attr type
This fixes serialization and deserialization of Pad Operator's
constant value attributes that is integer data types other than I32
also fixed serialization of F16 constants to not crash, found in
testing
Signed-off-by: Tai Ly <tai.ly@arm.com>
Change-Id: Ic3987aad0e11b612de591eaeecd308d599d174e1
Diffstat (limited to 'src/TosaSerialize.cpp')
-rw-r--r-- | src/TosaSerialize.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/TosaSerialize.cpp b/src/TosaSerialize.cpp index a3e21f9..fec9f17 100644 --- a/src/TosaSerialize.cpp +++ b/src/TosaSerialize.cpp @@ -470,8 +470,8 @@ TosaSerializationOperatorBuilder::build<mlir::tosa::ConstOp>( op.getAttr(llvm::StringRef("value")).dyn_cast<mlir::FloatAttr>(); if (dense_attr) { - for (auto val : dense_attr.getValues<float>()) { - data.push_back(val); + for (auto val : dense_attr.getValues<mlir::APFloat>()) { + data.push_back(val.convertToFloat()); } } else if (val_attr) { data.push_back((float)val_attr.getValueAsDouble()); @@ -931,9 +931,7 @@ TosaSerializationOperatorBuilder::build<mlir::tosa::PadOp>( 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; + int32_t pad_const_int = 0; float pad_const_fp = 0.f; if (auto tensor = pad_op.getPadConst()) { @@ -946,10 +944,12 @@ TosaSerializationOperatorBuilder::build<mlir::tosa::PadOp>( auto elementTy = attr.getElementType(); if (elementTy.isa<mlir::IntegerType>()) { - pad_const_int = quant_info ? *attr.value_begin<int8_t>() - : *attr.value_begin<int32_t>(); + pad_const_int = (attr.getValues<mlir::APInt>()[0]).getSExtValue(); } else if (elementTy.isa<mlir::FloatType>()) { - pad_const_fp = *attr.value_begin<float>(); + pad_const_fp = (attr.getValues<mlir::APFloat>()[0]).convertToFloat(); + } else { + op.emitOpError("Unknown const attribute"); + return nullptr; } } |