| //===-- NVPTXUtilities - Utilities -----------------------------*- C++ -*-====// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains the declaration of the NVVM specific utility functions. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef NVPTXUTILITIES_H |
| #define NVPTXUTILITIES_H |
| |
| #include "llvm/Function.h" |
| #include "llvm/GlobalVariable.h" |
| #include "llvm/IntrinsicInst.h" |
| #include "llvm/Value.h" |
| #include <cstdarg> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| namespace llvm |
| { |
| |
| #define NVCL_IMAGE2D_READONLY_FUNCNAME "__is_image2D_readonly" |
| #define NVCL_IMAGE3D_READONLY_FUNCNAME "__is_image3D_readonly" |
| |
| bool findOneNVVMAnnotation(const llvm::GlobalValue *, std::string, unsigned &); |
| bool findAllNVVMAnnotation(const llvm::GlobalValue *, std::string, |
| std::vector<unsigned> &); |
| |
| bool isTexture(const llvm::Value &); |
| bool isSurface(const llvm::Value &); |
| bool isSampler(const llvm::Value &); |
| bool isImage(const llvm::Value &); |
| bool isImageReadOnly(const llvm::Value &); |
| bool isImageWriteOnly(const llvm::Value &); |
| |
| std::string getTextureName(const llvm::Value &); |
| std::string getSurfaceName(const llvm::Value &); |
| std::string getSamplerName(const llvm::Value &); |
| |
| bool getMaxNTIDx(const llvm::Function &, unsigned &); |
| bool getMaxNTIDy(const llvm::Function &, unsigned &); |
| bool getMaxNTIDz(const llvm::Function &, unsigned &); |
| |
| bool getReqNTIDx(const llvm::Function &, unsigned &); |
| bool getReqNTIDy(const llvm::Function &, unsigned &); |
| bool getReqNTIDz(const llvm::Function &, unsigned &); |
| |
| bool getMinCTASm(const llvm::Function &, unsigned &); |
| bool isKernelFunction(const llvm::Function &); |
| |
| bool getAlign(const llvm::Function &, unsigned index, unsigned &); |
| bool getAlign(const llvm::CallInst &, unsigned index, unsigned &); |
| |
| bool isBarrierIntrinsic(llvm::Intrinsic::ID); |
| |
| /// make_vector - Helper function which is useful for building temporary vectors |
| /// to pass into type construction of CallInst ctors. This turns a null |
| /// terminated list of pointers (or other value types) into a real live vector. |
| /// |
| template<typename T> |
| inline std::vector<T> make_vector(T A, ...) { |
| va_list Args; |
| va_start(Args, A); |
| std::vector<T> Result; |
| Result.push_back(A); |
| while (T Val = va_arg(Args, T)) |
| Result.push_back(Val); |
| va_end(Args); |
| return Result; |
| } |
| |
| bool isMemorySpaceTransferIntrinsic(Intrinsic::ID id); |
| const Value *skipPointerTransfer(const Value *V, bool ignore_GEP_indices); |
| const Value *skipPointerTransfer(const Value *V, |
| std::set<const Value *> &processed); |
| BasicBlock *getParentBlock(Value *v); |
| Function *getParentFunction(Value *v); |
| void dumpBlock(Value *v, char *blockName); |
| Instruction *getInst(Value *base, char *instName); |
| void dumpInst(Value *base, char *instName); |
| void dumpInstRec(Value *v, std::set<Instruction *> *visited); |
| void dumpInstRec(Value *v); |
| void dumpParent(Value *v); |
| |
| } |
| |
| #endif |