aboutsummaryrefslogtreecommitdiff
path: root/reference_model/src/ops/shape.cc
diff options
context:
space:
mode:
Diffstat (limited to 'reference_model/src/ops/shape.cc')
-rw-r--r--reference_model/src/ops/shape.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/reference_model/src/ops/shape.cc b/reference_model/src/ops/shape.cc
index b087dd8..425dfc2 100644
--- a/reference_model/src/ops/shape.cc
+++ b/reference_model/src/ops/shape.cc
@@ -37,6 +37,18 @@ int OpConstShape::checkTensorAttributes()
int OpConstShape::eval()
{
+ // set the shapeValue given the actual tensor value
+ using EigenType = typename GetEigenType<TOSA_REF_TYPE_SHAPE>::type;
+ auto out = dynamic_cast<TosaReference::TensorTemplate<Eigen::Tensor<EigenType, 1>>*>(this->getOutputs()[0]);
+
+ std::vector<int> shapeValue;
+ for (int i = 0; out != nullptr && i < out->getTensor().size(); ++i)
+ {
+ shapeValue.push_back(out->getTensor()(i));
+ }
+
+ this->getOutputs()[0]->setShapeValue(shapeValue);
+
for (auto ct : getOutputs())
{
if (!ct->getIsValid())
@@ -106,6 +118,15 @@ int OpConcatShape::eval()
}
}
out->getTensor() = out_tensor;
+
+ // set the shapeValue given the actual tensor value
+ std::vector<int> shapeValue;
+ for (int i = 0; i < out->getTensor().size(); ++i)
+ {
+ shapeValue.push_back(out->getTensor()(i));
+ }
+ this->getOutputs()[0]->setShapeValue(shapeValue);
+
return GraphNode::eval();
}
@@ -168,6 +189,15 @@ int ShapeBinaryNodeBase::eval()
}
result->getTensor() = out_tens;
+
+ // set the shapeValue given the actual tensor value
+ std::vector<int> shapeValue;
+ for (int i = 0; i < result->getTensor().size(); ++i)
+ {
+ shapeValue.push_back(result->getTensor()(i));
+ }
+ this->getOutputs()[0]->setShapeValue(shapeValue);
+
return GraphNode::eval();
}