This commit is contained in:
2024-05-02 13:17:11 +03:00
committed by ALEXks
parent de52d39665
commit a4ec840d3f

View File

@@ -1223,34 +1223,7 @@ static void processFunctionCallChain(SgStatement* func, const vector<FuncInfo*>&
if (funcFrom->isMain)
{
insertInitNamesOfFiles(numOfFiles, additional, files, journal, lastDecl, false);
/*
SgAssignStmt* loadOne = new SgAssignStmt(*new SgVarRefExp(loadS[0]), *new SgValueExp(1));
vector<SgStatement*> insertToifLoadOk;
SgIfStmt* ifLoadOk = new SgIfStmt(*iostat == *new SgValueExp(0));
SgInputOutputStmt* read = new SgInputOutputStmt(READ_STAT, *makeExprList({ &frmt, &unit }, false), *fileIdx);
insertToifLoadOk.push_back(read);
insertToifLoadOk.push_back(new SgIOControlStmt(CLOSE_STAT, unit));
insertToifLoadOk.push_back(createOpen(iostat, files, fileIdx, unit));
read = new SgInputOutputStmt(READ_STAT, *makeExprList({ &frmt, &unit }, false), *new SgVarRefExp(loadS[3]));
SgIfStmt* ifLoadOk1 = new SgIfStmt(*iostat == *new SgValueExp(0), *read);
SgAssignStmt* loadZero = new SgAssignStmt(*new SgVarRefExp(loadS[0]), *new SgValueExp(0));
ifLoadOk1->insertStmtAfter(*loadZero, *ifLoadOk1);
insertToifLoadOk.push_back(ifLoadOk1);
firstExec->insertStmtBefore(*gotoBlock, *hedrFrom);
for (int z = insertToGotoBlock.size() - 1; z >= 0; --z)
gotoBlock->insertStmtAfter(*insertToGotoBlock[z], *gotoBlock);
for (int z = insertToifLoadOk.size() - 1; z >= 0; --z)
ifLoadOk->insertStmtAfter(*insertToifLoadOk[z], *ifLoadOk);
*/
//processedFrom[funcFrom] = ifLoadOk1->lexNext();
}
SgStatement* gotoBlock = new SgStatement(IF_NODE);
@@ -1260,195 +1233,8 @@ static void processFunctionCallChain(SgStatement* func, const vector<FuncInfo*>&
// insert gotoBlock and save to module
processAllCalls(firstExec, funcTo->funcName, funcFrom->funcName, gotoBlock, localVarNoParams, procLabelSymb);
/*
std::cout << funcTo->funcName << std::endl;
std::cout << "-------------------------------------" << std::endl;
for (int k = 0; k < funcTo->callsTo.size(); k++)
{
std::cout << funcTo->callsTo[k] << std::endl;
}
std::cout << "=====================================" << std::endl;
std::cout << "-------------------------------------" << std::endl;
for (auto elem :funcTo->callsFrom)
{
std::cout << elem << std::endl;
}
std::cout << "=====================================" << std::endl;
std::cout << funcFrom->funcName << std::endl;
std::cout << "-------------------------------------" << std::endl;
for (int k = 0; k < funcFrom->callsTo.size(); k++)
{
std::cout << funcFrom->callsTo[k] << std::endl;
}
std::cout << "=====================================" << std::endl;
std::cout << "-------------------------------------" << std::endl;
for (auto elem : funcFrom->callsFrom)
{
std::cout << elem << std::endl;
}
std::cout << "=====================================" << std::endl;
*/
/*
SgStatement* gotoBlock = new SgStatement(IF_NODE);
vector<SgStatement*> insertToGotoBlock;
gotoBlock->addComment("!GOTO LOAD BLOCK \n");
gotoBlock->setExpression(0, *new SgVarRefExp(loadS[0]) == *new SgValueExp(0));
if (funcFrom->isMain)
{
SgAssignStmt* loadOne = new SgAssignStmt(*new SgVarRefExp(loadS[0]), *new SgValueExp(1));
insertToGotoBlock.push_back(loadOne);
insertToGotoBlock.push_back(createOpenJ_old(iostat, journal, unit));
vector<SgStatement*> insertToifLoadOk;
SgIfStmt* ifLoadOk = new SgIfStmt(*iostat == *new SgValueExp(0));
insertToGotoBlock.push_back(ifLoadOk);
SgInputOutputStmt* read = new SgInputOutputStmt(READ_STAT, *makeExprList({ &frmt, &unit }, false), *fileIdx);
insertToifLoadOk.push_back(read);
insertToifLoadOk.push_back(new SgIOControlStmt(CLOSE_STAT, unit));
insertToifLoadOk.push_back(createOpen(iostat, files, fileIdx, unit));
read = new SgInputOutputStmt(READ_STAT, *makeExprList({ &frmt, &unit }, false), *new SgVarRefExp(loadS[3]));
SgIfStmt* ifLoadOk1 = new SgIfStmt(*iostat == *new SgValueExp(0), *read);
SgAssignStmt* loadZero = new SgAssignStmt(*new SgVarRefExp(loadS[0]), *new SgValueExp(0));
ifLoadOk1->insertStmtAfter(*loadZero, *ifLoadOk1);
insertToifLoadOk.push_back(ifLoadOk1);
firstExec->insertStmtBefore(*gotoBlock, *hedrFrom);
for (int z = insertToGotoBlock.size() - 1; z >= 0; --z)
gotoBlock->insertStmtAfter(*insertToGotoBlock[z], *gotoBlock);
for (int z = insertToifLoadOk.size() - 1; z >= 0; --z)
ifLoadOk->insertStmtAfter(*insertToifLoadOk[z], *ifLoadOk);
processedFrom[funcFrom] = ifLoadOk1->lexNext();
}
else
{
SgStatement* read = new SgInputOutputStmt(READ_STAT, *makeExprList({ &frmt, &unit }, false), *new SgVarRefExp(loadS[3]));
gotoBlock->insertStmtAfter(*read, *gotoBlock);
processedFrom[funcFrom] = gotoBlock->lexNext();
firstExec->insertStmtBefore(*gotoBlock, *hedrFrom);
}*/
}
/*
for (auto& callInfo : funcFrom->callsFromDetailed)
{
auto& call = callInfo.pointerDetailCallsFrom;
SgStatement* st = NULL;
if (isSgFuncHedrStmt(hedrTo) && call.second == FUNC_CALL)
{
SgFunctionCallExp* callExp = (SgFunctionCallExp*)call.first;
if (!strcmp(callExp->funName()->identifier(), funcTo->funcName.c_str()))
{
st = SgStatement::getStatmentByExpression(callExp);
SgSymbol* buf = new SgSymbol(VARIABLE_NAME, ("SPF_CALL_" + funcTo->funcName + "_" + to_string(callNum)).c_str(), callExp->type(), funcFrom->funcPointer->GetOriginal());
SgExpression* bufRef = new SgVarRefExp(buf);
SgStatement* bufAssign = new SgAssignStmt(*bufRef, *callExp);
st->insertStmtBefore(*bufAssign, *(st->controlParent()));
replaceExprByExprInSt(st, callExp, bufRef);
makeDeclaration(hedrFrom, { buf });
for (int i = 0; i < callExp->numberOfArgs(); i++)
{
if (funcTo->funcParams.isArgInOut(i) || funcTo->funcParams.isArgOut(i))
{
SgSymbol* s, * sl;
SgStatement* lst = hedrTo->lastNodeOfStmt();
sl = lst->lexNext() ? lst->lexNext()->symbol() : NULL;
for (s = hedrTo->symbol(); s != sl && s; s = s->next())
{
if (s->scope() == hedrTo && !strcmp(s->identifier(), funcTo->funcParams.identificators[i].c_str()))
{
break;
}
}
SgSymbol* argBuf = new SgSymbol(VARIABLE_NAME, ("SPF_ARG_" + funcTo->funcName + "_" + to_string(callNum) + "_" + to_string(i)).c_str(), s->type(), funcFrom->funcPointer->GetOriginal());
SgExpression* argBufRef = new SgVarRefExp(argBuf);
SgStatement* argBufAssign = new SgAssignStmt(*argBufRef, *(callExp->arg(i)));
bufAssign->insertStmtBefore(*argBufAssign, *(st->controlParent()));
SgStatement* decl = makeDeclaration(hedrFrom, { argBuf });
for (int i = 0; i < 3; i++)
{
SgExpression* e;
if (e = decl->expr(i))
decl->setExpression(i, CalculateInteger(ReplaceConstant(e)));
}
}
}
st = bufAssign;
callNum++;
}
}
else if (isSgProcHedrStmt(hedrTo) && call.second == PROC_STAT)
{
//TODO: need to revise!!
/*SgCallStmt* callSt = (SgCallStmt*)call.first;
if (!strcmp(callSt->name()->identifier(), funcTo->funcName.c_str())) {
st = callSt;
for (int i = 0; i < callSt->numberOfArgs(); i++)
{
if (funcTo->funcParams.isArgInOut(i) || funcTo->funcParams.isArgOut(i))
{
SgSymbol* buf1 = new SgSymbol(VARIABLE_NAME, "TEMP1", callSt->arg(i)->type(), hedrFrom);
SgExpression* buf1Ref = new SgVarRefExp(buf1);
SgStatement* buf1Assign = new SgAssignStmt(*buf1Ref, *(callSt->arg(i)));
st->insertStmtBefore(*buf1Assign, *(st->controlParent()));
}
}
}
}
if (st)
{
SgStatement* loadBlock = new SgStatement(IF_NODE);
SgStatement* loadBlockLast = NULL;
SgStatement* storeBlock = new SgStatement(IF_NODE);
st->insertStmtBefore(*loadBlock, *st->controlParent());
st->insertStmtAfter(*storeBlock, *st->controlParent());
loadBlock->addComment("! LOAD CHECKPOINT\n");
const int labNum = getNextFreeLabel();
auto loadblockLab = new SgLabel(labNum);
loadBlock->setLabel(*loadblockLab);
SgIfStmt* gotoIf = new SgIfStmt(*new SgVarRefExp(loadS[3]) == *new SgValueExp(labNum), *new SgGotoStmt(*loadblockLab));
processedFrom[funcFrom]->insertStmtAfter(*gotoIf, *(processedFrom[funcFrom]->controlParent()));
storeBlock->addComment("! STORE CHECKPOINT\n");
//TODO: this block incorrect!!
storeBlock->setExpression(0, *new SgVarRefExp(everyS[0]) >= *new SgValueExp(every));
vector<SgStatement*> insertToLoadS;
loadBlock->setExpression(0, *new SgVarRefExp(loadS[0]) == *new SgValueExp(0));
loadBlock->addComment("! LOAD DATA FROM CHECKPOINT\n");
//READ DATA
if (local.size())
{
auto dataRead = new SgInputOutputStmt(READ_STAT, unit, *makeExprList(local));
loadBlock->insertStmtAfter(*dataRead, *loadBlock);
}
}
}
*/
}
@@ -1569,7 +1355,6 @@ void createCheckpoints(SgFile* file, const map<string, CommonBlock*>& commonBloc
findLocalData(func, firstExec, local, localParams, addedToList, allFuncInfo);
const char* funcName = func->symbol()->identifier();
//int lenFuncName = strlen(funcName);
SgStatement* proc_moduleF = NULL;
const string proc_cpModule = "spf_module_" + string(funcName);