blob: 530b95965cc14da3ac7ffc276f6d68c4c4fa642f [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "OperationConverterResolver"
#include "OperationConverterResolver.h"
#include "OperationsUtils.h"
namespace android {
namespace nn {
#define NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION(opType) \
const IOperationConverter* registerConverter_##opType();
NN_FOR_EACH_OPERATION(NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION)
#undef NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(AVERAGE_POOL_2D);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CONCATENATION);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DEPTH_TO_SPACE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DEQUANTIZE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EMBEDDING_LOOKUP);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FLOOR);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FULLY_CONNECTED);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HASHTABLE_LOOKUP);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(L2_NORMALIZATION);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(L2_POOL_2D);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOCAL_RESPONSE_NORMALIZATION);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LSH_PROJECTION);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LSTM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MAX_POOL_2D);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MUL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU1);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU6);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESHAPE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESIZE_BILINEAR);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RNN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SOFTMAX);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPACE_TO_DEPTH);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SVDF);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TANH);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BATCH_TO_SPACE_ND);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DIV);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MEAN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PAD);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPACE_TO_BATCH_ND);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SQUEEZE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(STRIDED_SLICE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SUB);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TRANSPOSE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ABS);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ARGMAX);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ARGMIN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(AXIS_ALIGNED_BBOX_TRANSFORM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BIDIRECTIONAL_SEQUENCE_LSTM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BIDIRECTIONAL_SEQUENCE_RNN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BOX_WITH_NMS_LIMIT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CAST);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CHANNEL_SHUFFLE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DENSIFY);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DETECTION_POSTPROCESSING);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EQUAL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EXP);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EXPAND_DIMS);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GATHER);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GENERATE_PROPOSALS);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GREATER);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GREATER_EQUAL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GROUPED_CONV_2D);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HEATMAP_MAX_KEYPOINT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(INSTANCE_NORMALIZATION);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LESS);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LESS_EQUAL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOG);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_AND);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_NOT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_OR);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOG_SOFTMAX);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MAXIMUM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MINIMUM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(NEG);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(NOT_EQUAL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PAD_V2);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(POW);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PRELU);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZED_16BIT_LSTM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RANDOM_MULTINOMIAL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_ALL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_ANY);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_MAX);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_MIN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_PROD);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_SUM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ROI_ALIGN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ROI_POOLING);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RSQRT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SELECT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SIN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SLICE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPLIT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SQRT);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TILE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TOPK_V2);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TRANSPOSE_CONV_2D);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(UNIDIRECTIONAL_SEQUENCE_LSTM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(UNIDIRECTIONAL_SEQUENCE_RNN);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESIZE_NEAREST_NEIGHBOR);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZED_LSTM);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(IF);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(WHILE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ELU);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HARD_SWISH);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FILL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RANK);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BATCH_MATMUL);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PACK);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MIRROR_PAD);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REVERSE);
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(OEM_OPERATION);
OperationConverterResolver::OperationConverterResolver() {
#define NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER(operationType) \
registerOperationConverter(registerConverter_##operationType(), OperationType::operationType);
NN_FOR_EACH_OPERATION(NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER)
#undef NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER
}
const IOperationConverter* OperationConverterResolver::findOperationConverter(
OperationType operationType) const {
int32_t index = static_cast<int32_t>(operationType);
if (index >= 0 && index < kNumberOfOperationTypes) {
return mConverters[index];
}
return nullptr;
}
void OperationConverterResolver::registerOperationConverter(
const IOperationConverter* operationConverter, OperationType operationType) {
if (operationConverter == nullptr) {
return;
}
int32_t index = static_cast<int32_t>(operationType);
CHECK(mConverters[index] == nullptr);
mConverters[index] = operationConverter;
}
} // namespace nn
} // namespace android