Fix problems
This commit is contained in:
@@ -2541,7 +2541,6 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam
|
|||||||
case LOOPS_SPLITTER:
|
case LOOPS_SPLITTER:
|
||||||
case LOOPS_COMBINER:
|
case LOOPS_COMBINER:
|
||||||
case FIX_COMMON_BLOCKS:
|
case FIX_COMMON_BLOCKS:
|
||||||
//case SET_IMPLICIT_NONE:
|
|
||||||
case TEST_PASS:
|
case TEST_PASS:
|
||||||
runAnalysis(*project, curr_regime, false);
|
runAnalysis(*project, curr_regime, false);
|
||||||
case SUBST_EXPR_RD_AND_UNPARSE:
|
case SUBST_EXPR_RD_AND_UNPARSE:
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ char AddLettersToMap(SgExpression* params, SgType* type);
|
|||||||
|
|
||||||
void ImplicitCheck(SgFile* file)
|
void ImplicitCheck(SgFile* file)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (int functionNumber = 0; functionNumber < file->numberOfFunctions(); functionNumber++)
|
for (int functionNumber = 0; functionNumber < file->numberOfFunctions(); functionNumber++)
|
||||||
{
|
{
|
||||||
InitTypes();
|
InitTypes();
|
||||||
@@ -30,16 +29,14 @@ void ImplicitCheck(SgFile* file)
|
|||||||
|
|
||||||
CleanTypes();
|
CleanTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FunctionImplicitCheck(SgStatement* function)
|
static void FunctionImplicitCheck(SgStatement* function)
|
||||||
{
|
{
|
||||||
auto implicitNoneDeclaration = new SgStatement(IMPL_DECL);
|
auto implicitNoneDeclaration = new SgStatement(IMPL_DECL);
|
||||||
auto hasImplicitNone = false;
|
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)
|
if (statement->variant() == IMPL_DECL)
|
||||||
{
|
{
|
||||||
@@ -59,24 +56,16 @@ void FunctionImplicitCheck(SgStatement* function)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
hasImplicitNone = true;
|
hasImplicitNone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (statement->variant() == CONTAINS_STMT || isSgExecutableStatement(statement) != NULL)
|
else if (statement->variant() == CONTAINS_STMT || isSgExecutableStatement(statement) != NULL)
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (SgStatement* statement = function; statement != function->lastExecutable(); statement = statement->lexNext())
|
for (SgStatement* statement = function; statement != function->lastExecutable(); statement = statement->lexNext())
|
||||||
{
|
|
||||||
for (int expressionNumber = 0; expressionNumber < 3; expressionNumber++)
|
for (int expressionNumber = 0; expressionNumber < 3; expressionNumber++)
|
||||||
{
|
|
||||||
FindAllVars(statement->expr(expressionNumber));
|
FindAllVars(statement->expr(expressionNumber));
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto var : allVars)
|
for (auto var : allVars)
|
||||||
{
|
{
|
||||||
@@ -87,9 +76,7 @@ void FunctionImplicitCheck(SgStatement* function)
|
|||||||
char c = var->identifier()[0];
|
char c = var->identifier()[0];
|
||||||
|
|
||||||
if (types.find(c) != types.end())
|
if (types.find(c) != types.end())
|
||||||
{
|
|
||||||
var->setType(types[c]);
|
var->setType(types[c]);
|
||||||
}
|
|
||||||
|
|
||||||
varsWithoutDecl.push_back(var);
|
varsWithoutDecl.push_back(var);
|
||||||
}
|
}
|
||||||
@@ -108,73 +95,55 @@ void FunctionImplicitCheck(SgStatement* function)
|
|||||||
tmpStatement->deleteStmt();
|
tmpStatement->deleteStmt();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
statement = statement->lexNext();
|
statement = statement->lexNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function->insertStmtAfter(*implicitNoneDeclaration, *function);
|
||||||
}
|
}
|
||||||
|
|
||||||
function->insertStmtBefore(*implicitNoneDeclaration, *function);
|
printf("%s", function->unparse());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
static void InitTypes()
|
||||||
}
|
|
||||||
|
|
||||||
void InitTypes()
|
|
||||||
{
|
{
|
||||||
for (char letter = 'a'; letter <= 'z'; letter++)
|
for (char letter = 'a'; letter <= 'z'; letter++)
|
||||||
{
|
|
||||||
types[letter] = NULL;
|
types[letter] = NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void FillCommonTypes()
|
static void FillCommonTypes()
|
||||||
{
|
{
|
||||||
for (char letter : commonIntLetters)
|
for (char letter : commonIntLetters)
|
||||||
{
|
|
||||||
if (types[letter] == NULL)
|
if (types[letter] == NULL)
|
||||||
{
|
|
||||||
types[letter] = new SgType(T_INT);
|
types[letter] = new SgType(T_INT);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto letter : types)
|
for (auto letter : types)
|
||||||
{
|
|
||||||
if (letter.second == NULL)
|
if (letter.second == NULL)
|
||||||
{
|
|
||||||
types[letter.first] = new SgType(T_FLOAT);
|
types[letter.first] = new SgType(T_FLOAT);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CleanTypes()
|
static void CleanTypes()
|
||||||
{
|
{
|
||||||
types.clear();
|
types.clear();
|
||||||
allVars.clear();
|
allVars.clear();
|
||||||
varsWithoutDecl.clear();
|
varsWithoutDecl.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FindAllVars(SgExpression* expr)
|
static void FindAllVars(SgExpression* expr)
|
||||||
{
|
{
|
||||||
if (expr == NULL)
|
if (expr == NULL)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (expr->symbol() != NULL)
|
if (expr->variant() == VAR_REF || expr->variant() == ARRAY_REF)
|
||||||
{
|
|
||||||
allVars.insert(expr->symbol());
|
allVars.insert(expr->symbol());
|
||||||
}
|
|
||||||
|
|
||||||
FindAllVars(expr->lhs());
|
FindAllVars(expr->lhs());
|
||||||
FindAllVars(expr->rhs());
|
FindAllVars(expr->rhs());
|
||||||
}
|
}
|
||||||
|
|
||||||
char AddLettersToMap(SgExpression* expr, SgType* type)
|
static char AddLettersToMap(SgExpression* expr, SgType* type)
|
||||||
{
|
{
|
||||||
if (expr == NULL)
|
if (expr == NULL)
|
||||||
{
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (expr->variant() == CHAR_VAL)
|
if (expr->variant() == CHAR_VAL)
|
||||||
{
|
{
|
||||||
@@ -186,25 +155,17 @@ char AddLettersToMap(SgExpression* expr, SgType* type)
|
|||||||
char rightVal = AddLettersToMap(expr->rhs(), type);
|
char rightVal = AddLettersToMap(expr->rhs(), type);
|
||||||
|
|
||||||
if (expr->variant() == DDOT)
|
if (expr->variant() == DDOT)
|
||||||
{
|
|
||||||
if (leftVal != NULL && rightVal != NULL)
|
if (leftVal != NULL && rightVal != NULL)
|
||||||
{
|
|
||||||
for (char letter = leftVal; letter <= rightVal; letter++)
|
for (char letter = leftVal; letter <= rightVal; letter++)
|
||||||
{
|
|
||||||
types[letter] = type;
|
types[letter] = type;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (expr->variant() == EXPR_LIST)
|
if (expr->variant() == EXPR_LIST)
|
||||||
{
|
{
|
||||||
if (leftVal != NULL) {
|
if (leftVal != NULL)
|
||||||
types[leftVal] = type;
|
types[leftVal] = type;
|
||||||
}
|
if (rightVal != NULL)
|
||||||
if (rightVal != NULL) {
|
|
||||||
types[rightVal] = type;
|
types[rightVal] = type;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user