19#include "kernels/Utils.h"
29template <
typename InputT,
typename CoordsT =
int32_t>
30void gather(
const circle::GatherOptions *options, kernels::TISOKernel *kernel)
32 kernels::TISOData
tiso_data = kernel->readData();
38 const circle::Tensor *
input = kernel->input1();
39 const circle::Tensor *
coords = kernel->input2();
48 int batch_dims =
options->batch_dims();
60 for (
int i = 0;
i < batch_dims; ++
i)
65 for (
int i = batch_dims;
i < axis; ++
i)
80 for (
int batch = 0; batch < batch_size; ++batch)
104 const auto *options =
cur_op->builtin_options_as_GatherOptions();
108 Tensor::element_type(kernel.
input1()) == DataType::S8
or
109 Tensor::element_type(kernel.
input1()) == DataType::S32);
111 int32_t axis = options->axis();
112 int32_t num_dims = Tensor::num_dims(kernel.
input1());
120 int32_t batch_dims = options->batch_dims();
131 for (
int i = 0;
i < batch_dims; ++
i)
141 const auto *options =
cur_op->builtin_options_as_GatherOptions();
143 switch (Tensor::element_type(kernel.
input1()))
146 case DataType::FLOAT32:
156 assert(
false &&
"Unsupported type");
Array< CornerBox > coords
const circle::Tensor * input2() const
const circle::Tensor * input1() const
#define LUCI_INTERPRETER_CHECK(cond)
void configure_kernel_CircleGather(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
void execute_kernel_CircleGather(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
T must_cast(loco::Node *node)
const loco::Dimension & dim(uint32_t axis) const