diff --git a/src/PrivateAnalyzer/private_arrays_search.cpp b/src/PrivateAnalyzer/private_arrays_search.cpp index c7e89b7..1cb044e 100644 --- a/src/PrivateAnalyzer/private_arrays_search.cpp +++ b/src/PrivateAnalyzer/private_arrays_search.cpp @@ -311,7 +311,7 @@ static bool checkDimensionLength(const AccessingSet& array, const map& insertedPrivates, +static int addPrivateArraysToLoop(LoopGraph* loop, const arrayAccessingIndexes& privates, set& insertedPrivates, map>& SPF_messages, const map, pair>& declaredArrays) { @@ -367,7 +367,7 @@ static void addPrivateArraysToLoop(LoopGraph* loop, const arrayAccessingIndexes& } } -void findPrivateArrays(map>& loopGraph, map>& loopGraph, map>& FullIR, set& insertedPrivates, map>& SPF_messages, @@ -419,4 +419,26 @@ void findPrivateArrays(map>& loopGraph, maplineNum, loop->fileName.c_str()); + for (const auto& [name, accesingSet] : accesing) + { + const auto& byDimention = accesingSet.GetElements(); + __spf_print(1, " for array %s with dimention %d\n", name.c_str(), byDimention.size()); + + for (int z = 0; z < byDimention.size(); ++z) + { + __spf_print(1, " dim %d (start, step, tripCount):\n", z); + for (auto& elem : byDimention[z]) + __spf_print(1, " [%ld %ld %ld]\n", elem.start, elem.step, elem.tripCount); + } + } + } + } + + return insertedPrivates.size(); } \ No newline at end of file diff --git a/src/PrivateAnalyzer/private_arrays_search.h b/src/PrivateAnalyzer/private_arrays_search.h index 06fa7c4..f784fe0 100644 --- a/src/PrivateAnalyzer/private_arrays_search.h +++ b/src/PrivateAnalyzer/private_arrays_search.h @@ -8,7 +8,7 @@ #include "graph_loops.h" #include "CFGraph/CFGraph.h" -void findPrivateArrays(std::map>& loopGraph, std::map>& FullIR, std::set& insertedPrivates, - std::map>& SPF_messages, - const std::map, std::pair>& declaredArrays); +int findPrivateArrays(std::map>& loopGraph, std::map>& FullIR, std::set& insertedPrivates, + std::map>& SPF_messages, + const std::map, std::pair>& declaredArrays); diff --git a/src/PrivateAnalyzer/range_structures.cpp b/src/PrivateAnalyzer/range_structures.cpp index a93d5bb..eeb0085 100644 --- a/src/PrivateAnalyzer/range_structures.cpp +++ b/src/PrivateAnalyzer/range_structures.cpp @@ -203,7 +203,7 @@ void AccessingSet::FindCoveredBy(const vector& element, vector> AccessingSet::GetElements() const { return allElements; } +const vector>& AccessingSet::GetElements() const { return allElements; } void AccessingSet::Insert(const vector& element) { diff --git a/src/PrivateAnalyzer/range_structures.h b/src/PrivateAnalyzer/range_structures.h index 28ab7c3..4f58728 100644 --- a/src/PrivateAnalyzer/range_structures.h +++ b/src/PrivateAnalyzer/range_structures.h @@ -22,7 +22,7 @@ public: AccessingSet(std::vector> input) : allElements(input) {}; AccessingSet() {}; AccessingSet(const AccessingSet& a) { allElements = a.GetElements(); }; - std::vector> GetElements() const; + const std::vector>& GetElements() const; void Insert(const std::vector& element); AccessingSet Union(const AccessingSet& source); AccessingSet Intersect(const AccessingSet& secondSet) const; diff --git a/src/Sapfor.cpp b/src/Sapfor.cpp index 9a28e34..96c129f 100644 --- a/src/Sapfor.cpp +++ b/src/Sapfor.cpp @@ -1036,24 +1036,6 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne if (internalExit < 0) throw -1; - set applyFor = { LOOPS_SPLITTER, - LOOPS_COMBINER, - PRIVATE_REMOVING, - PRIVATE_ARRAYS_EXPANSION, - PRIVATE_ARRAYS_SHRINKING, - REMOVE_DEAD_CODE, - MOVE_OPERATORS }; - - if ((countOfTransform == 0 || internalExit > 0) && applyFor.find(curr_regime) != applyFor.end()) - { - SgStatement* mainUnit = findMainUnit(&project, SPF_messages); - checkNull(mainUnit, convertFileName(__FILE__).c_str(), __LINE__); - - getObjectForFileFromMap(mainUnit->fileName(), SPF_messages).push_back(Messages(ERROR, mainUnit->lineNumber(), R197, L"Transformation cannot be performed - nothing to change", 2023)); - __spf_print(1, "%d Transformation cannot be performed - nothing to change, count of transform %d, err %d\n", mainUnit->lineNumber(), countOfTransform, internalExit); - throw -11; - } - sendMessage_2lvl(2); // ********************************** /// /// SECOND AGGREGATION STEP /// @@ -1904,8 +1886,8 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne } else if (curr_regime == TRANSFORM_ASSUMED_SIZE_PARAMETERS) transformAssumedSizeParameters(allFuncInfo); - else if (curr_regime == FIND_PRIVATE_ARRAYS_ANALYSIS) - findPrivateArrays(loopGraph, fullIR, insertedPrivates, SPF_messages, declaredArrays); + else if (curr_regime == FIND_PRIVATE_ARRAYS_ANALYSIS) + countOfTransform = findPrivateArrays(loopGraph, fullIR, insertedPrivates, SPF_messages, declaredArrays); else if (curr_regime == MERGE_REGIONS) mergeRegions(parallelRegions, allFuncInfo); else if (curr_regime == ARRAY_PROPAGATION) @@ -1921,6 +1903,25 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne if (internalExit != 0) throw -1; + set applyFor = { LOOPS_SPLITTER, + LOOPS_COMBINER, + PRIVATE_REMOVING, + PRIVATE_ARRAYS_EXPANSION, + PRIVATE_ARRAYS_SHRINKING, + REMOVE_DEAD_CODE, + MOVE_OPERATORS, + FIND_PRIVATE_ARRAYS_ANALYSIS }; + + if ((countOfTransform == 0 || internalExit > 0) && applyFor.find(curr_regime) != applyFor.end()) + { + SgStatement* mainUnit = findMainUnit(&project, SPF_messages); + checkNull(mainUnit, convertFileName(__FILE__).c_str(), __LINE__); + + getObjectForFileFromMap(mainUnit->fileName(), SPF_messages).push_back(Messages(ERROR, mainUnit->lineNumber(), R197, L"Transformation cannot be performed - nothing to change", 2023)); + __spf_print(1, "%d Transformation cannot be performed - nothing to change, count of transform %d, err %d\n", mainUnit->lineNumber(), countOfTransform, internalExit); + throw - 11; + } + return true; } diff --git a/src/Utils/version.h b/src/Utils/version.h index 89bea68..24f80ed 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2484" +#define VERSION_SPF "2485"