/*
Copyright (c) 2015 - present Advanced Micro Devices, Inc. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

#include "CUDA2HIP.h"

// Map of all functions
const std::map<llvm::StringRef, hipCounter> CUDA_DNN_FUNCTION_MAP {

  {"cudnnGetVersion",                                     {"hipdnnGetVersion",                                     "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetCudartVersion",                               {"hipdnnGetCudartVersion",                               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnQueryRuntimeError",                              {"hipdnnQueryRuntimeError",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetProperty",                                    {"hipdnnGetProperty",                                    "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetErrorString",                                 {"hipdnnGetErrorString",                                 "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnIm2Col",                                         {"hipdnnIm2Col",                                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCreate",                                         {"hipdnnCreate",                                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroy",                                        {"hipdnnDestroy",                                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetStream",                                      {"hipdnnSetStream",                                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetStream",                                      {"hipdnnGetStream",                                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetCallback",                                    {"hipdnnSetCallback",                                    "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCallback",                                    {"hipdnnGetCallback",                                    "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnAdvInferVersionCheck",                           {"hipdnnAdvInferVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnAdvTrainVersionCheck",                           {"hipdnnAdvTrainVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCnnInferVersionCheck",                           {"hipdnnCnnInferVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCnnTrainVersionCheck",                           {"hipdnnCnnTrainVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnOpsInferVersionCheck",                           {"hipdnnOpsInferVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnOpsTrainVersionCheck",                           {"hipdnnOpsTrainVersionCheck",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Tensor functions
  {"cudnnCreateTensorDescriptor",                         {"hipdnnCreateTensorDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetTensor4dDescriptor",                          {"hipdnnSetTensor4dDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetTensor4dDescriptorEx",                        {"hipdnnSetTensor4dDescriptorEx",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetTensor4dDescriptor",                          {"hipdnnGetTensor4dDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetTensorNdDescriptor",                          {"hipdnnSetTensorNdDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetTensorNdDescriptorEx",                        {"hipdnnSetTensorNdDescriptorEx",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetTensorNdDescriptor",                          {"hipdnnGetTensorNdDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetTensorSizeInBytes",                           {"hipdnnGetTensorSizeInBytes",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyTensorDescriptor",                        {"hipdnnDestroyTensorDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnTransformTensor",                                {"hipdnnTransformTensor",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnTransformTensorEx",                              {"hipdnnTransformTensorEx",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnInitTransformDest",                              {"hipdnnInitTransformDest",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCreateTensorTransformDescriptor",                {"hipdnnCreateTensorTransformDescriptor",                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetTensorTransformDescriptor",                   {"hipdnnSetTensorTransformDescriptor",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetTensorTransformDescriptor",                   {"hipdnnGetTensorTransformDescriptor",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyTensorTransformDescriptor",               {"hipdnnDestroyTensorTransformDescriptor",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnAddTensor",                                      {"hipdnnAddTensor",                                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnCreateOpTensorDescriptor",                       {"hipdnnCreateOpTensorDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetOpTensorDescriptor",                          {"hipdnnSetOpTensorDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetOpTensorDescriptor",                          {"hipdnnGetOpTensorDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyOpTensorDescriptor",                      {"hipdnnDestroyOpTensorDescriptor",                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnOpTensor",                                       {"hipdnnOpTensor",                                       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetFoldedConvBackwardDataDescriptors",           {"hipdnnGetFoldedConvBackwardDataDescriptors",           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Reduce Tensor functions
  {"cudnnCreateReduceTensorDescriptor",                   {"hipdnnCreateReduceTensorDescriptor",                   "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetReduceTensorDescriptor",                      {"hipdnnSetReduceTensorDescriptor",                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetReduceTensorDescriptor",                      {"hipdnnGetReduceTensorDescriptor",                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyReduceTensorDescriptor",                  {"hipdnnDestroyReduceTensorDescriptor",                  "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetReductionIndicesSize",                        {"hipdnnGetReductionIndicesSize",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetReductionWorkspaceSize",                      {"hipdnnGetReductionWorkspaceSize",                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnReduceTensor",                                   {"hipdnnReduceTensor",                                   "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetTensor",                                      {"hipdnnSetTensor",                                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnScaleTensor",                                    {"hipdnnScaleTensor",                                    "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDeriveNormTensorDescriptor",                     {"hipdnnDeriveNormTensorDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Filter functions
  {"cudnnCreateFilterDescriptor",                         {"hipdnnCreateFilterDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetFilter4dDescriptor",                          {"hipdnnSetFilter4dDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetFilter4dDescriptor",                          {"hipdnnGetFilter4dDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetFilterNdDescriptor",                          {"hipdnnSetFilterNdDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetFilterNdDescriptor",                          {"hipdnnGetFilterNdDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetFilterSizeInBytes",                           {"hipdnnGetFilterSizeInBytes",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnTransformFilter",                                {"hipdnnTransformFilter",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyFilterDescriptor",                        {"hipdnnDestroyFilterDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnReorderFilterAndBias",                           {"hipdnnReorderFilterAndBias",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Convolution functions
  {"cudnnCreateConvolutionDescriptor",                    {"hipdnnCreateConvolutionDescriptor",                    "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetConvolutionMathType",                         {"hipdnnSetConvolutionMathType",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionMathType",                         {"hipdnnGetConvolutionMathType",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetConvolutionGroupCount",                       {"hipdnnSetConvolutionGroupCount",                       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionGroupCount",                       {"hipdnnGetConvolutionGroupCount",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetConvolutionReorderType",                      {"hipdnnSetConvolutionReorderType",                      "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetConvolutionReorderType",                      {"hipdnnGetConvolutionReorderType",                      "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetConvolution2dDescriptor",                     {"hipdnnSetConvolution2dDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolution2dDescriptor",                     {"hipdnnGetConvolution2dDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolution2dForwardOutputDim",               {"hipdnnGetConvolution2dForwardOutputDim",               "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetConvolutionNdDescriptor",                     {"hipdnnSetConvolutionNdDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionNdDescriptor",                     {"hipdnnGetConvolutionNdDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetConvolutionNdForwardOutputDim",               {"hipdnnGetConvolutionNdForwardOutputDim",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyConvolutionDescriptor",                   {"hipdnnDestroyConvolutionDescriptor",                   "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionForwardAlgorithmMaxCount",         {"hipdnnGetConvolutionForwardAlgorithmMaxCount",         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnFindConvolutionForwardAlgorithm",                {"hipdnnFindConvolutionForwardAlgorithm",                "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnFindConvolutionForwardAlgorithmEx",              {"hipdnnFindConvolutionForwardAlgorithmEx",              "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionForwardAlgorithm",                 {"hipdnnGetConvolutionForwardAlgorithm",                 "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  {"cudnnGetConvolutionForwardAlgorithm_v7",              {"hipdnnGetConvolutionForwardAlgorithm_v7",              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetConvolutionForwardWorkspaceSize",             {"hipdnnGetConvolutionForwardWorkspaceSize",             "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnConvolutionForward",                             {"hipdnnConvolutionForward",                             "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnConvolutionBiasActivationForward",               {"hipdnnConvolutionBiasActivationForward",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnConvolutionBackwardBias",                        {"hipdnnConvolutionBackwardBias",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionBackwardFilterAlgorithmMaxCount",  {"hipdnnGetConvolutionBackwardFilterAlgorithmMaxCount",  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnFindConvolutionBackwardFilterAlgorithm",         {"hipdnnFindConvolutionBackwardFilterAlgorithm",         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnFindConvolutionBackwardFilterAlgorithmEx",       {"hipdnnFindConvolutionBackwardFilterAlgorithmEx",       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionBackwardFilterAlgorithm",          {"hipdnnGetConvolutionBackwardFilterAlgorithm",          "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  {"cudnnGetConvolutionBackwardFilterAlgorithm_v7",       {"hipdnnGetConvolutionBackwardFilterAlgorithm_v7",       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetConvolutionBackwardFilterWorkspaceSize",      {"hipdnnGetConvolutionBackwardFilterWorkspaceSize",      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnConvolutionBackwardFilter",                      {"hipdnnConvolutionBackwardFilter",                      "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionBackwardDataAlgorithmMaxCount",    {"hipdnnGetConvolutionBackwardDataAlgorithmMaxCount",    "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnFindConvolutionBackwardDataAlgorithm",           {"hipdnnFindConvolutionBackwardDataAlgorithm",           "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnFindConvolutionBackwardDataAlgorithmEx",         {"hipdnnFindConvolutionBackwardDataAlgorithmEx",         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetConvolutionBackwardDataAlgorithm",            {"hipdnnGetConvolutionBackwardDataAlgorithm",            "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  {"cudnnGetConvolutionBackwardDataAlgorithm_v7",         {"hipdnnGetConvolutionBackwardDataAlgorithm_v7",         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetConvolutionBackwardDataWorkspaceSize",        {"hipdnnGetConvolutionBackwardDataWorkspaceSize",        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnConvolutionBackwardData",                        {"hipdnnConvolutionBackwardData",                        "", CONV_LIB_FUNC, API_DNN, 2}},

  // cuDNN Sortmax functions
  {"cudnnSoftmaxForward",                                 {"hipdnnSoftmaxForward",                                 "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSoftmaxBackward",                                {"hipdnnSoftmaxBackward",                                "", CONV_LIB_FUNC, API_DNN, 2}},

  // cuDNN Pooling functions
  {"cudnnCreatePoolingDescriptor",                        {"hipdnnCreatePoolingDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetPooling2dDescriptor",                         {"hipdnnSetPooling2dDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetPooling2dDescriptor",                         {"hipdnnGetPooling2dDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetPoolingNdDescriptor",                         {"hipdnnSetPoolingNdDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetPoolingNdDescriptor",                         {"hipdnnGetPoolingNdDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetPoolingNdForwardOutputDim",                   {"hipdnnGetPoolingNdForwardOutputDim",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetPooling2dForwardOutputDim",                   {"hipdnnGetPooling2dForwardOutputDim",                   "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyPoolingDescriptor",                       {"hipdnnDestroyPoolingDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnPoolingForward",                                 {"hipdnnPoolingForward",                                 "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnPoolingBackward",                                {"hipdnnPoolingBackward",                                "", CONV_LIB_FUNC, API_DNN, 2}},

  // cuDNN Activation functions
  {"cudnnCreateActivationDescriptor",                     {"hipdnnCreateActivationDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetActivationDescriptor",                        {"hipdnnSetActivationDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetActivationDescriptor",                        {"hipdnnGetActivationDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyActivationDescriptor",                    {"hipdnnDestroyActivationDescriptor",                    "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnActivationForward",                              {"hipdnnActivationForward",                              "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnActivationBackward",                             {"hipdnnActivationBackward",                             "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetActivationDescriptorSwishBeta",               {"hipdnnSetActivationDescriptorSwishBeta",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetActivationDescriptorSwishBeta",               {"hipdnnGetActivationDescriptorSwishBeta",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN LRN functions
  {"cudnnCreateLRNDescriptor",                            {"hipdnnCreateLRNDescriptor",                            "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnSetLRNDescriptor",                               {"hipdnnSetLRNDescriptor",                               "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetLRNDescriptor",                               {"hipdnnGetLRNDescriptor",                               "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyLRNDescriptor",                           {"hipdnnDestroyLRNDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnLRNCrossChannelForward",                         {"hipdnnLRNCrossChannelForward",                         "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnLRNCrossChannelBackward",                        {"hipdnnLRNCrossChannelBackward",                        "", CONV_LIB_FUNC, API_DNN, 2}},

  // cuDNN Divisive Normalization functions
  {"cudnnDivisiveNormalizationForward",                   {"hipdnnDivisiveNormalizationForward",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDivisiveNormalizationBackward",                  {"hipdnnDivisiveNormalizationBackward",                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Batch Normalization functions
  {"cudnnDeriveBNTensorDescriptor",                            {"hipdnnDeriveBNTensorDescriptor",                            "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnBatchNormalizationForwardTraining",                   {"hipdnnBatchNormalizationForwardTraining",                   "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnBatchNormalizationForwardTrainingEx",                 {"hipdnnBatchNormalizationForwardTrainingEx",                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBatchNormalizationForwardInference",                  {"hipdnnBatchNormalizationForwardInference",                  "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnBatchNormalizationBackward",                          {"hipdnnBatchNormalizationBackward",                          "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnBatchNormalizationBackwardEx",                        {"hipdnnBatchNormalizationBackwardEx",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetBatchNormalizationForwardTrainingExWorkspaceSize", {"hipdnnGetBatchNormalizationForwardTrainingExWorkspaceSize", "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetBatchNormalizationBackwardExWorkspaceSize",        {"hipdnnGetBatchNormalizationBackwardExWorkspaceSize",        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetBatchNormalizationTrainingExReserveSpaceSize",     {"hipdnnGetBatchNormalizationTrainingExReserveSpaceSize",     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnNormalizationForwardInference",                       {"hipdnnNormalizationForwardInference",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetNormalizationForwardTrainingWorkspaceSize",        {"hipdnnGetNormalizationForwardTrainingWorkspaceSize",        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetNormalizationBackwardWorkspaceSize",               {"hipdnnGetNormalizationBackwardWorkspaceSize",               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetNormalizationTrainingReserveSpaceSize",            {"hipdnnGetNormalizationTrainingReserveSpaceSize",            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnNormalizationForwardTraining",                        {"hipdnnNormalizationForwardTraining",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnNormalizationBackward",                               {"hipdnnNormalizationBackward",                               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Spatial Transformer functions
  {"cudnnCreateSpatialTransformerDescriptor",             {"hipdnnCreateSpatialTransformerDescriptor",             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetSpatialTransformerNdDescriptor",              {"hipdnnSetSpatialTransformerNdDescriptor",              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroySpatialTransformerDescriptor",            {"hipdnnDestroySpatialTransformerDescriptor",            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSpatialTfGridGeneratorForward",                  {"hipdnnSpatialTfGridGeneratorForward",                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSpatialTfGridGeneratorBackward",                 {"hipdnnSpatialTfGridGeneratorBackward",                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSpatialTfSamplerForward",                        {"hipdnnSpatialTfSamplerForward",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSpatialTfSamplerBackward",                       {"hipdnnSpatialTfSamplerBackward",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Dropout functions
  {"cudnnCreateDropoutDescriptor",                        {"hipdnnCreateDropoutDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyDropoutDescriptor",                       {"hipdnnDestroyDropoutDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDropoutGetStatesSize",                           {"hipdnnDropoutGetStatesSize",                           "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDropoutGetReserveSpaceSize",                     {"hipdnnDropoutGetReserveSpaceSize",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetDropoutDescriptor",                           {"hipdnnSetDropoutDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetDropoutDescriptor",                           {"hipdnnGetDropoutDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnRestoreDropoutDescriptor",                       {"hipdnnRestoreDropoutDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDropoutForward",                                 {"hipdnnDropoutForward",                                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDropoutBackward",                                {"hipdnnDropoutBackward",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN RNN functions
  {"cudnnCreateRNNDescriptor",                            {"hipdnnCreateRNNDescriptor",                            "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnDestroyRNNDescriptor",                           {"hipdnnDestroyRNNDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2}},
  {"cudnnGetRNNForwardInferenceAlgorithmMaxCount",        {"hipdnnGetRNNForwardInferenceAlgorithmMaxCount",        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnFindRNNForwardInferenceAlgorithmEx",             {"hipdnnFindRNNForwardInferenceAlgorithmEx",             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNForwardTrainingAlgorithmMaxCount",         {"hipdnnGetRNNForwardTrainingAlgorithmMaxCount",         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnFindRNNForwardTrainingAlgorithmEx",              {"hipdnnFindRNNForwardTrainingAlgorithmEx",              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNBackwardDataAlgorithmMaxCount",            {"hipdnnGetRNNBackwardDataAlgorithmMaxCount",            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnFindRNNBackwardDataAlgorithmEx",                 {"hipdnnFindRNNBackwardDataAlgorithmEx",                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNBackwardWeightsAlgorithmMaxCount",         {"hipdnnGetRNNBackwardWeightsAlgorithmMaxCount",         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnFindRNNBackwardWeightsAlgorithmEx",              {"hipdnnFindRNNBackwardWeightsAlgorithmEx",              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnCreatePersistentRNNPlan",                        {"hipdnnCreatePersistentRNNPlan",                        "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnSetPersistentRNNPlan",                           {"hipdnnSetPersistentRNNPlan",                           "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnDestroyPersistentRNNPlan",                       {"hipdnnDestroyPersistentRNNPlan",                       "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  // NOTE" hipdnnSetRNNDescriptor has additional argument hipdnnRNNBiasMode_t *biasMode without default value
  {"cudnnSetRNNDescriptor",                               {"hipdnnSetRNNDescriptor",                               "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  // NOTE" hipdnnGetRNNDescriptor has additional argument hipdnnRNNBiasMode_t *biasMode without default value
  {"cudnnGetRNNDescriptor",                               {"hipdnnGetRNNDescriptor",                               "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  {"cudnnGetRNNDescriptor_v6",                            {"hipdnnGetRNNDescriptor_v6",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNDescriptor_v8",                            {"hipdnnGetRNNDescriptor_v8",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetRNNProjectionLayers",                         {"hipdnnSetRNNProjectionLayers",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNProjectionLayers",                         {"hipdnnGetRNNProjectionLayers",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSetRNNAlgorithmDescriptor",                      {"hipdnnSetRNNAlgorithmDescriptor",                      "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSetRNNMatrixMathType",                           {"hipdnnSetRNNMatrixMathType",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNMatrixMathType",                           {"hipdnnGetRNNMatrixMathType",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNWorkspaceSize",                            {"hipdnnGetRNNWorkspaceSize",                            "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnGetRNNTrainingReserveSize",                      {"hipdnnGetRNNTrainingReserveSize",                      "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnGetRNNParamsSize",                               {"hipdnnGetRNNParamsSize",                               "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnGetRNNLinLayerMatrixParams",                     {"hipdnnGetRNNLinLayerMatrixParams",                     "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnGetRNNLinLayerBiasParams",                       {"hipdnnGetRNNLinLayerBiasParams",                       "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnRNNForward",                                     {"hipdnnRNNForward",                                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnRNNForwardInference",                            {"hipdnnRNNForwardInference",                            "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnRNNForwardInferenceEx",                          {"hipdnnRNNForwardInferenceEx",                          "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRNNForwardTraining",                             {"hipdnnRNNForwardTraining",                             "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnRNNForwardTrainingEx",                           {"hipdnnRNNForwardTrainingEx",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRNNBackwardData",                                {"hipdnnRNNBackwardData",                                "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnRNNBackwardData_v8",                             {"hipdnnRNNBackwardData_v8",                             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnRNNBackwardDataEx",                              {"hipdnnRNNBackwardDataEx",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRNNBackwardWeights",                             {"hipdnnRNNBackwardWeights",                             "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnRNNBackwardWeights_v8",                          {"hipdnnRNNBackwardWeights_v8",                          "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnRNNBackwardWeightsEx",                           {"hipdnnRNNBackwardWeightsEx",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSetRNNDescriptor_v5",                            {"hipdnnSetRNNDescriptor_v5",                            "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED | CUDA_REMOVED}},
  {"cudnnSetRNNDescriptor_v6",                            {"hipdnnSetRNNDescriptor_v6",                            "", CONV_LIB_FUNC, API_DNN, 2, CUDA_DEPRECATED}},
  {"cudnnSetRNNDescriptor_v8",                            {"hipdnnSetRNNDescriptor_v8",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetRNNPaddingMode",                              {"hipdnnSetRNNPaddingMode",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNPaddingMode",                              {"hipdnnGetRNNPaddingMode",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnCreateRNNDataDescriptor",                        {"hipdnnCreateRNNDataDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyRNNDataDescriptor",                       {"hipdnnDestroyRNNDataDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetRNNDataDescriptor",                           {"hipdnnSetRNNDataDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetRNNDataDescriptor",                           {"hipdnnGetRNNDataDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetRNNBiasMode",                                 {"hipdnnSetRNNBiasMode",                                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetRNNBiasMode",                                 {"hipdnnGetRNNBiasMode",                                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnBuildRNNDynamic",                                {"hipdnnBuildRNNDynamic",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetRNNTempSpaceSizes",                           {"hipdnnGetRNNTempSpaceSizes",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetRNNWeightSpaceSize",                          {"hipdnnGetRNNWeightSpaceSize",                          "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetRNNWeightParams",                             {"hipdnnGetRNNWeightParams",                             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Connectionist Temporal Classification loss functions
  {"cudnnCreateCTCLossDescriptor",                        {"hipdnnCreateCTCLossDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetCTCLossDescriptor",                           {"hipdnnSetCTCLossDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetCTCLossDescriptor_v8",                        {"hipdnnSetCTCLossDescriptor_v8",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetCTCLossDescriptorEx",                         {"hipdnnSetCTCLossDescriptorEx",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCTCLossDescriptor",                           {"hipdnnGetCTCLossDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCTCLossDescriptor_v8",                        {"hipdnnGetCTCLossDescriptor_v8",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCTCLossDescriptorEx",                         {"hipdnnGetCTCLossDescriptorEx",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyCTCLossDescriptor",                       {"hipdnnDestroyCTCLossDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCTCLoss",                                        {"hipdnnCTCLoss",                                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCTCLoss_v8",                                     {"hipdnnCTCLoss_v8",                                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCTCLossWorkspaceSize",                        {"hipdnnGetCTCLossWorkspaceSize",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetCTCLossWorkspaceSize_v8",                     {"hipdnnGetCTCLossWorkspaceSize_v8",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Algorithm functions
  {"cudnnCreateAlgorithmDescriptor",                      {"hipdnnCreateAlgorithmDescriptor",                      "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSetAlgorithmDescriptor",                         {"hipdnnSetAlgorithmDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetAlgorithmDescriptor",                         {"hipdnnGetAlgorithmDescriptor",                         "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnCopyAlgorithmDescriptor",                        {"hipdnnCopyAlgorithmDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnDestroyAlgorithmDescriptor",                     {"hipdnnDestroyAlgorithmDescriptor",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnCreateAlgorithmPerformance",                     {"hipdnnCreateAlgorithmPerformance",                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSetAlgorithmPerformance",                        {"hipdnnSetAlgorithmPerformance",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetAlgorithmPerformance",                        {"hipdnnGetAlgorithmPerformance",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnDestroyAlgorithmPerformance",                    {"hipdnnDestroyAlgorithmPerformance",                    "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnGetAlgorithmSpaceSize",                          {"hipdnnGetAlgorithmSpaceSize",                          "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnSaveAlgorithm",                                  {"hipdnnSaveAlgorithm",                                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRestoreAlgorithm",                               {"hipdnnRestoreAlgorithm",                               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},

  // cuDNN Clipping functions
  {"cudnnRNNSetClip",                                     {"hipdnnRNNSetClip",                                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRNNSetClip_v8",                                  {"hipdnnRNNSetClip_v8",                                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnRNNGetClip",                                     {"hipdnnRNNGetClip",                                     "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED | CUDA_DEPRECATED}},
  {"cudnnRNNGetClip_v8",                                  {"hipdnnRNNGetClip_v8",                                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Sequence functions
  {"cudnnCreateSeqDataDescriptor",                        {"hipdnnCreateSeqDataDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroySeqDataDescriptor",                       {"hipdnnDestroySeqDataDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetSeqDataDescriptor",                           {"hipdnnSetSeqDataDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetSeqDataDescriptor",                           {"hipdnnGetSeqDataDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Multihead Attention functions
  {"cudnnCreateAttnDescriptor",                           {"hipdnnCreateAttnDescriptor",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyAttnDescriptor",                          {"hipdnnDestroyAttnDescriptor",                          "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetAttnDescriptor",                              {"hipdnnSetAttnDescriptor",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetAttnDescriptor",                              {"hipdnnGetAttnDescriptor",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetMultiHeadAttnBuffers",                        {"hipdnnGetMultiHeadAttnBuffers",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetMultiHeadAttnWeights",                        {"hipdnnGetMultiHeadAttnWeights",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnMultiHeadAttnForward",                           {"hipdnnMultiHeadAttnForward",                           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnMultiHeadAttnBackwardData",                      {"hipdnnMultiHeadAttnBackwardData",                      "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnMultiHeadAttnBackwardWeights",                   {"hipdnnMultiHeadAttnBackwardWeights",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Fuse functions
  {"cudnnCreateFusedOpsConstParamPack",                   {"hipdnnCreateFusedOpsConstParamPack",                   "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyFusedOpsConstParamPack",                  {"hipdnnDestroyFusedOpsConstParamPack",                  "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetFusedOpsConstParamPackAttribute",             {"hipdnnSetFusedOpsConstParamPackAttribute",             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetFusedOpsConstParamPackAttribute",             {"hipdnnGetFusedOpsConstParamPackAttribute",             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCreateFusedOpsVariantParamPack",                 {"hipdnnCreateFusedOpsVariantParamPack",                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyFusedOpsVariantParamPack",                {"hipdnnDestroyFusedOpsVariantParamPack",                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnSetFusedOpsVariantParamPackAttribute",           {"hipdnnSetFusedOpsVariantParamPackAttribute",           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnGetFusedOpsVariantParamPackAttribute",           {"hipdnnGetFusedOpsVariantParamPackAttribute",           "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnCreateFusedOpsPlan",                             {"hipdnnCreateFusedOpsPlan",                             "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnDestroyFusedOpsPlan",                            {"hipdnnDestroyFusedOpsPlan",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnMakeFusedOpsPlan",                               {"hipdnnMakeFusedOpsPlan",                               "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnFusedOpsExecute",                                {"hipdnnFusedOpsExecute",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},

  // cuDNN Backend
  {"cudnnBackendCreateDescriptor",                        {"hipdnnBackendCreateDescriptor",                        "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendDestroyDescriptor",                       {"hipdnnBackendDestroyDescriptor",                       "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendInitialize",                              {"hipdnnBackendInitialize",                              "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendFinalize",                                {"hipdnnBackendFinalize",                                "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendSetAttribute",                            {"hipdnnBackendSetAttribute",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendGetAttribute",                            {"hipdnnBackendGetAttribute",                            "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
  {"cudnnBackendExecute",                                 {"hipdnnBackendExecute",                                 "", CONV_LIB_FUNC, API_DNN, 2, HIP_UNSUPPORTED}},
};

const std::map<llvm::StringRef, cudaAPIversions> CUDA_DNN_FUNCTION_VER_MAP {
  {"cudnnCreateRNNDescriptor",                            {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyRNNDescriptor",                           {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSetRNNDescriptor_v8",                            {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetRNNDescriptor_v8",                            {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnSetRNNDescriptor_v6",                            {CUDNN_60,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNDescriptor_v6",                            {CUDNN_801, CUDNN_801, CUDA_0   }},
  {"cudnnSetRNNMatrixMathType",                           {CUDNN_705, CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNMatrixMathType",                           {CUDNN_713, CUDNN_801, CUDA_0   }},
  {"cudnnSetRNNBiasMode",                                 {CUDNN_750, CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNBiasMode",                                 {CUDNN_750, CUDNN_801, CUDA_0   }},
  {"cudnnRNNSetClip_v8",                                  {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnRNNGetClip_v8",                                  {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnRNNSetClip",                                     {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnRNNGetClip",                                     {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnSetRNNProjectionLayers",                         {CUDNN_713, CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNProjectionLayers",                         {CUDNN_713, CUDNN_801, CUDA_0   }},
  {"cudnnCreatePersistentRNNPlan",                        {CUDNN_60,  CUDNN_801, CUDA_0   }},
  {"cudnnDestroyPersistentRNNPlan",                       {CUDNN_60,  CUDNN_801, CUDA_0   }},
  {"cudnnSetPersistentRNNPlan",                           {CUDNN_60,  CUDNN_801, CUDA_0   }},
  {"cudnnBuildRNNDynamic",                                {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetRNNWorkspaceSize",                            {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNTrainingReserveSize",                      {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNTempSpaceSizes",                           {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetRNNParamsSize",                               {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNWeightSpaceSize",                          {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetRNNLinLayerMatrixParams",                     {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNLinLayerBiasParams",                       {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNWeightParams",                             {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnRNNForwardInference",                            {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnSetRNNPaddingMode",                              {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnGetRNNPaddingMode",                              {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnCreateRNNDataDescriptor",                        {CUDNN_721, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyRNNDataDescriptor",                       {CUDNN_721, CUDA_0,    CUDA_0   }},
  {"cudnnSetRNNDataDescriptor",                           {CUDNN_721, CUDA_0,    CUDA_0   }},
  {"cudnnGetRNNDataDescriptor",                           {CUDNN_721, CUDA_0,    CUDA_0   }},
  {"cudnnRNNForwardInferenceEx",                          {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnRNNForward",                                     {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnSetRNNAlgorithmDescriptor",                      {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetRNNForwardInferenceAlgorithmMaxCount",        {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnFindRNNForwardInferenceAlgorithmEx",             {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnCreateSeqDataDescriptor",                        {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnDestroySeqDataDescriptor",                       {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnSetSeqDataDescriptor",                           {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetSeqDataDescriptor",                           {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnCreateAttnDescriptor",                           {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyAttnDescriptor",                          {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnSetAttnDescriptor",                              {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetAttnDescriptor",                              {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetMultiHeadAttnBuffers",                        {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetMultiHeadAttnWeights",                        {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnMultiHeadAttnForward",                           {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnAdvInferVersionCheck",                           {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnRNNForwardTraining",                             {CUDNN_50,  CUDNN_801, CUDA_0   }},
  {"cudnnRNNBackwardData",                                {CUDNN_50,  CUDNN_802, CUDA_0   }},
  {"cudnnRNNBackwardData_v8",                             {CUDNN_802, CUDA_0,    CUDA_0   }},
  {"cudnnRNNBackwardWeights",                             {CUDNN_50,  CUDNN_802, CUDA_0   }},
  {"cudnnRNNBackwardWeights_v8",                          {CUDNN_802, CUDA_0,    CUDA_0   }},
  {"cudnnRNNForwardTrainingEx",                           {CUDNN_721, CUDNN_801, CUDA_0   }},
  {"cudnnRNNBackwardDataEx",                              {CUDNN_721, CUDNN_802, CUDA_0   }},
  {"cudnnRNNBackwardWeightsEx",                           {CUDNN_721, CUDNN_802, CUDA_0   }},
  {"cudnnGetRNNForwardTrainingAlgorithmMaxCount",         {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnFindRNNForwardTrainingAlgorithmEx",              {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetRNNBackwardDataAlgorithmMaxCount",            {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnFindRNNBackwardDataAlgorithmEx",                 {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetRNNBackwardWeightsAlgorithmMaxCount",         {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnFindRNNBackwardWeightsAlgorithmEx",              {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnMultiHeadAttnBackwardData",                      {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnMultiHeadAttnBackwardWeights",                   {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnCreateCTCLossDescriptor",                        {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnSetCTCLossDescriptor",                           {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnSetCTCLossDescriptorEx",                         {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnSetCTCLossDescriptor_v8",                        {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetCTCLossDescriptor",                           {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetCTCLossDescriptorEx",                         {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetCTCLossDescriptor_v8",                        {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyCTCLossDescriptor",                       {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnCTCLoss",                                        {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnCTCLoss_v8",                                     {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetCTCLossWorkspaceSize",                        {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetCTCLossWorkspaceSize_v8",                     {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnAdvTrainVersionCheck",                           {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendCreateDescriptor",                        {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendDestroyDescriptor",                       {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendInitialize",                              {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendFinalize",                                {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendSetAttribute",                            {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendGetAttribute",                            {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnBackendExecute",                                 {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnCreateConvolutionDescriptor",                    {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyConvolutionDescriptor",                   {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetConvolutionMathType",                         {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionMathType",                         {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnSetConvolutionGroupCount",                       {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionGroupCount",                       {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnSetConvolutionReorderType",                      {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionReorderType",                      {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnSetConvolution2dDescriptor",                     {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolution2dDescriptor",                     {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnSetConvolutionNdDescriptor",                     {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionNdDescriptor",                     {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolution2dForwardOutputDim",               {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionNdForwardOutputDim",               {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionForwardAlgorithmMaxCount",         {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionForwardAlgorithm_v7",              {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionForwardAlgorithm",                {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionForwardAlgorithmEx",              {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnIm2Col",                                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnReorderFilterAndBias",                           {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionForwardWorkspaceSize",             {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnConvolutionForward",                             {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnConvolutionBiasActivationForward",               {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardDataAlgorithmMaxCount",    {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionBackwardDataAlgorithm",           {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionBackwardDataAlgorithmEx",         {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardDataAlgorithm_v7",         {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardDataWorkspaceSize",        {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnConvolutionBackwardData",                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnGetFoldedConvBackwardDataDescriptors",           {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnCnnInferVersionCheck",                           {CUDNN_802, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardFilterAlgorithmMaxCount",  {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionBackwardFilterAlgorithm",         {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnFindConvolutionBackwardFilterAlgorithmEx",       {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardFilterAlgorithm_v7",       {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardFilterWorkspaceSize",      {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnConvolutionBackwardFilter",                      {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnConvolutionBackwardBias",                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateFusedOpsConstParamPack",                   {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyFusedOpsConstParamPack",                  {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnSetFusedOpsConstParamPackAttribute",             {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnGetFusedOpsConstParamPackAttribute",             {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnCreateFusedOpsVariantParamPack",                 {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyFusedOpsVariantParamPack",                {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnSetFusedOpsVariantParamPackAttribute",           {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnGetFusedOpsVariantParamPackAttribute",           {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnCreateFusedOpsPlan",                             {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyFusedOpsPlan",                            {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnMakeFusedOpsPlan",                               {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnFusedOpsExecute",                                {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnCnnTrainVersionCheck",                           {CUDNN_802, CUDA_0,    CUDA_0   }},
  {"cudnnGetVersion",                                     {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetCudartVersion",                               {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetErrorString",                                 {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnQueryRuntimeError",                              {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetProperty",                                    {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnCreate",                                         {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroy",                                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetStream",                                      {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnGetStream",                                      {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateTensorDescriptor",                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnSetTensor4dDescriptor",                          {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetTensor4dDescriptorEx",                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnGetTensor4dDescriptor",                          {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetTensorNdDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnSetTensorNdDescriptorEx",                        {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetTensorNdDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetTensorSizeInBytes",                           {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyTensorDescriptor",                        {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnInitTransformDest",                              {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnCreateTensorTransformDescriptor",                {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnSetTensorTransformDescriptor",                   {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnGetTensorTransformDescriptor",                   {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyTensorTransformDescriptor",               {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnTransformTensor",                                {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnTransformTensorEx",                              {CUDNN_750, CUDA_0,    CUDA_0   }},
  {"cudnnAddTensor",                                      {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateOpTensorDescriptor",                       {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSetOpTensorDescriptor",                          {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnGetOpTensorDescriptor",                          {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyOpTensorDescriptor",                      {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnOpTensor",                                       {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateReduceTensorDescriptor",                   {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnSetReduceTensorDescriptor",                      {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetReduceTensorDescriptor",                      {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyReduceTensorDescriptor",                  {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetReductionIndicesSize",                        {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnGetReductionWorkspaceSize",                      {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnReduceTensor",                                   {CUDNN_60,  CUDA_0,    CUDA_0   }},
  {"cudnnSetTensor",                                      {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnScaleTensor",                                    {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateFilterDescriptor",                         {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetFilter4dDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetFilter4dDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnSetFilterNdDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetFilterNdDescriptor",                          {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetFilterSizeInBytes",                           {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnTransformFilter",                                {CUDNN_760, CUDA_0,    CUDA_0   }},
  {"cudnnDestroyFilterDescriptor",                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSoftmaxForward",                                 {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnCreatePoolingDescriptor",                        {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnSetPooling2dDescriptor",                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetPooling2dDescriptor",                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnSetPoolingNdDescriptor",                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetPoolingNdDescriptor",                         {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetPoolingNdForwardOutputDim",                   {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnGetPooling2dForwardOutputDim",                   {CUDNN_20,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyPoolingDescriptor",                       {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnPoolingForward",                                 {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateActivationDescriptor",                     {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnSetActivationDescriptor",                        {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnGetActivationDescriptor",                        {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyActivationDescriptor",                    {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnActivationForward",                              {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateLRNDescriptor",                            {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnSetLRNDescriptor",                               {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnGetLRNDescriptor",                               {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyLRNDescriptor",                           {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnLRNCrossChannelForward",                         {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnDivisiveNormalizationForward",                   {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnDeriveBNTensorDescriptor",                       {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnBatchNormalizationForwardInference",             {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnDeriveNormTensorDescriptor",                     {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnNormalizationForwardInference",                  {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnCreateSpatialTransformerDescriptor",             {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSetSpatialTransformerNdDescriptor",              {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroySpatialTransformerDescriptor",            {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSpatialTfGridGeneratorForward",                  {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSpatialTfSamplerForward",                        {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateDropoutDescriptor",                        {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDestroyDropoutDescriptor",                       {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDropoutGetStatesSize",                           {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDropoutGetReserveSpaceSize",                     {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSetDropoutDescriptor",                           {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnRestoreDropoutDescriptor",                       {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnGetDropoutDescriptor",                           {CUDNN_705, CUDA_0,    CUDA_0   }},
  {"cudnnDropoutForward",                                 {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnCreateAlgorithmDescriptor",                      {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnSetAlgorithmDescriptor",                         {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetAlgorithmDescriptor",                         {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnCopyAlgorithmDescriptor",                        {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnDestroyAlgorithmDescriptor",                     {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnCreateAlgorithmPerformance",                     {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnSetAlgorithmPerformance",                        {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetAlgorithmPerformance",                        {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnDestroyAlgorithmPerformance",                    {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnGetAlgorithmSpaceSize",                          {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnSaveAlgorithm",                                  {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnRestoreAlgorithm",                               {CUDNN_713, CUDNN_802, CUDA_0   }},
  {"cudnnSetCallback",                                    {CUDNN_713, CUDA_0,    CUDA_0   }},
  {"cudnnGetCallback",                                    {CUDNN_713, CUDA_0,    CUDA_0   }},
  {"cudnnOpsInferVersionCheck",                           {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnSoftmaxBackward",                                {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnPoolingBackward",                                {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnActivationBackward",                             {CUDNN_10,  CUDA_0,    CUDA_0   }},
  {"cudnnLRNCrossChannelBackward",                        {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnDivisiveNormalizationBackward",                  {CUDNN_30,  CUDA_0,    CUDA_0   }},
  {"cudnnGetBatchNormalizationForwardTrainingExWorkspaceSize",       {CUDNN_741, CUDA_0,    CUDA_0   }},
  {"cudnnGetBatchNormalizationBackwardExWorkspaceSize",   {CUDNN_741, CUDA_0,    CUDA_0   }},
  {"cudnnGetBatchNormalizationTrainingExReserveSpaceSize",{CUDNN_741, CUDA_0,    CUDA_0   }},
  {"cudnnBatchNormalizationForwardTraining",              {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnBatchNormalizationForwardTrainingEx",            {CUDNN_741, CUDA_0,    CUDA_0   }},
  {"cudnnBatchNormalizationBackward",                     {CUDNN_40,  CUDA_0,    CUDA_0   }},
  {"cudnnBatchNormalizationBackwardEx",                   {CUDNN_741, CUDA_0,    CUDA_0   }},
  {"cudnnGetNormalizationForwardTrainingWorkspaceSize",   {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetNormalizationBackwardWorkspaceSize",          {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetNormalizationTrainingReserveSpaceSize",       {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnNormalizationForwardTraining",                   {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnNormalizationBackward",                          {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnSpatialTfGridGeneratorBackward",                 {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnSpatialTfSamplerBackward",                       {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnDropoutBackward",                                {CUDNN_50,  CUDA_0,    CUDA_0   }},
  {"cudnnOpsTrainVersionCheck",                           {CUDNN_801, CUDA_0,    CUDA_0   }},
  {"cudnnGetConvolutionBackwardDataAlgorithm",            {CUDNN_30,  CUDNN_765, CUDNN_801}},
  {"cudnnGetConvolutionBackwardFilterAlgorithm",          {CUDNN_30,  CUDNN_765, CUDNN_801}},
  {"cudnnGetConvolutionForwardAlgorithm",                 {CUDNN_20,  CUDNN_765, CUDNN_801}},
  {"cudnnGetRNNDescriptor",                               {CUDNN_705, CUDNN_765, CUDNN_801}},
  {"cudnnSetRNNDescriptor",                               {CUDNN_50,  CUDNN_765, CUDNN_801}},
  {"cudnnSetRNNDescriptor_v5",                            {CUDNN_705, CUDNN_765, CUDNN_801}},
  {"cudnnSetActivationDescriptorSwishBeta",               {CUDNN_820, CUDA_0,    CUDA_0}},
  {"cudnnGetActivationDescriptorSwishBeta",               {CUDNN_820, CUDA_0,    CUDA_0}},
};

const std::map<llvm::StringRef, hipAPIversions> HIP_DNN_FUNCTION_VER_MAP {
};

const std::map<unsigned int, llvm::StringRef> CUDA_DNN_API_SECTION_MAP {
  {1, "CUDNN Data types"},
  {2, "CUDNN Functions"},
};
