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 <cstdarg>
22#include <set>
23#include <string>
24#include <vector>
25
26namespace llvm {
27
28class TargetMachine;
29
30void clearAnnotationCache(const Module *);
31
32bool findOneNVVMAnnotation(const GlobalValue *, const std::string &,
33 unsigned &);
34bool findAllNVVMAnnotation(const GlobalValue *, const std::string &,
35 std::vector<unsigned> &);
36
37bool isTexture(const Value &);
38bool isSurface(const Value &);
39bool isSampler(const Value &);
40bool isImage(const Value &);
41bool isImageReadOnly(const Value &);
42bool isImageWriteOnly(const Value &);
43bool isImageReadWrite(const Value &);
44bool isManaged(const Value &);
45
46std::string getTextureName(const Value &);
47std::string getSurfaceName(const Value &);
48std::string getSamplerName(const Value &);
49
50bool getMaxNTIDx(const Function &, unsigned &);
51bool getMaxNTIDy(const Function &, unsigned &);
52bool getMaxNTIDz(const Function &, unsigned &);
53
54bool getReqNTIDx(const Function &, unsigned &);
55bool getReqNTIDy(const Function &, unsigned &);
56bool getReqNTIDz(const Function &, unsigned &);
57
58bool getMaxClusterRank(const Function &, unsigned &);
59bool getMinCTASm(const Function &, unsigned &);
60bool getMaxNReg(const Function &, unsigned &);
61bool isKernelFunction(const Function &);
62
63bool getAlign(const Function &, unsigned index, unsigned &);
64bool getAlign(const CallInst &, unsigned index, unsigned &);
65Function *getMaybeBitcastedCallee(const CallBase *CB);
66
67// PTX ABI requires all scalar argument/return values to have
68// bit-size as a power of two of at least 32 bits.
69inline unsigned promoteScalarArgumentSize(unsigned size) {
70 if (size <= 32)
71 return 32;
72 else if (size <= 64)
73 return 64;
74 else
75 return size;
76}
77
78bool shouldEmitPTXNoReturn(const Value *V, const TargetMachine &TM);
79
80bool Isv2x16VT(EVT VT);
81}
82
83#endif
84

source code of llvm/lib/Target/NVPTX/NVPTXUtilities.h