1//===-- NVPTXUtilities - Utilities -----------------------------*- C++ -*-====//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the declaration of the NVVM specific utility functions.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXUTILITIES_H
14#define LLVM_LIB_TARGET_NVPTX_NVPTXUTILITIES_H
15
16#include "llvm/CodeGen/ValueTypes.h"
17#include "llvm/IR/Function.h"
18#include "llvm/IR/GlobalVariable.h"
19#include "llvm/IR/IntrinsicInst.h"
20#include "llvm/IR/Value.h"
21#include "llvm/Support/Alignment.h"
22#include <cstdarg>
23#include <set>
24#include <string>
25#include <vector>
26
27namespace llvm {
28
29class TargetMachine;
30
31void clearAnnotationCache(const Module *);
32
33bool findOneNVVMAnnotation(const GlobalValue *, const std::string &,
34 unsigned &);
35bool findAllNVVMAnnotation(const GlobalValue *, const std::string &,
36 std::vector<unsigned> &);
37
38bool isTexture(const Value &);
39bool isSurface(const Value &);
40bool isSampler(const Value &);
41bool isImage(const Value &);
42bool isImageReadOnly(const Value &);
43bool isImageWriteOnly(const Value &);
44bool isImageReadWrite(const Value &);
45bool isManaged(const Value &);
46
47std::string getTextureName(const Value &);
48std::string getSurfaceName(const Value &);
49std::string getSamplerName(const Value &);
50
51std::optional<unsigned> getMaxNTIDx(const Function &);
52std::optional<unsigned> getMaxNTIDy(const Function &);
53std::optional<unsigned> getMaxNTIDz(const Function &);
54std::optional<unsigned> getMaxNTID(const Function &F);
55
56std::optional<unsigned> getReqNTIDx(const Function &);
57std::optional<unsigned> getReqNTIDy(const Function &);
58std::optional<unsigned> getReqNTIDz(const Function &);
59std::optional<unsigned> getReqNTID(const Function &);
60
61bool getMaxClusterRank(const Function &, unsigned &);
62bool getMinCTASm(const Function &, unsigned &);
63bool getMaxNReg(const Function &, unsigned &);
64bool isKernelFunction(const Function &);
65bool isParamGridConstant(const Value &);
66
67MaybeAlign getAlign(const Function &, unsigned);
68MaybeAlign getAlign(const CallInst &, unsigned);
69Function *getMaybeBitcastedCallee(const CallBase *CB);
70
71// PTX ABI requires all scalar argument/return values to have
72// bit-size as a power of two of at least 32 bits.
73inline unsigned promoteScalarArgumentSize(unsigned size) {
74 if (size <= 32)
75 return 32;
76 else if (size <= 64)
77 return 64;
78 else
79 return size;
80}
81
82bool shouldEmitPTXNoReturn(const Value *V, const TargetMachine &TM);
83
84bool Isv2x16VT(EVT VT);
85}
86
87#endif
88