DataFlow improvements #22
@@ -9,10 +9,10 @@
|
||||
#include "../CFGraph.h"
|
||||
#include "../IR.h"
|
||||
|
||||
template <class DataType, class NodeType>
|
||||
class BackwardDataFlowAnalysis : public DataFlowAnalysis<DataType, NodeType> {
|
||||
template <class NodeType>
|
||||
class BackwardDataFlowAnalysis : public DataFlowAnalysis<NodeType> {
|
||||
std::vector<SAPFOR::BasicBlock*> reorderSequence(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
||||
const std::set<SAPFOR::BasicBlock*> back_edge_sources);
|
||||
const std::set<SAPFOR::BasicBlock*> back_edge_sources);
|
||||
public:
|
||||
void fit(const std::vector<SAPFOR::BasicBlock*>& blocks);
|
||||
};
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
/* Note: this file should be included in backward_data_flow.h to provide template definitions */
|
||||
|
||||
// minimizes the number of blocks beween the ends of back edges
|
||||
template <class DataType, class NodeType>
|
||||
template <class NodeType>
|
||||
std::vector<SAPFOR::BasicBlock*>
|
||||
BackwardDataFlowAnalysis<DataType, NodeType>::reorderSequence(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
||||
const std::set<SAPFOR::BasicBlock*> back_edge_sources)
|
||||
BackwardDataFlowAnalysis<NodeType>::reorderSequence(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
||||
const std::set<SAPFOR::BasicBlock*> back_edge_sources)
|
||||
{
|
||||
std::vector<SAPFOR::BasicBlock*> res = { };
|
||||
|
||||
@@ -40,8 +40,8 @@ BackwardDataFlowAnalysis<DataType, NodeType>::reorderSequence(const std::vector<
|
||||
return res;
|
||||
}
|
||||
|
||||
template <class DataType, class NodeType>
|
||||
void BackwardDataFlowAnalysis<DataType, NodeType>::fit(const std::vector<SAPFOR::BasicBlock*>& blocks)
|
||||
template <class NodeType>
|
||||
void BackwardDataFlowAnalysis<NodeType>::fit(const std::vector<SAPFOR::BasicBlock*>& blocks)
|
||||
{
|
||||
std::set<std::pair<SAPFOR::BasicBlock*, SAPFOR::BasicBlock*>> back_edges = {};
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ public:
|
||||
void setBlock(SAPFOR::BasicBlock* b) { bb = b; }
|
||||
};
|
||||
|
||||
template <class DataType, class NodeType>
|
||||
template <class NodeType>
|
||||
class DataFlowAnalysis {
|
||||
protected:
|
||||
std::vector<NodeType*> nodes;
|
||||
|
||||
@@ -67,8 +67,8 @@ void DataFlowAnalysisNode<DataType>::doStep()
|
||||
|
||||
/* definitions for DataFlowAnalysis class */
|
||||
|
||||
template <class DataType, class NodeType>
|
||||
void DataFlowAnalysis<DataType, NodeType>::analyze() {
|
||||
template <class NodeType>
|
||||
void DataFlowAnalysis<NodeType>::analyze() {
|
||||
auto curr = 0;
|
||||
auto stop = nodes.size();
|
||||
|
||||
@@ -103,10 +103,10 @@ void DataFlowAnalysis<DataType, NodeType>::analyze() {
|
||||
}
|
||||
}
|
||||
|
||||
template <class DataType, class NodeType>
|
||||
DataFlowAnalysis<DataType, NodeType>::~DataFlowAnalysis()
|
||||
template <class NodeType>
|
||||
DataFlowAnalysis<NodeType>::~DataFlowAnalysis()
|
||||
{
|
||||
for (DataFlowAnalysisNode<DataType>* node : nodes)
|
||||
for (NodeType* node : nodes)
|
||||
delete node;
|
||||
|
||||
nodes.clear();
|
||||
|
||||
@@ -271,7 +271,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class LiveVarAnalysis : public BackwardDataFlowAnalysis<map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>, LiveVarAnalysisNode> {
|
||||
class LiveVarAnalysis : public BackwardDataFlowAnalysis<LiveVarAnalysisNode> {
|
||||
protected:
|
||||
vector<SAPFOR::Argument*>& formal_parameters;
|
||||
vector<LiveDeadVarsForCall>& fcalls;
|
||||
|
||||
@@ -298,7 +298,7 @@ public:
|
||||
const vector<bool>& getResult() { return useful; };
|
||||
};
|
||||
|
||||
class DeadCodeAnalysis : public BackwardDataFlowAnalysis<map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>, DeadCodeAnalysisNode> {
|
||||
class DeadCodeAnalysis : public BackwardDataFlowAnalysis<DeadCodeAnalysisNode> {
|
||||
protected:
|
||||
vector<SAPFOR::Argument*>& formal_parameters;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user