/**
 * Copyright 2020 Huawei Technologies Co., Ltd
 *
 * 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.
 */


#ifndef AKG_TARGET_INFO_H_
#define AKG_TARGET_INFO_H_

#include <string>

#include <tvm/base.h>
#include <tvm/expr.h>

namespace air {

/*!
 * \brief Memory information of gpu memory region.
 *  Use GpuMemoryInfoNode as its container type
 */
struct GpuMemoryInfoNode : public Node {
  /*! \brief Maximum number of bytes supported in the memory per block */
  int max_bytes_per_block;

  void VisitAttrs(AttrVisitor* v) {
    v->Visit("max_bytes_per_block", &max_bytes_per_block);
  }

  static constexpr const char* _type_key = "GpuMemoryInfo";
  TVM_DECLARE_NODE_TYPE_INFO(GpuMemoryInfoNode, Node);
};

/*! \brief Defines memory info */
TVM_DEFINE_NODE_REF(GpuMemoryInfo, GpuMemoryInfoNode);

/*!
 * \brief get memory info given scope
 * \param scope The scope name.
 * \return info The memory info.
 */
TVM_DLL GpuMemoryInfo GetGpuMemoryInfo(const std::string& scope);

}  // namespace air
#endif  // AKG_TARGET_INFO_H_
