fix algorythm
This commit is contained in:
@@ -8,6 +8,11 @@
|
||||
#include "graph_loops.h"
|
||||
#include "CFGraph/CFGraph.h"
|
||||
|
||||
struct RegionInstruction
|
||||
{
|
||||
ArrayAccessingIndexes def, use, in, out;
|
||||
};
|
||||
|
||||
class Region : public SAPFOR::BasicBlock {
|
||||
public:
|
||||
Region() { header = nullptr; }
|
||||
@@ -20,13 +25,25 @@ public:
|
||||
|
||||
void setHeader(Region* region) { header = region; }
|
||||
|
||||
std::unordered_set<Region*>& getBasickBlocks() { return basickBlocks; }
|
||||
std::vector<Region*>& getBasickBlocks() { return basickBlocks; }
|
||||
|
||||
void addBasickBlocks(Region* region) { basickBlocks.insert(region); }
|
||||
void addBasickBlocks(Region* region) { basickBlocks.push_back(region); }
|
||||
|
||||
const std::unordered_set<Region*>& getPrevRegions() { return prevRegions; }
|
||||
|
||||
std::unordered_set<Region*> getNextRegions() { return nextRegions; }
|
||||
std::unordered_set<Region*>& getNextRegions() { return nextRegions; }
|
||||
|
||||
void removeNextRegion(Region* region)
|
||||
{
|
||||
if (nextRegions.find(region) != nextRegions.end())
|
||||
nextRegions.erase(region);
|
||||
}
|
||||
|
||||
void removePrevRegion(Region* region)
|
||||
{
|
||||
if (prevRegions.find(region) != prevRegions.end())
|
||||
prevRegions.erase(region);
|
||||
}
|
||||
|
||||
void addPrevRegion(Region* region) { prevRegions.insert(region); }
|
||||
|
||||
@@ -48,13 +65,18 @@ public:
|
||||
|
||||
void addSubRegions(Region* region) { subRegions.insert(region); }
|
||||
|
||||
std::vector<RegionInstruction> instructions;
|
||||
|
||||
ArrayAccessingIndexes array_def, array_use, array_out, array_in, array_priv;
|
||||
|
||||
private:
|
||||
std::unordered_set<Region*> subRegions, basickBlocks;
|
||||
std::vector<Region*> basickBlocks;
|
||||
std::unordered_set<Region*> subRegions;
|
||||
/*next Region which is BB for current BB Region*/
|
||||
std::unordered_set<Region*> nextRegions;
|
||||
/*prev Regions which is BBs for current BB Region*/
|
||||
std::unordered_set<Region*> prevRegions;
|
||||
Region* header;
|
||||
};
|
||||
|
||||
void TopologySort(std::vector<Region*>& basikBlocks, Region* header);
|
||||
Reference in New Issue
Block a user