Better code quality for ACC

This commit is contained in:
jpekkila
2020-01-23 18:08:06 +02:00
parent 5de163e8d1
commit ba899211ff
2 changed files with 9 additions and 24 deletions

View File

@@ -1,5 +1,7 @@
%option yylineno %option yylineno
%option noyywrap %option noyywrap
%option noinput
%option nounput
D [0-9] D [0-9]
L [a-zA-Z_] L [a-zA-Z_]

View File

@@ -179,7 +179,7 @@ add_symbol(const SymbolType type, const int tqualifier, const int tspecifier, co
} }
static void static void
print_symbol2(const Symbol* symbol) print_symbol(const Symbol* symbol)
{ {
const char* fields[] = { const char* fields[] = {
translate(symbol->type_qualifier), translate(symbol->type_qualifier),
@@ -193,23 +193,6 @@ print_symbol2(const Symbol* symbol)
fprintf(CUDAHEADER, "%s ", fields[i]); fprintf(CUDAHEADER, "%s ", fields[i]);
} }
static void
print_symbol(const size_t handle)
{
assert(handle < SYMBOL_TABLE_SIZE);
const char* fields[] = {
translate(symbol_table[handle].type_qualifier),
translate(symbol_table[handle].type_specifier),
symbol_table[handle].identifier,
};
const size_t num_fields = sizeof(fields) / sizeof(fields[0]);
for (size_t i = 0; i < num_fields; ++i)
if (fields[i])
printf("%s ", fields[i]);
}
static inline void static inline void
print_symbol_table(void) print_symbol_table(void)
{ {
@@ -291,7 +274,7 @@ traverse(const ASTNode* node)
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer); const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
if (symbol && symbol->type_qualifier == KERNEL) { if (symbol && symbol->type_qualifier == KERNEL) {
fprintf(CUDAHEADER, "GEN_KERNEL_BUILTIN_VARIABLES_BOILERPLATE();"); fprintf(CUDAHEADER, "GEN_KERNEL_BUILTIN_VARIABLES_BOILERPLATE();");
for (int i = 0; i < num_symbols[current_nest]; ++i) { for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
if (symbol_table[i].type_qualifier == IN) { if (symbol_table[i].type_qualifier == IN) {
fprintf(CUDAHEADER, "const %sData %s = READ(handle_%s);\n", fprintf(CUDAHEADER, "const %sData %s = READ(handle_%s);\n",
translate(symbol_table[i].type_specifier), translate(symbol_table[i].type_specifier),
@@ -388,7 +371,7 @@ traverse(const ASTNode* node)
} }
} }
else { else {
print_symbol2(&symbol_table[num_symbols[current_nest] - 1]); print_symbol(&symbol_table[num_symbols[current_nest] - 1]);
} }
} }
else if (tqualifier == IN || tqualifier == OUT) { // Global in/out declarator else if (tqualifier == IN || tqualifier == OUT) { // Global in/out declarator
@@ -399,7 +382,7 @@ traverse(const ASTNode* node)
} }
else { else {
// Do a regular translation // Do a regular translation
print_symbol2(&symbol_table[num_symbols[current_nest] - 1]); print_symbol(&symbol_table[num_symbols[current_nest] - 1]);
} }
if (node->rhs->type == NODE_ARRAY_DECLARATION) { if (node->rhs->type == NODE_ARRAY_DECLARATION) {
@@ -468,7 +451,7 @@ traverse(const ASTNode* node)
if (node->parent->type == NODE_FUNCTION_DEFINITION) { if (node->parent->type == NODE_FUNCTION_DEFINITION) {
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer); const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
if (symbol && symbol->type_qualifier == KERNEL) { if (symbol && symbol->type_qualifier == KERNEL) {
for (int i = 0; i < num_symbols[current_nest]; ++i) { for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
if (symbol_table[i].type_qualifier == OUT) { if (symbol_table[i].type_qualifier == OUT) {
fprintf(CUDAHEADER, "WRITE_OUT(handle_%s, %s);\n", fprintf(CUDAHEADER, "WRITE_OUT(handle_%s, %s);\n",
symbol_table[i].identifier, symbol_table[i].identifier); symbol_table[i].identifier, symbol_table[i].identifier);
@@ -639,7 +622,7 @@ generate_header(void)
static void static void
generate_library_hooks(void) generate_library_hooks(void)
{ {
for (int i = 0; i < num_symbols[current_nest]; ++i) { for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
if (symbol_table[i].type_qualifier == KERNEL) { if (symbol_table[i].type_qualifier == KERNEL) {
fprintf(CUDAHEADER, "GEN_DEVICE_FUNC_HOOK(%s)\n", symbol_table[i].identifier); fprintf(CUDAHEADER, "GEN_DEVICE_FUNC_HOOK(%s)\n", symbol_table[i].identifier);
} }
@@ -647,7 +630,7 @@ generate_library_hooks(void)
} }
int int
main(int argc, char** argv) main(void)
{ {
root = astnode_create(NODE_UNKNOWN, NULL, NULL); root = astnode_create(NODE_UNKNOWN, NULL, NULL);