80 const circle::Tensor *input =
nullptr;
81 const circle::Tensor *
begin =
nullptr;
82 const circle::Tensor *end =
nullptr;
83 const circle::Tensor *strides =
nullptr;
85 const circle::Tensor *output =
nullptr;
88 const int32_t *begin_data;
89 const int32_t *end_data;
90 const int32_t *strides_data;
94 const circle::StridedSliceOptions *options;
98 runtime_kernel.
readKernel(op_index, runtime_context);
100 input = runtime_kernel.
inputs[inputTensorIdx];
102 end = runtime_kernel.
inputs[endTensorIdx];
103 strides = runtime_kernel.
inputs[stridesTensorIdx];
105 output = runtime_kernel.
outputs[outputTensorIdx];
106 assert(input !=
nullptr);
107 assert(
begin !=
nullptr);
108 assert(end !=
nullptr);
109 assert(strides !=
nullptr);
110 assert(output !=
nullptr);
112 status = runtime_kernel.
getDataFromStorage(op_index, runtime_storage, runtime_context);
116 input_data = runtime_kernel.
inputs_data[inputTensorIdx];
117 begin_data = utils::castInputData<int32_t>(runtime_kernel.
inputs_data[beginTensorIdx]);
118 end_data = utils::castInputData<int32_t>(runtime_kernel.
inputs_data[endTensorIdx]);
119 strides_data = utils::castInputData<int32_t>(runtime_kernel.
inputs_data[stridesTensorIdx]);
120 output_data = runtime_kernel.
outputs_data[outputTensorIdx];
122 assert(input_data !=
nullptr);
123 assert(begin_data !=
nullptr);
124 assert(end_data !=
nullptr);
125 assert(strides_data !=
nullptr);
126 assert(output_data !=
nullptr);
128 options = runtime_kernel.
first_operator->builtin_options_as_StridedSliceOptions();
133 auto op_params = buildStridedSliceParams(input_shape.
dimensionsCount(), begin_data, end_data,
134 strides_data, options);
136 switch (input->type())
139 case circle::TensorType_FLOAT32:
141 status =
pal::StridedSlice(op_params, input_shape, utils::castInputData<float>(input_data),
142 utils::castOutputData<float>(output_data));
147 case circle::TensorType_INT8:
149 status =
pal::StridedSlice(op_params, input_shape, utils::castInputData<int8_t>(input_data),
150 utils::castOutputData<int8_t>(output_data));
154 case circle::TensorType_INT32:
156 status =
pal::StridedSlice(op_params, input_shape, utils::castInputData<int32_t>(input_data),
157 utils::castOutputData<int32_t>(output_data));
163 assert(
false &&
"Unsupported type.");
StridedSliceParams buildStridedSliceParams(const T *begin, const T *end, const T *strides, const uint32_t begin_mask, const uint32_t end_mask, const uint32_t shrink_axis_mask, const uint8_t rank)