add multifile support
This commit is contained in:
@@ -124,16 +124,30 @@ static void SolveDataFlow(Region* DFG)
|
||||
map<LoopGraph*, ArrayAccessingIndexes> FindPrivateArrays(map<string, vector<LoopGraph*>> &loopGraph, map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& FullIR)
|
||||
{
|
||||
map<LoopGraph*, ArrayAccessingIndexes> result;
|
||||
for (const auto& [loopName, loops] : loopGraph)
|
||||
for (const auto& [fileName, loops] : loopGraph)
|
||||
{
|
||||
SgFile::switchToFile(fileName);
|
||||
for (const auto& loop : loops)
|
||||
{
|
||||
SgStatement* search_func = loop->loop->GetOriginal();
|
||||
|
||||
while (search_func && (!isSgProgHedrStmt(search_func)))
|
||||
search_func = search_func->controlParent();
|
||||
|
||||
for (const auto& [funcInfo, blocks]: FullIR)
|
||||
{
|
||||
Region* loopRegion = new Region(loop, blocks);
|
||||
SolveDataFlow(loopRegion);
|
||||
result[loop] = loopRegion->array_priv;
|
||||
delete(loopRegion);
|
||||
if (funcInfo->fileName == fileName && funcInfo->funcPointer->GetOriginal() == search_func)
|
||||
{
|
||||
Region* loopRegion = new Region(loop, blocks);
|
||||
if (loopRegion->getBasickBlocks().size() <= 1)
|
||||
{
|
||||
delete(loopRegion);
|
||||
continue;
|
||||
}
|
||||
SolveDataFlow(loopRegion);
|
||||
result[loop] = loopRegion->array_priv;
|
||||
delete(loopRegion);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user