3 Commits

Author SHA1 Message Date
dcef894692 new changes 2026-04-09 21:56:03 +03:00
2907e57797 fixes 2026-03-26 16:01:14 +03:00
70779c3c4e add ddot, change array propagation 2026-03-12 04:25:45 +03:00
11 changed files with 792 additions and 597 deletions

View File

@@ -17,7 +17,7 @@ using std::fstream;
static long int getNextTag()
{
static long int INTERVAL_TAG = 0;
return -(INTERVAL_TAG++);
return INTERVAL_TAG++;
}
//Debug funcs
@@ -413,7 +413,7 @@ static void findIntervals(SpfInterval *interval, map<int, int> &labelsRef, map<i
inter->lineFile = std::make_pair(currentSt->lineNumber(), currentSt->fileName());
inter->parent = interval;
inter->exit_levels.push_back(0);
inter->tag = currentSt->lineNumber();//getNextTag();
inter->tag = getNextTag();
interval->nested.push_back(inter);
findIntervals(inter, labelsRef, gotoStmts, currentSt);

View File

@@ -723,7 +723,7 @@ static void fillIn(FuncInfo *currF, SgExpression *ex, const map<string, int> &pa
{
if (ex)
{
if (!isInFuncPar && (ex->variant() == VAR_REF || ex->variant() == ARRAY_REF))
if (!isInFuncPar && (ex->variant() == VAR_REF || isArrayRef(ex)))
{
const char *name = ex->symbol()->identifier();
if (name && name != string(""))
@@ -800,58 +800,29 @@ static void fillInOut(FuncInfo *currF, SgStatement *start, SgStatement *last, co
static map<string, vector<int>> supportedKeyWordArg = { {"system_clock", { OUT_BIT, OUT_BIT, OUT_BIT } } };
map<string, int> parNamesMain;
map<string, int> parNamesContains;
map<string, int> parNames;
for (int i = 0; i < currF->funcParams.identificators.size(); ++i)
parNamesMain[currF->funcParams.identificators[i]] = i;
parNames[currF->funcParams.identificators[i]] = i;
map<string, int>& parNames = parNamesMain;
bool isContainsFunctions = false;
for (auto st = start; st != last; st = st->lexNext())
{
if (st->variant() == CONTAINS_STMT) {
isContainsFunctions = true;
continue;
}
if (isContainsFunctions) {
if (st->variant() == PROC_HEDR || st->variant() == FUNC_HEDR) {
parNamesContains = parNamesMain;
SgProgHedrStmt* hedr = (SgProgHedrStmt*)st;
int numOfParams = hedr->numberOfParameters();
if (numOfParams > 0)
{
for (int i = 0; i < numOfParams; ++i)
{
auto it = parNamesContains.find(hedr->parameter(i)->identifier());
if (it != parNamesContains.end())
parNamesContains.erase(it);
}
}
parNames = parNamesContains;
}
}
if (st->variant() == CONTAINS_STMT)
break;
if (st->variant() == ENTRY_STAT)
continue;
if (isSgExecutableStatement(st) == NULL) {
if (!isContainsFunctions)
checkInTypeDescription(st->expr(0), currF, parNames);
checkInTypeDescription(st->expr(0), currF, parNames);
continue;
}
if (st->lineNumber() <= 0)
continue;
//XXX: use parameters removing in block ... isContainsFunctions ...
//TODO need to use IR for parameters checking
/*if (activeOps.size() && activeOps.find(st) == activeOps.end())
continue; */
if (activeOps.size() && activeOps.find(st) == activeOps.end())
continue;
if (st->variant() == ASSIGN_STAT)
{
@@ -880,7 +851,7 @@ static void fillInOut(FuncInfo *currF, SgStatement *start, SgStatement *last, co
for (auto ex = read->itemList(); ex; ex = ex->rhs())
{
SgExpression* item = ex->lhs();
if (item && (item->variant() == VAR_REF || item->variant() == ARRAY_REF))
if (item->variant() == VAR_REF || isArrayRef(item))
{
string symb = "";
if (item->symbol())
@@ -901,7 +872,7 @@ static void fillInOut(FuncInfo *currF, SgStatement *start, SgStatement *last, co
if (item->rhs())
queue.push(item->rhs());
if (item->variant() == VAR_REF || item->variant() == ARRAY_REF)
if (item->variant() == VAR_REF || isArrayRef(item))
{
string symb = "";
if (item->symbol())

View File

@@ -9,6 +9,8 @@
#include "range_structures.h"
#include "region.h"
#include "..\Transformations\ExpressionSubstitution\expr_transform.h"
#include "SgUtils.h"
using namespace std;

View File

@@ -1,4 +1,4 @@
#include "Utils/leak_detector.h"
#include "Utils/leak_detector.h"
#pragma comment(linker, "/STACK:536870912") // 512 МБ
@@ -943,7 +943,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
}
}
else if (curr_regime == MOVE_OPERATORS)
moveOperators(file, fullIR, countOfTransform);
moveOperators(file, loopGraph, fullIR, countOfTransform);
else if (curr_regime == PRIVATE_REMOVING_ANALYSIS)
{
auto itFound = loopGraph.find(file->filename());

View File

@@ -1089,8 +1089,6 @@ static int clean(const string& funcName, SgStatement* funcSt, const map<string,
}
SgGotoStmt* gotoSt = new SgGotoStmt(*contLab);
if (st->label())
gotoSt->setLabel(*st->label());
st->insertStmtBefore(*gotoSt, *st->controlParent());
toDelete.push_back(st);

File diff suppressed because it is too large Load Diff

View File

@@ -3,4 +3,4 @@
#include "../../GraphLoop/graph_loops.h"
#include "../../CFGraph/CFGraph.h"
void moveOperators(SgFile* file, const std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>>& FullIR, int& countOfTransform);
void moveOperators(SgFile *file, std::map<std::string, std::vector<LoopGraph*>>& loopGraph, const std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>>& FullIR, int& countOfTransform);

View File

@@ -504,7 +504,7 @@ static void replaceArrayInFragment(SgSymbol* replace_symb,
}
}
static bool ioRegionBorder(SgStatement* stat, SgStatement* last_io_bound)
static bool ioReginBorder(SgStatement* stat, SgStatement* last_io_bound)
{
auto var = stat->variant();
@@ -535,24 +535,14 @@ static bool ioRegionBorder(SgStatement* stat, SgStatement* last_io_bound)
if (last_io_bound && last_io_bound->lastNodeOfStmt() && last_io_bound->lastNodeOfStmt() == stat)
return true;
int parent_var;
if (var == CONTROL_END && border_stats.find(stat->controlParent()->variant()) != border_stats.end())
return true;
return false;
}
FuncInfo* getCurrentFuncInfo(const vector<FuncInfo*>& fileFuncInfo, int line)
{
for (auto* func : fileFuncInfo)
{
if (func->linesNum.first <= line && line <= func->linesNum.second)
return func;
}
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
return NULL;
}
void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
const map<string, vector<FuncInfo*>>& allFuncInfo,
map<string, vector<Messages>>& SPF_messages,
@@ -572,8 +562,6 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
if (SgFile::switchToFile(current_file_name) == -1)
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
FuncInfo *current_func_info = NULL;
auto func_info_it = allFuncInfo.find(current_file_name);
if (func_info_it == allFuncInfo.end())
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
@@ -600,12 +588,13 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
{
curr_stmt = lines.stats.first->GetOriginal();
end = lines.stats.second->GetOriginal()->lexNext();
current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber());
}
map<SgSymbol*, set<SgStatement*>> need_replace;
SgStatement* last_io_bound = NULL;
FuncInfo *current_func_info = NULL;
while (curr_stmt != end)
{
if (!curr_stmt)
@@ -615,7 +604,18 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
if (var == PROC_HEDR || var == PROG_HEDR || var == FUNC_HEDR)
{
current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber());
current_func_info = NULL;
for (auto *func_info : func_info_it->second)
{
if (func_info->funcName == curr_stmt->symbol()->identifier())
{
current_func_info = func_info;
break;
}
}
if (!current_func_info)
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
curr_stmt = curr_stmt->lexNext();
while (curr_stmt && !isSgExecutableStatement(curr_stmt))
@@ -628,7 +628,7 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
break;
}
if (ioRegionBorder(curr_stmt, last_io_bound))
if (ioReginBorder(curr_stmt, last_io_bound))
{
for (const auto& by_array_to_copy : need_replace)
{

View File

@@ -1,3 +1,3 @@
#pragma once
#define VERSION_SPF "2476"
#define VERSION_SPF "2467"