--- /dev/null
+#ifndef _NNC_CORE_IR_MODEL_DEPTHWISE_CONV_2D_H_
+#define _NNC_CORE_IR_MODEL_DEPTHWISE_CONV_2D_H_
+
+#include <vector>
+
+#include "nnc/core/IR/model/operations/operation.h"
+#include "nnc/core/linalg/TensorVariant.h"
+#include "nnc/core/IR/model/operations/common.h"
+
+#include "nncc/core/ADT/tensor/Shape.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace core
+{
+namespace IR
+{
+namespace model
+{
+namespace ops
+{
+
+using nncc::core::ADT::tensor::Shape;
+
+class DepthwiseConv2DOp : public OpDescription
+{
+public:
+ explicit DepthwiseConv2DOp(const ADT::TensorVariant &kernel, const Shape &strides, PaddingType padding)
+ : OpDescription(1, 1), _kernel(kernel), _strides(strides), _padding(padding)
+ {
+ _pads.resize(_kernel.getShape().rank());
+ }
+
+ const ADT::TensorVariant &getKernel() const { return _kernel; }
+
+ const Shape &getStrides() const { return _strides; }
+
+ PaddingType getPaddingType() const { return _padding; }
+
+ int getPadding(int dim) const { return _pads[dim]; }
+
+ void setPadding(int dim, int pad) { _pads[dim] = pad; }
+
+private:
+ const ADT::TensorVariant _kernel;
+ Shape _strides;
+ PaddingType _padding;
+ std::vector<int> _pads;
+};
+
+} // namespace ops
+} // namespace model
+} // namespace IR
+} // namespace core
+} // namespace contrib
+} // namespace nncc
+
+#endif //_NNC_CORE_IR_MODEL_DEPTHWISE_CONV_2D_H_