added convertation to sapfor

This commit is contained in:
ALEXks
2024-02-28 17:38:02 +03:00
parent 4386eb7041
commit 8a92f305f4
7 changed files with 637 additions and 146 deletions

View File

@@ -1793,6 +1793,7 @@ bool SgStatement::consistentCheckIsActivated = false;
bool SgStatement::deprecatedCheck = false;
std::string SgStatement::currProcessFile = "";
int SgStatement::currProcessLine = -1;
bool SgStatement::sapfor_regime = false;
void SgStatement::checkConsistence()
{
@@ -4497,76 +4498,78 @@ SgExecutableStatement* isSgExecutableStatement(SgStatement *pt)
return NULL;
if (!isADeclBif(BIF_CODE(pt->thebif)))
{
#if __SPF
const int var = pt->variant();
if (var == CONTROL_END)
if (SgStatement::isSapforRegime())
{
SgStatement *cp = pt->controlParent();
if (cp->variant() == PROG_HEDR || cp->variant() == PROC_HEDR || cp->variant() == FUNC_HEDR)
const int var = pt->variant();
if (var == CONTROL_END)
{
SgStatement* cpcp = cp->controlParent();
if (cpcp && cpcp->variant() == INTERFACE_STMT)
return NULL;
SgStatement* cp = pt->controlParent();
if (cp->variant() == PROG_HEDR || cp->variant() == PROC_HEDR || cp->variant() == FUNC_HEDR)
{
SgStatement* cpcp = cp->controlParent();
if (cpcp && cpcp->variant() == INTERFACE_STMT)
return NULL;
else
return (SgExecutableStatement*)pt;
}
else
return (SgExecutableStatement*)pt;
return isSgExecutableStatement(cp);
}
else if (var == DVM_INHERIT_DIR || var == DVM_ALIGN_DIR || var == DVM_DYNAMIC_DIR ||
var == DVM_DISTRIBUTE_DIR || var == DVM_VAR_DECL || var == DVM_SHADOW_DIR ||
var == DVM_HEAP_DIR || var == DVM_CONSISTENT_DIR || var == DVM_POINTER_DIR ||
var == HPF_TEMPLATE_STAT || var == HPF_PROCESSORS_STAT || var == DVM_TASK_DIR ||
var == DVM_INDIRECT_GROUP_DIR || var == DVM_REMOTE_GROUP_DIR || var == DVM_REDUCTION_GROUP_DIR ||
var == DVM_CONSISTENT_GROUP_DIR || var == DVM_ASYNCID_DIR || var == ACC_ROUTINE_DIR)
return NULL;
else if (var == SPF_ANALYSIS_DIR || var == FORMAT_STAT)
return isSgExecutableStatement(pt->lexNext());
else
return isSgExecutableStatement(cp);
return (SgExecutableStatement*)pt;
}
else if (var == DVM_INHERIT_DIR || var == DVM_ALIGN_DIR || var == DVM_DYNAMIC_DIR ||
var == DVM_DISTRIBUTE_DIR || var == DVM_VAR_DECL || var == DVM_SHADOW_DIR ||
var == DVM_HEAP_DIR || var == DVM_CONSISTENT_DIR || var == DVM_POINTER_DIR ||
var == HPF_TEMPLATE_STAT || var == HPF_PROCESSORS_STAT || var == DVM_TASK_DIR ||
var == DVM_INDIRECT_GROUP_DIR || var == DVM_REMOTE_GROUP_DIR || var == DVM_REDUCTION_GROUP_DIR ||
var == DVM_CONSISTENT_GROUP_DIR || var == DVM_ASYNCID_DIR || var == ACC_ROUTINE_DIR)
return NULL;
else if (var == SPF_ANALYSIS_DIR || var == FORMAT_STAT)
return isSgExecutableStatement(pt->lexNext());
else
return (SgExecutableStatement*)pt;
#else
return (SgExecutableStatement*)pt;
#endif
}
else
{
#if __SPF
const int var = pt->variant();
if (var == SPF_PARALLEL_DIR)
return (SgExecutableStatement *)pt;
if (var == SPF_ANALYSIS_DIR || var == SPF_PARALLEL_REG_DIR)
return isSgExecutableStatement(pt->lexNext());
if (var == SPF_END_PARALLEL_REG_DIR)
return isSgExecutableStatement(pt->lexPrev());
if (var == SPF_TRANSFORM_DIR)
if (SgStatement::isSapforRegime())
{
SgExpression *ex = pt->expr(0);
while (ex)
const int var = pt->variant();
if (var == SPF_PARALLEL_DIR)
return (SgExecutableStatement*)pt;
if (var == SPF_ANALYSIS_DIR || var == SPF_PARALLEL_REG_DIR)
return isSgExecutableStatement(pt->lexNext());
if (var == SPF_END_PARALLEL_REG_DIR)
return isSgExecutableStatement(pt->lexPrev());
if (var == SPF_TRANSFORM_DIR)
{
if (ex->lhs()->variant() == SPF_NOINLINE_OP)
return NULL;
else if (ex->lhs()->variant() == SPF_FISSION_OP || ex->lhs()->variant() == SPF_EXPAND_OP)
return (SgExecutableStatement *)pt;
SgExpression* ex = pt->expr(0);
while (ex)
{
if (ex->lhs()->variant() == SPF_NOINLINE_OP)
return NULL;
else if (ex->lhs()->variant() == SPF_FISSION_OP || ex->lhs()->variant() == SPF_EXPAND_OP)
return (SgExecutableStatement*)pt;
ex = ex->rhs();
ex = ex->rhs();
}
}
}
if (var == DVM_PARALLEL_ON_DIR || var == ACC_REGION_DIR || var == ACC_END_REGION_DIR || var == DVM_EXIT_INTERVAL_DIR)
return (SgExecutableStatement *)pt;
if (var == DVM_INTERVAL_DIR)
return isSgExecutableStatement(pt->lexNext());
if (var == DVM_ENDINTERVAL_DIR)
return isSgExecutableStatement(pt->lexPrev());
if (var == DVM_BARRIER_DIR)
return (SgExecutableStatement *)pt;
if (var == DVM_INHERIT_DIR)
return NULL;
if (var == DVM_INHERIT_DIR || var == DVM_ALIGN_DIR || var == DVM_DYNAMIC_DIR ||
var == DVM_DISTRIBUTE_DIR || var == DVM_VAR_DECL || var == DVM_SHADOW_DIR ||
var == DVM_HEAP_DIR || var == DVM_CONSISTENT_DIR || var == DVM_POINTER_DIR)
return NULL;
#endif
if (var == DVM_PARALLEL_ON_DIR || var == ACC_REGION_DIR || var == ACC_END_REGION_DIR || var == DVM_EXIT_INTERVAL_DIR)
return (SgExecutableStatement*)pt;
if (var == DVM_INTERVAL_DIR)
return isSgExecutableStatement(pt->lexNext());
if (var == DVM_ENDINTERVAL_DIR)
return isSgExecutableStatement(pt->lexPrev());
if (var == DVM_BARRIER_DIR)
return (SgExecutableStatement*)pt;
if (var == DVM_INHERIT_DIR)
return NULL;
if (var == DVM_INHERIT_DIR || var == DVM_ALIGN_DIR || var == DVM_DYNAMIC_DIR ||
var == DVM_DISTRIBUTE_DIR || var == DVM_VAR_DECL || var == DVM_SHADOW_DIR ||
var == DVM_HEAP_DIR || var == DVM_CONSISTENT_DIR || var == DVM_POINTER_DIR)
return NULL;
}
return NULL;
}
}