[lang] added __global__ storage specifier

This commit is contained in:
Philippe Tillet
2019-09-10 02:01:09 -04:00
parent 060498cad1
commit ef1feefe7f
5 changed files with 14 additions and 14 deletions

View File

@@ -142,7 +142,7 @@ public:
STATIC,
THREAD, // _Thread_local
AUTO,
REGISTER,
GLOBAL,
// STORAGE CLASS SPECIFIER END
BREAK,
@@ -236,7 +236,7 @@ public:
bool IsIdentifier() const { return IDENTIFIER == tag_; }
bool IsEOF() const { return tag_ == Token::END; }
bool IsTypeSpecQual() const { return CONST <= tag_ && tag_ <= ENUM; }
bool IsDecl() const { return CONST <= tag_ && tag_ <= REGISTER; }
bool IsDecl() const { return CONST <= tag_ && tag_ <= GLOBAL; }
static const char* Lexeme(int tag) {
auto iter = tagLexemeMap_.find(tag);
if (iter == tagLexemeMap_.end())

View File

@@ -40,7 +40,7 @@ enum {
S_STATIC = 0x04,
S_THREAD = 0x08,
S_AUTO = 0x10,
S_REGISTER = 0x20,
S_GLOBAL = 0x20,
// Type specifier
T_SIGNED = 0x40,

View File

@@ -1000,6 +1000,10 @@ QualType Parser::ParseDeclSpec(int* storageSpec, int* funcSpec, int* alignSpec)
EnsureAndSetStorageSpec(tok, storageSpec, S_EXTERN);
break;
case Token::GLOBAL:
EnsureAndSetStorageSpec(tok, storageSpec, S_GLOBAL);
break;
case Token::STATIC:
if (!storageSpec)
Error(tok, ERR_FUNC_SPEC);
@@ -1020,10 +1024,6 @@ QualType Parser::ParseDeclSpec(int* storageSpec, int* funcSpec, int* alignSpec)
EnsureAndSetStorageSpec(tok, storageSpec, S_AUTO);
break;
case Token::REGISTER:
EnsureAndSetStorageSpec(tok, storageSpec, S_REGISTER);
break;
// Type qualifier
case Token::CONST: qualSpec |= Qualifier::CONST; break;
case Token::RESTRICT: qualSpec |= Qualifier::RESTRICT; break;

View File

@@ -7,6 +7,7 @@
static MemPoolImp<Token> tokenPool;
const std::unordered_map<std::string, int> Token::kwTypeMap_ {
{ "__global__", Token::GLOBAL },
{ "auto", Token::AUTO },
{ "break", Token::BREAK },
{ "case", Token::CASE },
@@ -30,7 +31,6 @@ const std::unordered_map<std::string, int> Token::kwTypeMap_ {
{ "newaxis", Token::NEWAXIS },
{ "signed", Token::SIGNED },
{ "unsigned", Token::UNSIGNED },
{ "register", Token::REGISTER },
{ "restrict", Token::RESTRICT },
{ "return", Token::RETURN },
{ "short", Token::SHORT },
@@ -121,6 +121,7 @@ const std::unordered_map<int, const char*> Token::tagLexemeMap_ {
{ Token::EXTERN, "extern" },
{ Token::FLOAT, "float" },
{ Token::FOR, "for" },
{ Token::GLOBAL, "global" },
{ Token::GOTO, "goto" },
{ Token::IF, "if" },
{ Token::INLINE, "inline" },
@@ -129,7 +130,6 @@ const std::unordered_map<int, const char*> Token::tagLexemeMap_ {
{ Token::NEWAXIS, "newaxis" },
{ Token::SIGNED, "signed" },
{ Token::UNSIGNED, "unsigned" },
{ Token::REGISTER, "register" },
{ Token::RESTRICT, "restrict" },
{ Token::RETURN, "return" },
{ Token::SHORT, "short" },

View File

@@ -34,11 +34,11 @@ R"(
#define SHAPE_B TK, TN
#endif
void dot(TYPE * A, TYPE * B, TYPE * C,
int M, int N, int K,
int lda __multipleof(8),
int ldb __multipleof(8),
int ldc) {
__global__ void dot(TYPE * A, TYPE * B, TYPE * C,
int M, int N, int K,
int lda __multipleof(8),
int ldb __multipleof(8),
int ldc) {
// prologue
int ridx = get_program_id(0);
int ridy = get_program_id(1);