19#include "kernels/Utils.h"
28constexpr int maxInputSize = 5;
37 Tensor::element_type(kernel.
output()));
48 const auto *options =
cur_op->builtin_options_as_MirrorPadOptions();
50 const auto offset = options->mode() != circle::MirrorPadMode_REFLECT ? 0 : 1;
51 const auto input_dims = Tensor::num_dims(kernel.
input1());
52 const auto output_size = Tensor::num_elements(kernel.
output());
57 for (
int i = 0;
i < input_dims;
i++)
63 for (
int i = input_dims - 2;
i >= 0;
i--)
72 switch (Tensor::element_type(kernel.
input1()))
75 case DataType::FLOAT32:
78 Tensor::element_type(kernel.
input2()),
data.input2_data,
80 kernels::getTensorData<float>(
data.input1_data),
81 kernels::getTensorData<float>(
data.output_data),
offset, input_dims, output_size);
87 assert(
false &&
"Unsupported type");
const circle::Tensor * output() const
const circle::Tensor * input2() const
const circle::Tensor * input1() const
#define LUCI_INTERPRETER_CHECK(cond)
__global uchar * offset(const Image *img, int x, int y)
const T * data(const std::vector< T, Alloc > &v)
void MirrorPad(const luci_interpreter::DataType padding_matrix_type, const uint8_t *padding_matrix_data, const int32_t *input_dims, int *output_dims_num_elements, int *input_dims_num_elements, const T *input_data, T *output_data, const int offset, const int num_dims, const int output_size)
void execute_kernel_CircleMirrorPad(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
void configure_kernel_CircleMirrorPad(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
T must_cast(loco::Node *node)
VectorWrapper< T > wrap(const flatbuffers::Vector< T > *vec)
const loco::Dimension & dim(uint32_t axis) const