1239310Sdim//===-- NVPTXBaseInfo.h - Top-level definitions for NVPTX -------*- C++ -*-===//
2239310Sdim//
3239310Sdim//                     The LLVM Compiler Infrastructure
4239310Sdim//
5239310Sdim// This file is distributed under the University of Illinois Open Source
6239310Sdim// License. See LICENSE.TXT for details.
7239310Sdim//
8239310Sdim//===----------------------------------------------------------------------===//
9239310Sdim//
10239310Sdim// This file contains small standalone helper functions and enum definitions for
11239310Sdim// the NVPTX target useful for the compiler back-end and the MC libraries.
12239310Sdim// As such, it deliberately does not include references to LLVM core
13239310Sdim// code gen types, passes, etc..
14239310Sdim//
15239310Sdim//===----------------------------------------------------------------------===//
16239310Sdim
17239310Sdim#ifndef NVPTXBASEINFO_H
18239310Sdim#define NVPTXBASEINFO_H
19239310Sdim
20239310Sdimnamespace llvm {
21239310Sdim
22239310Sdimenum AddressSpace {
23239310Sdim  ADDRESS_SPACE_GENERIC = 0,
24239310Sdim  ADDRESS_SPACE_GLOBAL = 1,
25239310Sdim  ADDRESS_SPACE_SHARED = 3,
26239310Sdim  ADDRESS_SPACE_CONST = 4,
27239310Sdim  ADDRESS_SPACE_LOCAL = 5,
28239310Sdim
29239310Sdim  // NVVM Internal
30239310Sdim  ADDRESS_SPACE_PARAM = 101
31239310Sdim};
32239310Sdim
33239310Sdimenum PropertyAnnotation {
34239310Sdim  PROPERTY_MAXNTID_X = 0,
35239310Sdim  PROPERTY_MAXNTID_Y,
36239310Sdim  PROPERTY_MAXNTID_Z,
37239310Sdim  PROPERTY_REQNTID_X,
38239310Sdim  PROPERTY_REQNTID_Y,
39239310Sdim  PROPERTY_REQNTID_Z,
40239310Sdim  PROPERTY_MINNCTAPERSM,
41239310Sdim  PROPERTY_ISTEXTURE,
42239310Sdim  PROPERTY_ISSURFACE,
43239310Sdim  PROPERTY_ISSAMPLER,
44239310Sdim  PROPERTY_ISREADONLY_IMAGE_PARAM,
45239310Sdim  PROPERTY_ISWRITEONLY_IMAGE_PARAM,
46239310Sdim  PROPERTY_ISKERNEL_FUNCTION,
47239310Sdim  PROPERTY_ALIGN,
48239310Sdim
49239310Sdim  // last property
50239310Sdim  PROPERTY_LAST
51239310Sdim};
52239310Sdim
53239310Sdimconst unsigned AnnotationNameLen = 8; // length of each annotation name
54249423Sdimconst char PropertyAnnotationNames[PROPERTY_LAST + 1][AnnotationNameLen + 1] = {
55249423Sdim  "maxntidx",                         // PROPERTY_MAXNTID_X
56249423Sdim  "maxntidy",                         // PROPERTY_MAXNTID_Y
57249423Sdim  "maxntidz",                         // PROPERTY_MAXNTID_Z
58249423Sdim  "reqntidx",                         // PROPERTY_REQNTID_X
59249423Sdim  "reqntidy",                         // PROPERTY_REQNTID_Y
60249423Sdim  "reqntidz",                         // PROPERTY_REQNTID_Z
61249423Sdim  "minctasm",                         // PROPERTY_MINNCTAPERSM
62249423Sdim  "texture",                          // PROPERTY_ISTEXTURE
63249423Sdim  "surface",                          // PROPERTY_ISSURFACE
64249423Sdim  "sampler",                          // PROPERTY_ISSAMPLER
65249423Sdim  "rdoimage",                         // PROPERTY_ISREADONLY_IMAGE_PARAM
66249423Sdim  "wroimage",                         // PROPERTY_ISWRITEONLY_IMAGE_PARAM
67249423Sdim  "kernel",                           // PROPERTY_ISKERNEL_FUNCTION
68249423Sdim  "align",                            // PROPERTY_ALIGN
69239310Sdim
70249423Sdim              // last property
71249423Sdim  "proplast", // PROPERTY_LAST
72239310Sdim};
73239310Sdim
74239310Sdim// name of named metadata used for global annotations
75239310Sdim#if defined(__GNUC__)
76239310Sdim// As this is declared to be static but some of the .cpp files that
77239310Sdim// include NVVM.h do not use this array, gcc gives a warning when
78239310Sdim// compiling those .cpp files, hence __attribute__((unused)).
79239310Sdim__attribute__((unused))
80239310Sdim#endif
81249423Sdim    static const char *NamedMDForAnnotations = "nvvm.annotations";
82239310Sdim
83239310Sdim}
84239310Sdim
85239310Sdim#endif
86