diff options
author | Kevin Cheng <kevin.cheng@arm.com> | 2021-06-29 15:32:19 -0700 |
---|---|---|
committer | Kevin Cheng <kevin.cheng@arm.com> | 2021-08-20 18:07:06 +0100 |
commit | acb550f4410ae861e53cae27a9feb4b11d45769f (patch) | |
tree | ae2f4ec558c2cdf1afa020b80a09d7ab4be5ef6d /reference_model/src/ops/ewise_unary.cc | |
parent | 68e7aee65bda5ac03fa7def753b7dc7462554793 (diff) | |
download | reference_model-acb550f4410ae861e53cae27a9feb4b11d45769f.tar.gz |
Replace node level check ASSERT_MSG_NODE()/FATAL_ERROR_NODE() with REQUIRE() or ERROR_IF()
- Adding return code enum class: {VALID, UNPREDICTABLE, ERROR}
- Runtime errors (e.g. memory allocation failure) will abort immediately, or will return one of the three return codes
Part of the codes are re-written to pass REQUIRE() to the top-level (e.g. apply_scale_32/16())
- Update setExpectedFailure() to setExpectedReturnCode() on test generation script
- Update test regression script to interface with reference model change
Signed-off-by: Kevin Cheng <kevin.cheng@arm.com>
Change-Id: Ia063c936bcb2a54d6e379a5bb6801aa72d1186f1
Diffstat (limited to 'reference_model/src/ops/ewise_unary.cc')
-rw-r--r-- | reference_model/src/ops/ewise_unary.cc | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/reference_model/src/ops/ewise_unary.cc b/reference_model/src/ops/ewise_unary.cc index 95a1102..041bbdb 100644 --- a/reference_model/src/ops/ewise_unary.cc +++ b/reference_model/src/ops/ewise_unary.cc @@ -23,8 +23,8 @@ using namespace Eigen; using namespace tosa; template <int Rank, DType Dtype> -UnaryNode<Rank, Dtype>::UnaryNode(const Op& op_, uint64_t id_) - : GraphNode(op_, id_) +UnaryNode<Rank, Dtype>::UnaryNode(SubgraphTraverser* sgt_, const Op& op_, uint64_t id_) + : GraphNode(sgt_, op_, id_) { setRequiredOperands(1, 1); setRequiredRank(0, 6); @@ -80,7 +80,7 @@ int OpAbs<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return a > (InEigenType)0 ? a : (-a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -97,7 +97,7 @@ int OpBitwiseNot<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return ~a; }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -112,7 +112,7 @@ int OpCeil<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return ceilf(a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -128,7 +128,7 @@ int OpClz<Rank, Dtype>::register_fcn() num_bits = 32; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } this->fcn = [num_bits](int32_t a) -> int32_t { @@ -159,7 +159,7 @@ int OpExp<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return expf(a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -174,7 +174,7 @@ int OpFloor<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return floorf(a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -189,7 +189,7 @@ int OpLog<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return logf(a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -204,7 +204,7 @@ int OpLogicalNot<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return !a; }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -213,6 +213,12 @@ int OpLogicalNot<Rank, Dtype>::register_fcn() template <int Rank, DType Dtype> int OpNegate<Rank, Dtype>::register_fcn() { + if (Dtype != DType_INT8 && this->qinfo) + { + ERROR_IF(this->qinfo->input_zp() != 0, "OpNegate: zeropoint only for int8_t"); + ERROR_IF(this->qinfo->output_zp() != 0, "OpNegate: zeropoint only for int8_t"); + } + switch (Dtype) { case DType_FLOAT: @@ -229,7 +235,6 @@ int OpNegate<Rank, Dtype>::register_fcn() }; break; case DType_INT8: - ASSERT(this->qinfo); this->fcn = [this](InEigenType a) -> OutEigenType { InEigenType result = -(a - this->qinfo->input_zp()) + this->qinfo->output_zp(); result = std::min(std::max(result, static_cast<InEigenType>(QMin)), static_cast<InEigenType>(QMax)); @@ -237,7 +242,7 @@ int OpNegate<Rank, Dtype>::register_fcn() }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -252,7 +257,7 @@ int OpReciprocal<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return 1.0 / a; }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; @@ -267,7 +272,7 @@ int OpRsqrt<Rank, Dtype>::register_fcn() this->fcn = [](InEigenType a) -> OutEigenType { return 1.0 / sqrtf(a); }; break; default: - FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[Dtype]); + ERROR_IF(true, "unsupported DType %s", EnumNamesDType()[Dtype]); } return 0; |