//===----- CGHLSLRuntime.h - Interface to HLSL Runtimes -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This provides an abstract class for HLSL code generation.  Concrete
// subclasses of this implement code generation for specific HLSL
// runtime libraries.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_LIB_CODEGEN_CGHLSLRUNTIME_H
#define LLVM_CLANG_LIB_CODEGEN_CGHLSLRUNTIME_H

#include "clang/Basic/HLSLRuntime.h"

namespace llvm {
class Value;
class GlobalVariable;
class Function;
} // namespace llvm
namespace clang {
class CallExpr;
class Type;
class VarDecl;

class FunctionDecl;

namespace CodeGen {

class CodeGenModule;

class CGHLSLRuntime {
protected:
  CodeGenModule &CGM;
  uint32_t ResourceCounters[static_cast<uint32_t>(
      hlsl::ResourceClass::NumClasses)] = {0};

public:
  CGHLSLRuntime(CodeGenModule &CGM) : CGM(CGM) {}
  virtual ~CGHLSLRuntime() {}

  void annotateHLSLResource(const VarDecl *D, llvm::GlobalVariable *GV);

  void finishCodeGen();

  void setHLSLFunctionAttributes(llvm::Function *, const FunctionDecl *);
};

} // namespace CodeGen
} // namespace clang

#endif
