added method for unparsing an expression in Fortran or C

This commit is contained in:
ALEXks
2024-04-09 10:36:46 +03:00
parent aa0a464ead
commit 82de4d6f03
7 changed files with 40 additions and 72 deletions

View File

@@ -3438,7 +3438,7 @@ SgSymbol *hasSameNameAsSource(SgSymbol *symb)
return el->lhs()->symbol();
if (el=isInUsesListByChar(symb->identifier()))
return el->lhs()->symbol();
for (el = dvm_parallel_dir->expr(2); el; el = el->rhs())
for (el = dvm_parallel_dir ? dvm_parallel_dir->expr(2) : NULL; el; el = el->rhs())
if (!strcmp(el->lhs()->symbol()->identifier(), symb->identifier()))
return el->lhs()->symbol();
reduction_operation_list *rl;
@@ -3451,69 +3451,6 @@ SgSymbol *hasSameNameAsSource(SgSymbol *symb)
}
return NULL;
}
/*
void RenamingCudaFunctionVariables(SgStatement *first, SgStatement *last, SgSymbol *k_symb)
{ // replacing kernel names to avoid conflicts with C language keywords and intrinsic function names
SgSymbol *sl;
for (sl=k_symb->next(); sl; sl=sl->next())
{
SgSymbol *s_symb = hasSameNameAsSource(sl);
if (s_symb)
{
replaceSymbInStmts(first->thebif, last->thebif, s_symb->thesymb, sl->thesymb);
ChangeSymbolName(sl);
}
}
}
void ReplacingVariablesInTranslatedCode(SgStatement *first, SgSymbol *k_symb)
{ // replacing source symbols by kernel symbols of the same name
SgSymbol *sl;
for (sl=k_symb->next(); sl; sl=sl->next())
{
if (sl->scope() != kernel_st || sl->variant() != VARIABLE_NAME)
continue;
SgSymbol *s_symb = hasSameNameAsSource(sl);
if (s_symb)
{ //printf("::: %s id:%d variant:%d\n",sl->identifier(), sl->id(), sl->variant());
//replaceSymbInStmtsSameName(first->thebif, last->thebif, s_symb->thesymb, sl->thesymb);
first->replaceSymbBySymbSameName(s_symb,sl);
}
}
}
void RenamingCudaFunctionVariables(SgStatement *first, SgStatement *first_body, SgSymbol *k_symb, int replace_flag)
{ // replacing kernel names to avoid conflicts with C language keywords and intrinsic function names
if (first_body)
ReplacingVariablesInTranslatedCode(first_body, k_symb);
for (sl=k_symb->next(); sl; sl=sl->next())
{
if (sl->scope() != kernel_st || sl->variant() != VARIABLE_NAME)
continue;
SgSymbol *s_symb = hasSameNameAsSource(sl);
if (s_symb)
{
if (replace_flag)
first->replaceSymbBySymb(s_symb,sl);
//replaceSymbInStmts(first->thebif, last->thebif, s_symb->thesymb, sl->thesymb);
ChangeSymbolName(sl);
}
}
}
int isCudaVariable(SgSymbol *symb)
{
if(!strcmp(symb->identifier(), "blocks")) return 1;
if(!strcmp(symb->identifier(), "threads")) return 1;
if(!strcmp(symb->identifier(), "threadIdx")) return 1;
if(!strcmp(symb->identifier(), "blockIdx")) return 1;
if(!strcmp(symb->identifier(), "blockDim")) return 1;
if(!strcmp(symb->identifier(), "gridDim")) return 1;
return 0;
}
*/
int sameVariableName(SgSymbol *symb1, SgSymbol *symb2)
{
@@ -3530,8 +3467,6 @@ void replaceSymbolSameNameInExpr(SgExpression *expr, SgSymbol *symb, SgSymbol *s
//SgRecordRefExp *re;
if (!expr || !symb || !s_new)
return;
//if (isSgRecordRefExp(expr)) //&& isCudaVariable(re->recordName()))
// replaceSymbolSameNameInExpr(expr->lhs(), symb, s_new);
if (expr->symbol())
if (sameVariableName(expr->symbol(), symb))
expr->setSymbol(s_new);
@@ -3567,8 +3502,6 @@ void RenamingCudaFunctionVariables(SgStatement *first, SgSymbol *k_symb, int rep
{
if (replace_flag)
replaceVariableSymbSameNameInStatements(first,first->lastNodeOfStmt(), s_symb, sl, replace_flag);
// first->replaceSymbBySymb(s_symb,sl);
//replaceSymbInStmts(first->thebif, last->thebif, s_symb->thesymb, sl->thesymb);
ChangeSymbolName(sl);
}
}