--- /dev/null
+#ifndef _NNC_CORE_BACKEND_INTERPRETER_RESHAPE_IMPL_
+#define _NNC_CORE_BACKEND_INTERPRETER_RESHAPE_IMPL_
+
+#include "nnc/core/IR/model/operations/reshape_op.h"
+
+#include "interpreter/ops/OperationImpl.h"
+#include "interpreter/ops/Fill.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace backend
+{
+namespace interpreter
+{
+namespace impl
+{
+
+using nncc::contrib::core::IR::model::ops::ReshapeOp;
+
+template <typename T> class Reshape : public OperationImpl<T>
+{
+public:
+ Reshape(const TensorVariant &input, const ReshapeOp &op) : _input(input), _op(op)
+ {
+ assert(num_elements(_op.getInputShape(0)) == num_elements(_op.getOutputShape(0)));
+ }
+
+ std::vector<TensorVariant> operator()() override
+ {
+ const Shape &outShape = _op.getOutputShape(0);
+ const Shape &inShape = _op.getInputShape(0);
+
+ ShapeRange inRange(inShape);
+ ShapeRange outRange(outShape);
+
+ auto inIter = inRange.begin();
+
+ auto out = OperationImpl<T>::allocate_tensor(outShape);
+
+ Tensor<float> outAccessor(out);
+ // Shapes element count compared in Reshape ctor
+ return Fill<T>(outShape, [this, &inIter](const Index &) -> float { return _input.at(*inIter++); })();
+ }
+
+private:
+ Tensor<T> _input;
+ const ReshapeOp &_op;
+};
+
+} // namespace impl
+} // namespace interpreter
+} // namespace backend
+} // namespace contrib
+} // namespace nncc
+
+#endif //_NNC_CORE_BACKEND_INTERPRETER_RESHAPE_IMPL_