change passes

This commit is contained in:
2025-05-19 20:50:35 +03:00
parent 1973d095f5
commit 73d0b201f2
6 changed files with 116 additions and 47 deletions

View File

@@ -1,14 +1,12 @@
#pragma once
#include<vector>
#include<map>
#include<unordered_set>
#include "../GraphLoop/graph_loops.h"
#include "../CFGraph/CFGraph.h"
using std::vector;
using std::map;
using std::string;
using std::set;
using std::unordered_set;
using std::pair;
struct ArrayDimension
{
@@ -17,23 +15,23 @@ struct ArrayDimension
class AccessingSet {
private:
vector<vector<ArrayDimension>> allElements;
std::vector<std::vector<ArrayDimension>> allElements;
public:
AccessingSet(vector<vector<ArrayDimension>> input) : allElements(input) {};
AccessingSet(std::vector<std::vector<ArrayDimension>> input) : allElements(input) {};
AccessingSet() {};
vector<vector<ArrayDimension>> GetElements() const;
void Insert(const vector<ArrayDimension>& element);
std::vector<std::vector<ArrayDimension>> GetElements() const;
void Insert(const std::vector<ArrayDimension>& element);
AccessingSet Union(const AccessingSet& source);
AccessingSet Intersect(const AccessingSet& secondSet) const;
AccessingSet Diff(const AccessingSet& secondSet) const;
bool ContainsElement(const vector<ArrayDimension>& element) const;
void FindCoveredBy(const vector<ArrayDimension>& element, vector<vector<ArrayDimension>>& result) const;
void FindUncovered(const vector<ArrayDimension>& element, vector<vector<ArrayDimension>>& result) const;
bool ContainsElement(const std::vector<ArrayDimension>& element) const;
void FindCoveredBy(const std::vector<ArrayDimension>& element, std::vector<std::vector<ArrayDimension>>& result) const;
void FindUncovered(const std::vector<ArrayDimension>& element, std::vector<std::vector<ArrayDimension>>& result) const;
friend bool operator!=(const AccessingSet& lhs, const AccessingSet& rhs);
};
using ArrayAccessingIndexes = map<string, AccessingSet>;
using ArrayAccessingIndexes = std::map<std::string, AccessingSet>;
class Region: public SAPFOR::BasicBlock {
public:
@@ -47,14 +45,14 @@ class Region: public SAPFOR::BasicBlock {
header = nullptr;
}
Region(LoopGraph* loop, vector<SAPFOR::BasicBlock*>& Blocks);
Region(LoopGraph* loop, const std::vector<SAPFOR::BasicBlock*>& Blocks);
Region* getHeader()
{
return header;
}
unordered_set<Region*>& getBasickBlocks()
std::unordered_set<Region*>& getBasickBlocks()
{
return basickBlocks;
}
@@ -63,12 +61,12 @@ class Region: public SAPFOR::BasicBlock {
{
basickBlocks.insert(region);
}
unordered_set<Region*> getPrevRegions()
std::unordered_set<Region*> getPrevRegions()
{
return prevRegions;
}
unordered_set<Region*> getNextRegions()
std::unordered_set<Region*> getNextRegions()
{
return nextRegions;
}
@@ -95,7 +93,7 @@ class Region: public SAPFOR::BasicBlock {
nextRegions.insert(source);
}
unordered_set<Region*> getSubRegions()
std::unordered_set<Region*> getSubRegions()
{
return subRegions;
}
@@ -105,19 +103,19 @@ class Region: public SAPFOR::BasicBlock {
subRegions.insert(region);
}
ArrayAccessingIndexes array_def, array_use, array_out, array_in;
ArrayAccessingIndexes array_def, array_use, array_out, array_in, array_priv;
private:
unordered_set<Region*> subRegions, basickBlocks;
std::unordered_set<Region*> subRegions, basickBlocks;
/*next Region which is BB for current BB Region*/
unordered_set<Region*> nextRegions;
std::unordered_set<Region*> nextRegions;
/*prev Regions which is BBs for current BB Region*/
unordered_set<Region*> prevRegions;
std::unordered_set<Region*> prevRegions;
Region* header;
};
void Collapse(Region* region);
void FindPrivateArrays(map<string, vector<LoopGraph*>>& loopGraph, map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& FullIR);
void GetDimensionInfo(LoopGraph* loop, map<DIST::Array*, vector<vector<ArrayDimension>>>& loopDimensionsInfo, int level);
pair<SAPFOR::BasicBlock*, unordered_set<SAPFOR::BasicBlock*>> GetBasicBlocksForLoop(LoopGraph* loop, vector<SAPFOR::BasicBlock*> blocks);
std::map<LoopGraph*, ArrayAccessingIndexes> FindPrivateArrays(std::map<std::string, std::vector<LoopGraph*>>& loopGraph, std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>>& FullIR);
void GetDimensionInfo(LoopGraph* loop, std::map<DIST::Array*, std::vector<std::vector<ArrayDimension>>>& loopDimensionsInfo, int level);
std::pair<SAPFOR::BasicBlock*, std::unordered_set<SAPFOR::BasicBlock*>> GetBasicBlocksForLoop(const LoopGraph* loop, const std::vector<SAPFOR::BasicBlock*> blocks);