Fix problems

This commit is contained in:
2024-03-16 19:40:29 +03:00
parent c00f8d6977
commit 34bc8b0219
2 changed files with 13 additions and 53 deletions

View File

@@ -2541,7 +2541,6 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam
case LOOPS_SPLITTER:
case LOOPS_COMBINER:
case FIX_COMMON_BLOCKS:
//case SET_IMPLICIT_NONE:
case TEST_PASS:
runAnalysis(*project, curr_regime, false);
case SUBST_EXPR_RD_AND_UNPARSE:

View File

@@ -19,7 +19,6 @@ char AddLettersToMap(SgExpression* params, SgType* type);
void ImplicitCheck(SgFile* file)
{
for (int functionNumber = 0; functionNumber < file->numberOfFunctions(); functionNumber++)
{
InitTypes();
@@ -30,16 +29,14 @@ void ImplicitCheck(SgFile* file)
CleanTypes();
}
return;
}
void FunctionImplicitCheck(SgStatement* function)
static void FunctionImplicitCheck(SgStatement* function)
{
auto implicitNoneDeclaration = new SgStatement(IMPL_DECL);
auto hasImplicitNone = false;
for (SgStatement* statement = function; statement = statement->lexNext(); statement != NULL)
for (SgStatement* statement = function; statement != NULL; statement = statement->lexNext())
{
if (statement->variant() == IMPL_DECL)
{
@@ -59,24 +56,16 @@ void FunctionImplicitCheck(SgStatement* function)
}
}
else
{
hasImplicitNone = true;
}
}
}
else if (statement->variant() == CONTAINS_STMT || isSgExecutableStatement(statement) != NULL)
{
break;
}
}
for (SgStatement* statement = function; statement != function->lastExecutable(); statement = statement->lexNext())
{
for (int expressionNumber = 0; expressionNumber < 3; expressionNumber++)
{
FindAllVars(statement->expr(expressionNumber));
}
}
for (auto var : allVars)
{
@@ -87,9 +76,7 @@ void FunctionImplicitCheck(SgStatement* function)
char c = var->identifier()[0];
if (types.find(c) != types.end())
{
var->setType(types[c]);
}
varsWithoutDecl.push_back(var);
}
@@ -108,73 +95,55 @@ void FunctionImplicitCheck(SgStatement* function)
tmpStatement->deleteStmt();
}
else
{
statement = statement->lexNext();
}
}
function->insertStmtBefore(*implicitNoneDeclaration, *function);
function->insertStmtAfter(*implicitNoneDeclaration, *function);
}
return;
printf("%s", function->unparse());
}
void InitTypes()
static void InitTypes()
{
for (char letter = 'a'; letter <= 'z'; letter++)
{
types[letter] = NULL;
}
}
void FillCommonTypes()
static void FillCommonTypes()
{
for (char letter : commonIntLetters)
{
if (types[letter] == NULL)
{
types[letter] = new SgType(T_INT);
}
}
for (auto letter : types)
{
if (letter.second == NULL)
{
types[letter.first] = new SgType(T_FLOAT);
}
}
}
void CleanTypes()
static void CleanTypes()
{
types.clear();
allVars.clear();
varsWithoutDecl.clear();
}
void FindAllVars(SgExpression* expr)
static void FindAllVars(SgExpression* expr)
{
if (expr == NULL)
{
return;
}
if (expr->symbol() != NULL)
{
if (expr->variant() == VAR_REF || expr->variant() == ARRAY_REF)
allVars.insert(expr->symbol());
}
FindAllVars(expr->lhs());
FindAllVars(expr->rhs());
}
char AddLettersToMap(SgExpression* expr, SgType* type)
static char AddLettersToMap(SgExpression* expr, SgType* type)
{
if (expr == NULL)
{
return NULL;
}
if (expr->variant() == CHAR_VAL)
{
@@ -186,24 +155,16 @@ char AddLettersToMap(SgExpression* expr, SgType* type)
char rightVal = AddLettersToMap(expr->rhs(), type);
if (expr->variant() == DDOT)
{
if (leftVal != NULL && rightVal != NULL)
{
for (char letter = leftVal; letter <= rightVal; letter++)
{
types[letter] = type;
}
}
}
if (expr->variant() == EXPR_LIST)
{
if (leftVal != NULL) {
{
if (leftVal != NULL)
types[leftVal] = type;
}
if (rightVal != NULL) {
if (rightVal != NULL)
types[rightVal] = type;
}
}
return NULL;