//===-- NVVMProperties - NVVM annotation utilities -------------*- 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 file contains declarations for NVVM attribute and metadata query // utilities. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_NVPTX_NVVMPROPERTIES_H #define LLVM_LIB_TARGET_NVPTX_NVVMPROPERTIES_H #include "llvm/ADT/SmallVector.h" #include "llvm/IR/CallingConv.h" #include "llvm/IR/Function.h" #include "llvm/Support/Alignment.h" #include #include namespace llvm { class Argument; class CallInst; class GlobalVariable; class Module; class Value; void clearAnnotationCache(const Module *); inline bool isKernelFunction(const Function &F) { return F.getCallingConv() == CallingConv::PTX_Kernel; } enum class PTXOpaqueType { None, Texture, Surface, Sampler }; PTXOpaqueType getPTXOpaqueType(const GlobalVariable &); PTXOpaqueType getPTXOpaqueType(const Argument &); PTXOpaqueType getPTXOpaqueType(const Value &); bool isManaged(const Value &); SmallVector getMaxNTID(const Function &); SmallVector getReqNTID(const Function &); SmallVector getClusterDim(const Function &); std::optional getOverallMaxNTID(const Function &); std::optional getOverallReqNTID(const Function &); std::optional getOverallClusterRank(const Function &); std::optional getMaxClusterRank(const Function &); std::optional getMinCTASm(const Function &); std::optional getMaxNReg(const Function &); bool hasBlocksAreClusters(const Function &); bool isParamGridConstant(const Argument &); inline MaybeAlign getAlign(const Function &F, unsigned Index) { return F.getAttributes().getAttributes(Index).getStackAlignment(); } MaybeAlign getAlign(const CallInst &, unsigned); } // namespace llvm #endif