7 Commits

Author SHA1 Message Date
998fbc3036 fix getUniqName 2026-01-31 20:53:36 +03:00
ALEXks
331d4f9d99 fixed private analysis 2026-01-19 21:01:49 +03:00
ALEXks
904292f109 updated submodule libpredictor 2026-01-18 16:50:57 +03:00
ALEXks
c36326660c fixed submodule libpredictor 2026-01-06 18:50:54 +03:00
ALEXks
ec08e3af0e version updated 2026-01-06 18:36:07 +03:00
ALEXks
b1ef5d0b67 dvm submodule updated 2026-01-06 18:35:34 +03:00
d6c046ea57 Merge pull request 'egormayorov' (#72) from egormayorov into master 2025-12-29 18:26:19 +00:00
5 changed files with 44 additions and 10 deletions

View File

@@ -200,20 +200,46 @@ static void fillOutForFunc(const FuncInfo* func, const vector<SAPFOR::BasicBlock
outForFunc[func->funcName] = { defined, common_defined }; outForFunc[func->funcName] = { defined, common_defined };
} }
static void getDefsFromBlock(SAPFOR::BasicBlock* block, set<SAPFOR::Argument*>& res, static bool isInstructionSpfParameter(SAPFOR::Instruction* instr)
{
SgStatement* st = instr->getOperator();
// check if this operator is SPF(ANALYSIS(PARAMETER( )))
if (st && st->variant() == ASSIGN_STAT)
{
if (st->lineNumber() < 0 && st->numberOfAttributes())
{
for (int i = 0; i < st->numberOfAttributes(); ++i)
{
SgAttribute* attr = st->getAttribute(i);
SgStatement* attributeStatement = (SgStatement*)(attr->getAttributeData());
int type = st->attributeType(i);
if (type == SPF_PARAMETER_OP)
return true;
}
}
}
return false;
}
static void getDefsFromBlock(SAPFOR::BasicBlock* block, set<SAPFOR::Argument*>& res,
const vector<pair<const Variable*, CommonBlock*>>& commonVars, const vector<pair<const Variable*, CommonBlock*>>& commonVars,
const FuncInfo* func) const FuncInfo* func)
{ {
vector<SAPFOR::Argument*> lastParamRef; vector<SAPFOR::Argument*> lastParamRef;
for (auto ir_block : block->getInstructions()) for (const auto &ir_block : block->getInstructions())
{ {
SAPFOR::Instruction* instr = ir_block->getInstruction(); SAPFOR::Instruction* instr = ir_block->getInstruction();
if (isInstructionSpfParameter(instr))
continue;
SAPFOR::CFG_OP instr_operation = instr->getOperation(); SAPFOR::CFG_OP instr_operation = instr->getOperation();
if (instr_operation == SAPFOR::CFG_OP::PARAM) if (instr_operation == SAPFOR::CFG_OP::PARAM)
{ {
SAPFOR::Argument* arg = instr->getArg1(); SAPFOR::Argument* arg = instr->getArg1();
if(arg->getType() == SAPFOR::CFG_ARG_TYPE::VAR) if (arg->getType() == SAPFOR::CFG_ARG_TYPE::VAR)
addPlaceWithDef(commonVars, func, arg, instr); addPlaceWithDef(commonVars, func, arg, instr);
lastParamRef.push_back(arg); lastParamRef.push_back(arg);
@@ -236,12 +262,20 @@ static void getDefsFromBlock(SAPFOR::BasicBlock* block, set<SAPFOR::Argument*>&
int last_instr_num = block->getInstructions().back()->getNumber(); int last_instr_num = block->getInstructions().back()->getNumber();
for (const auto& def : block->getRD_Out()) for (const auto& def : block->getRD_Out())
{
for (int place : def.second) for (int place : def.second)
{
if (place >= first_instr_num && place <= last_instr_num && def.first->getType() == SAPFOR::CFG_ARG_TYPE::VAR) if (place >= first_instr_num && place <= last_instr_num && def.first->getType() == SAPFOR::CFG_ARG_TYPE::VAR)
{ {
SAPFOR::Instruction* instr = block->getInstructions()[place - first_instr_num]->getInstruction();
if (isInstructionSpfParameter(instr))
continue;
res.insert(def.first); res.insert(def.first);
addPlaceWithDef(commonVars, func, def.first, block->getInstructions()[place - first_instr_num]->getInstruction()); addPlaceWithDef(commonVars, func, def.first, instr);
} }
}
}
} }
// recursively analyze FOR loops // recursively analyze FOR loops
@@ -266,7 +300,7 @@ static set<SAPFOR::BasicBlock*> analyzeLoop(LoopGraph* loop, const set<SAPFOR::B
SAPFOR::BasicBlock* head_block = NULL; SAPFOR::BasicBlock* head_block = NULL;
int loop_start = loop->lineNum, loop_end = loop->lineNumAfterLoop; int loop_start = loop->lineNum, loop_end = loop->lineNumAfterLoop;
for (auto bb : blocks) for (const auto &bb : blocks)
{ {
if (!bb || (bb->getInstructions().size() == 0)) if (!bb || (bb->getInstructions().size() == 0))
continue; continue;
@@ -348,7 +382,7 @@ static set<SAPFOR::BasicBlock*> analyzeLoop(LoopGraph* loop, const set<SAPFOR::B
getDefsFromBlock(*loop_it, changeValueOnExit, commonVars, func); getDefsFromBlock(*loop_it, changeValueOnExit, commonVars, func);
for (auto bb : currentLoop) for (const auto &bb : currentLoop)
{ {
//fill LiveWhenLoopEnds //fill LiveWhenLoopEnds
bool has_next_outside_body = false; bool has_next_outside_body = false;

View File

@@ -1314,7 +1314,7 @@ tuple<int, string, string> getUniqName(const map<string, vector<SgExpression*>>
tuple<int, string, string> retVal; tuple<int, string, string> retVal;
if (inCommon) if (inCommon)
retVal = make_tuple(commonPos, string("common_") + getCommonName(foundCommon), string(symb->identifier())); retVal = make_tuple(commonPos, string("common_") + getCommonName(foundCommon), "");
else else
retVal = make_tuple(decl->lineNumber(), string(decl->fileName()), string(symb->identifier())); retVal = make_tuple(decl->lineNumber(), string(decl->fileName()), string(symb->identifier()));

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION_SPF "2451" #define VERSION_SPF "2453"