|
|
|
|
@@ -135,7 +135,8 @@ static void buildUseDef(SAPFOR::BasicBlock* block, set<SAPFOR::Argument*>& use,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeadCodeAnalysisNode : public DataFlowAnalysisNode<map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>> {
|
|
|
|
|
class DeadCodeAnalysisNode : public DataFlowAnalysisNode<map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>>
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
vector<bool> useful;
|
|
|
|
|
bool useful_block = false;
|
|
|
|
|
@@ -198,28 +199,28 @@ public:
|
|
|
|
|
return updated;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>> getIn() {
|
|
|
|
|
map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>> getIn()
|
|
|
|
|
{
|
|
|
|
|
return getBlock()->getLiveOut();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>> getOut() {
|
|
|
|
|
map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>> getOut()
|
|
|
|
|
{
|
|
|
|
|
return getBlock()->getLiveIn();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool addIn(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data) {
|
|
|
|
|
bool inserted = getBlock()->addLiveOut(data);
|
|
|
|
|
|
|
|
|
|
return inserted;
|
|
|
|
|
bool addIn(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data)
|
|
|
|
|
{
|
|
|
|
|
return getBlock()->addLiveOut(data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool addOut(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data) {
|
|
|
|
|
bool addOut(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data)
|
|
|
|
|
{
|
|
|
|
|
return getBlock()->addLiveIn(data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool updateState() {
|
|
|
|
|
if(getBlock()->getInstructions()[0]->getInstruction()->getOperator()->lineNumber() == 58)
|
|
|
|
|
int b = 51;
|
|
|
|
|
|
|
|
|
|
bool updateState()
|
|
|
|
|
{
|
|
|
|
|
bool updated = false;
|
|
|
|
|
|
|
|
|
|
if (!useful_block)
|
|
|
|
|
@@ -231,7 +232,8 @@ public:
|
|
|
|
|
return updated;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool forwardData(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data) {
|
|
|
|
|
bool forwardData(const map<SAPFOR::Argument*, vector<SAPFOR::BasicBlock*>>& data)
|
|
|
|
|
{
|
|
|
|
|
bool inserted = false;
|
|
|
|
|
SAPFOR::BasicBlock* bb= getBlock();
|
|
|
|
|
|
|
|
|
|
@@ -315,12 +317,14 @@ public:
|
|
|
|
|
const vector<bool>& getResult() { return useful; }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class DeadCodeAnalysis : public BackwardDataFlowAnalysis<DeadCodeAnalysisNode> {
|
|
|
|
|
class DeadCodeAnalysis : public BackwardDataFlowAnalysis<DeadCodeAnalysisNode>
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
vector<SAPFOR::Argument*>& formal_parameters;
|
|
|
|
|
const map<string, FuncInfo*>& funcByName;
|
|
|
|
|
|
|
|
|
|
DeadCodeAnalysisNode* createNode(SAPFOR::BasicBlock* block) override {
|
|
|
|
|
DeadCodeAnalysisNode* createNode(SAPFOR::BasicBlock* block) override
|
|
|
|
|
{
|
|
|
|
|
return new DeadCodeAnalysisNode(block, formal_parameters, funcByName);
|
|
|
|
|
}
|
|
|
|
|
public:
|
|
|
|
|
|