fix private arrays search #70
@@ -20,6 +20,7 @@ static void RemoveEmptyPoints(ArrayAccessingIndexes& container)
|
|||||||
{
|
{
|
||||||
ArrayAccessingIndexes resultContainer;
|
ArrayAccessingIndexes resultContainer;
|
||||||
unordered_set<string> toRemove;
|
unordered_set<string> toRemove;
|
||||||
|
|
||||||
for (auto& [arrayName, accessingSet] : container)
|
for (auto& [arrayName, accessingSet] : container)
|
||||||
{
|
{
|
||||||
vector<vector<ArrayDimension>> points;
|
vector<vector<ArrayDimension>> points;
|
||||||
@@ -28,6 +29,7 @@ static void RemoveEmptyPoints(ArrayAccessingIndexes& container)
|
|||||||
if (!arrayPoint.empty())
|
if (!arrayPoint.empty())
|
||||||
points.push_back(arrayPoint);
|
points.push_back(arrayPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (points.size() < accessingSet.GetElements().size() && !points.empty())
|
if (points.size() < accessingSet.GetElements().size() && !points.empty())
|
||||||
resultContainer[arrayName] = points;
|
resultContainer[arrayName] = points;
|
||||||
|
|
||||||
@@ -36,14 +38,11 @@ static void RemoveEmptyPoints(ArrayAccessingIndexes& container)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const string& name : toRemove)
|
for (const string& name : toRemove)
|
||||||
{
|
|
||||||
container.erase(name);
|
container.erase(name);
|
||||||
}
|
|
||||||
for (auto& [arrayName, accessingSet] : resultContainer)
|
for (auto& [arrayName, accessingSet] : resultContainer)
|
||||||
{
|
|
||||||
container[arrayName] = accessingSet;
|
container[arrayName] = accessingSet;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static void Collapse(Region* region)
|
static void Collapse(Region* region)
|
||||||
{
|
{
|
||||||
@@ -67,6 +66,7 @@ static void Collapse(Region* region)
|
|||||||
region->array_use[arrayName] = region->array_use[arrayName].Union(diff);
|
region->array_use[arrayName] = region->array_use[arrayName].Union(diff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayAccessingIndexes useUnion;
|
ArrayAccessingIndexes useUnion;
|
||||||
for (auto& byBlock : region->getBasickBlocks())
|
for (auto& byBlock : region->getBasickBlocks())
|
||||||
for (auto& [arrayName, arrayRanges] : byBlock->array_use)
|
for (auto& [arrayName, arrayRanges] : byBlock->array_use)
|
||||||
@@ -104,6 +104,7 @@ static void SolveDataFlowIteratively(Region* DFG)
|
|||||||
newIn.clear();
|
newIn.clear();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& [arrayName, accessSet] : prevBlock->array_out)
|
for (const auto& [arrayName, accessSet] : prevBlock->array_out)
|
||||||
{
|
{
|
||||||
if (newIn.find(arrayName) != newIn.end())
|
if (newIn.find(arrayName) != newIn.end())
|
||||||
@@ -116,6 +117,7 @@ static void SolveDataFlowIteratively(Region* DFG)
|
|||||||
|
|
||||||
b->array_in = move(newIn);
|
b->array_in = move(newIn);
|
||||||
ArrayAccessingIndexes newOut;
|
ArrayAccessingIndexes newOut;
|
||||||
|
|
||||||
if (b->array_def.empty())
|
if (b->array_def.empty())
|
||||||
newOut = b->array_in;
|
newOut = b->array_in;
|
||||||
else if (b->array_in.empty())
|
else if (b->array_in.empty())
|
||||||
@@ -151,22 +153,20 @@ static void SolveDataFlow(Region* DFG)
|
|||||||
Collapse(DFG);
|
Collapse(DFG);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long long CalculateLength(const AccessingSet& array)
|
/*unsigned long long CalculateLength(const AccessingSet& array)
|
||||||
{
|
{
|
||||||
if (array.GetElements().empty())
|
if (array.GetElements().empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unsigned long long result = 1;
|
unsigned long long result = 1;
|
||||||
for (const auto& range : array.GetElements())
|
for (const auto& range : array.GetElements())
|
||||||
{
|
|
||||||
for (const auto& dim : range)
|
for (const auto& dim : range)
|
||||||
{
|
|
||||||
result *= (dim.step * dim.tripCount);
|
result *= (dim.step * dim.tripCount);
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddPrivateArraysToLoop(LoopGraph* loop, const ArrayAccessingIndexes& privates, set<SgStatement*>& insertedPrivates)
|
return result;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
static void AddPrivateArraysToLoop(LoopGraph* loop, const ArrayAccessingIndexes& privates, set<SgStatement*>& insertedPrivates)
|
||||||
{
|
{
|
||||||
SgStatement* spfStat = new SgStatement(SPF_ANALYSIS_DIR);
|
SgStatement* spfStat = new SgStatement(SPF_ANALYSIS_DIR);
|
||||||
spfStat->setlineNumber(loop->loop->lineNumber());
|
spfStat->setlineNumber(loop->loop->lineNumber());
|
||||||
|
|||||||
@@ -187,7 +187,6 @@ enum passes {
|
|||||||
FIND_PRIVATE_ARRAYS,
|
FIND_PRIVATE_ARRAYS,
|
||||||
|
|
||||||
TRANSFORM_ASSUMED_SIZE_PARAMETERS,
|
TRANSFORM_ASSUMED_SIZE_PARAMETERS,
|
||||||
|
|
||||||
ARRAY_PROPAGATION,
|
ARRAY_PROPAGATION,
|
||||||
|
|
||||||
TEST_PASS,
|
TEST_PASS,
|
||||||
@@ -378,7 +377,6 @@ static void setPassValues()
|
|||||||
passNames[FIND_PRIVATE_ARRAYS] = "FIND_PRIVATE_ARRAYS";
|
passNames[FIND_PRIVATE_ARRAYS] = "FIND_PRIVATE_ARRAYS";
|
||||||
|
|
||||||
passNames[TRANSFORM_ASSUMED_SIZE_PARAMETERS] = "TRANSFORM_ASSUMED_SIZE_PARAMETERS";
|
passNames[TRANSFORM_ASSUMED_SIZE_PARAMETERS] = "TRANSFORM_ASSUMED_SIZE_PARAMETERS";
|
||||||
|
|
||||||
passNames[ARRAY_PROPAGATION] = "ARRAY_PROPAGATION";
|
passNames[ARRAY_PROPAGATION] = "ARRAY_PROPAGATION";
|
||||||
|
|
||||||
passNames[TEST_PASS] = "TEST_PASS";
|
passNames[TEST_PASS] = "TEST_PASS";
|
||||||
|
|||||||
@@ -319,7 +319,6 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
|
|||||||
list({ CALL_GRAPH2, CALL_GRAPH, BUILD_IR, LOOP_GRAPH, LOOP_ANALYZER_DATA_DIST_S2 }) <= Pass(FIND_PRIVATE_ARRAYS_ANALYSIS);
|
list({ CALL_GRAPH2, CALL_GRAPH, BUILD_IR, LOOP_GRAPH, LOOP_ANALYZER_DATA_DIST_S2 }) <= Pass(FIND_PRIVATE_ARRAYS_ANALYSIS);
|
||||||
list({ FIND_PRIVATE_ARRAYS_ANALYSIS, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN, REVERT_SUBST_EXPR_RD }) <= Pass(FIND_PRIVATE_ARRAYS);
|
list({ FIND_PRIVATE_ARRAYS_ANALYSIS, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN, REVERT_SUBST_EXPR_RD }) <= Pass(FIND_PRIVATE_ARRAYS);
|
||||||
|
|
||||||
|
|
||||||
passesIgnoreStateDone.insert({ CREATE_PARALLEL_DIRS, INSERT_PARALLEL_DIRS, INSERT_SHADOW_DIRS, EXTRACT_PARALLEL_DIRS,
|
passesIgnoreStateDone.insert({ CREATE_PARALLEL_DIRS, INSERT_PARALLEL_DIRS, INSERT_SHADOW_DIRS, EXTRACT_PARALLEL_DIRS,
|
||||||
EXTRACT_SHADOW_DIRS, CREATE_REMOTES, UNPARSE_FILE, REMOVE_AND_CALC_SHADOW,
|
EXTRACT_SHADOW_DIRS, CREATE_REMOTES, UNPARSE_FILE, REMOVE_AND_CALC_SHADOW,
|
||||||
REVERSE_CREATED_NESTED_LOOPS, PREDICT_SCHEME, CALCULATE_STATS_SCHEME, REVERT_SPF_DIRS, CLEAR_SPF_DIRS, TRANSFORM_SHADOW_IF_FULL,
|
REVERSE_CREATED_NESTED_LOOPS, PREDICT_SCHEME, CALCULATE_STATS_SCHEME, REVERT_SPF_DIRS, CLEAR_SPF_DIRS, TRANSFORM_SHADOW_IF_FULL,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_SPF "2448"
|
#define VERSION_SPF "2449"
|
||||||
|
|||||||
Reference in New Issue
Block a user