fix FIND_PRIVATE_ARRAYS
This commit is contained in:
@@ -16,6 +16,35 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
static void RemoveEmptyPoints(ArrayAccessingIndexes& container)
|
||||
{
|
||||
ArrayAccessingIndexes resultContainer;
|
||||
unordered_set<string> toRemove;
|
||||
for (auto& [arrayName, accessingSet] : container)
|
||||
{
|
||||
vector<vector<ArrayDimension>> points;
|
||||
for (auto& arrayPoint : accessingSet.GetElements())
|
||||
{
|
||||
if (!arrayPoint.empty())
|
||||
points.push_back(arrayPoint);
|
||||
}
|
||||
if (points.size() < accessingSet.GetElements().size() && !points.empty())
|
||||
resultContainer[arrayName] = points;
|
||||
|
||||
if (points.empty())
|
||||
toRemove.insert(arrayName);
|
||||
}
|
||||
|
||||
for (const string& name : toRemove)
|
||||
{
|
||||
container.erase(name);
|
||||
}
|
||||
for (auto& [arrayName, accessingSet] : resultContainer)
|
||||
{
|
||||
container[arrayName] = accessingSet;
|
||||
}
|
||||
}
|
||||
|
||||
static void Collapse(Region* region)
|
||||
{
|
||||
if (region->getBasickBlocks().empty())
|
||||
@@ -188,6 +217,8 @@ void FindPrivateArrays(map<string, vector<LoopGraph*>> &loopGraph, map<FuncInfo*
|
||||
SgFile::switchToFile(fileName);
|
||||
for (const auto& loop : loops)
|
||||
{
|
||||
if (!loop->isFor())
|
||||
continue;
|
||||
SgStatement* search_func = loop->loop->GetOriginal();
|
||||
|
||||
while (search_func && (!isSgProgHedrStmt(search_func)))
|
||||
@@ -204,6 +235,7 @@ void FindPrivateArrays(map<string, vector<LoopGraph*>> &loopGraph, map<FuncInfo*
|
||||
continue;
|
||||
}
|
||||
SolveDataFlow(loopRegion);
|
||||
RemoveEmptyPoints(loopRegion->array_priv);
|
||||
result[loop] = loopRegion->array_priv;
|
||||
delete(loopRegion);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user