Index: llvm/lib/Target/NVPTX/MCTargetDesc/CMakeLists.txt =================================================================== --- llvm/lib/Target/NVPTX/MCTargetDesc/CMakeLists.txt +++ llvm/lib/Target/NVPTX/MCTargetDesc/CMakeLists.txt @@ -1,4 +1,5 @@ add_llvm_library(LLVMNVPTXDesc + NVPTXBaseInfo.cpp NVPTXMCAsmInfo.cpp NVPTXMCTargetDesc.cpp - ) +) Index: llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.h =================================================================== --- llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.h +++ llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.h @@ -52,28 +52,10 @@ PROPERTY_LAST }; -const unsigned AnnotationNameLen = 9; // length of each annotation name -const char PropertyAnnotationNames[PROPERTY_LAST + 1][AnnotationNameLen + 1] = { - "maxntidx", // PROPERTY_MAXNTID_X - "maxntidy", // PROPERTY_MAXNTID_Y - "maxntidz", // PROPERTY_MAXNTID_Z - "reqntidx", // PROPERTY_REQNTID_X - "reqntidy", // PROPERTY_REQNTID_Y - "reqntidz", // PROPERTY_REQNTID_Z - "minctasm", // PROPERTY_MINNCTAPERSM - "texture", // PROPERTY_ISTEXTURE - "surface", // PROPERTY_ISSURFACE - "sampler", // PROPERTY_ISSAMPLER - "rdoimage", // PROPERTY_ISREADONLY_IMAGE_PARAM - "wroimage", // PROPERTY_ISWRITEONLY_IMAGE_PARAM - "rdwrimage", // PROPERTY_ISREADWRITE_IMAGE_PARAM - "kernel", // PROPERTY_ISKERNEL_FUNCTION - "align", // PROPERTY_ALIGN - "managed", // PROPERTY_MANAGED - - // last property - "proplast", // PROPERTY_LAST -}; +/// Get the PTX directive string for a PropertyAnnotation. +/// +/// The given annotation must be in the range [0, PROPERTY_LAST). +const char *PropertyAnnotationName(PropertyAnnotation); // name of named metadata used for global annotations #if defined(__GNUC__) Index: llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.cpp =================================================================== --- /dev/null +++ llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.cpp @@ -0,0 +1,52 @@ +//===-- NVPTXBaseInfo.cpp - Top-level definitions for NVPTX -----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "NVPTXBaseInfo.h" +#include "llvm/Support/ErrorHandling.h" + +namespace llvm { +const char *PropertyAnnotationName(PropertyAnnotation A) { + switch (A) { + case PROPERTY_MAXNTID_X: + return "maxntidx"; + case PROPERTY_MAXNTID_Y: + return "maxntidy"; + case PROPERTY_MAXNTID_Z: + return "maxntidz"; + case PROPERTY_REQNTID_X: + return "reqntidx"; + case PROPERTY_REQNTID_Y: + return "reqntidy"; + case PROPERTY_REQNTID_Z: + return "reqntidz"; + case PROPERTY_MINNCTAPERSM: + return "minctasm"; + case PROPERTY_ISTEXTURE: + return "texture"; + case PROPERTY_ISSURFACE: + return "surface"; + case PROPERTY_ISSAMPLER: + return "sampler"; + case PROPERTY_ISREADONLY_IMAGE_PARAM: + return "rdoimage"; + case PROPERTY_ISWRITEONLY_IMAGE_PARAM: + return "wroimage"; + case PROPERTY_ISREADWRITE_IMAGE_PARAM: + return "rdwrimage"; + case PROPERTY_ISKERNEL_FUNCTION: + return "kernel"; + case PROPERTY_ALIGN: + return "align"; + case PROPERTY_MANAGED: + return "managed"; + default: + llvm_unreachable("Invalid PropertyAnnotation"); + } +} +} // namespace llvm Index: llvm/lib/Target/NVPTX/NVPTXUtilities.cpp =================================================================== --- llvm/lib/Target/NVPTX/NVPTXUtilities.cpp +++ llvm/lib/Target/NVPTX/NVPTXUtilities.cpp @@ -131,7 +131,7 @@ if (const GlobalValue *gv = dyn_cast(&val)) { unsigned annot; if (llvm::findOneNVVMAnnotation( - gv, llvm::PropertyAnnotationNames[llvm::PROPERTY_ISTEXTURE], + gv, llvm::PropertyAnnotationName(llvm::PROPERTY_ISTEXTURE), annot)) { assert((annot == 1) && "Unexpected annotation on a texture symbol"); return true; @@ -144,7 +144,7 @@ if (const GlobalValue *gv = dyn_cast(&val)) { unsigned annot; if (llvm::findOneNVVMAnnotation( - gv, llvm::PropertyAnnotationNames[llvm::PROPERTY_ISSURFACE], + gv, llvm::PropertyAnnotationName(llvm::PROPERTY_ISSURFACE), annot)) { assert((annot == 1) && "Unexpected annotation on a surface symbol"); return true; @@ -157,7 +157,7 @@ if (const GlobalValue *gv = dyn_cast(&val)) { unsigned annot; if (llvm::findOneNVVMAnnotation( - gv, llvm::PropertyAnnotationNames[llvm::PROPERTY_ISSAMPLER], + gv, llvm::PropertyAnnotationName(llvm::PROPERTY_ISSAMPLER), annot)) { assert((annot == 1) && "Unexpected annotation on a sampler symbol"); return true; @@ -167,7 +167,7 @@ const Function *func = arg->getParent(); std::vector annot; if (llvm::findAllNVVMAnnotation( - func, llvm::PropertyAnnotationNames[llvm::PROPERTY_ISSAMPLER], + func, llvm::PropertyAnnotationName(llvm::PROPERTY_ISSAMPLER), annot)) { if (is_contained(annot, arg->getArgNo())) return true; @@ -180,10 +180,10 @@ if (const Argument *arg = dyn_cast(&val)) { const Function *func = arg->getParent(); std::vector annot; - if (llvm::findAllNVVMAnnotation(func, - llvm::PropertyAnnotationNames[ - llvm::PROPERTY_ISREADONLY_IMAGE_PARAM], - annot)) { + if (llvm::findAllNVVMAnnotation( + func, + llvm::PropertyAnnotationName(llvm::PROPERTY_ISREADONLY_IMAGE_PARAM), + annot)) { if (is_contained(annot, arg->getArgNo())) return true; } @@ -196,8 +196,8 @@ const Function *func = arg->getParent(); std::vector annot; if (llvm::findAllNVVMAnnotation(func, - llvm::PropertyAnnotationNames[ - llvm::PROPERTY_ISWRITEONLY_IMAGE_PARAM], + llvm::PropertyAnnotationName( + llvm::PROPERTY_ISWRITEONLY_IMAGE_PARAM), annot)) { if (is_contained(annot, arg->getArgNo())) return true; @@ -211,8 +211,8 @@ const Function *func = arg->getParent(); std::vector annot; if (llvm::findAllNVVMAnnotation(func, - llvm::PropertyAnnotationNames[ - llvm::PROPERTY_ISREADWRITE_IMAGE_PARAM], + llvm::PropertyAnnotationName( + llvm::PROPERTY_ISREADWRITE_IMAGE_PARAM), annot)) { if (is_contained(annot, arg->getArgNo())) return true; @@ -229,9 +229,8 @@ bool llvm::isManaged(const llvm::Value &val) { if(const GlobalValue *gv = dyn_cast(&val)) { unsigned annot; - if(llvm::findOneNVVMAnnotation(gv, - llvm::PropertyAnnotationNames[llvm::PROPERTY_MANAGED], - annot)) { + if (llvm::findOneNVVMAnnotation( + gv, llvm::PropertyAnnotationName(llvm::PROPERTY_MANAGED), annot)) { assert((annot == 1) && "Unexpected annotation on a managed symbol"); return true; } @@ -256,43 +255,43 @@ bool llvm::getMaxNTIDx(const Function &F, unsigned &x) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_MAXNTID_X], x)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_MAXNTID_X), x)); } bool llvm::getMaxNTIDy(const Function &F, unsigned &y) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_MAXNTID_Y], y)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_MAXNTID_Y), y)); } bool llvm::getMaxNTIDz(const Function &F, unsigned &z) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_MAXNTID_Z], z)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_MAXNTID_Z), z)); } bool llvm::getReqNTIDx(const Function &F, unsigned &x) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_REQNTID_X], x)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_REQNTID_X), x)); } bool llvm::getReqNTIDy(const Function &F, unsigned &y) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_REQNTID_Y], y)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_REQNTID_Y), y)); } bool llvm::getReqNTIDz(const Function &F, unsigned &z) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_REQNTID_Z], z)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_REQNTID_Z), z)); } bool llvm::getMinCTASm(const Function &F, unsigned &x) { return (llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_MINNCTAPERSM], x)); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_MINNCTAPERSM), x)); } bool llvm::isKernelFunction(const Function &F) { unsigned x = 0; bool retval = llvm::findOneNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_ISKERNEL_FUNCTION], x); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_ISKERNEL_FUNCTION), x); if (!retval) { // There is no NVVM metadata, check the calling convention return F.getCallingConv() == llvm::CallingConv::PTX_Kernel; @@ -303,7 +302,7 @@ bool llvm::getAlign(const Function &F, unsigned index, unsigned &align) { std::vector Vs; bool retval = llvm::findAllNVVMAnnotation( - &F, llvm::PropertyAnnotationNames[llvm::PROPERTY_ALIGN], Vs); + &F, llvm::PropertyAnnotationName(llvm::PROPERTY_ALIGN), Vs); if (!retval) return false; for (int i = 0, e = Vs.size(); i < e; i++) {