improved
This commit is contained in:
@@ -1029,7 +1029,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
|||||||
auto funcsForFile = getObjectForFileFromMap(file_name, allFuncInfo);
|
auto funcsForFile = getObjectForFileFromMap(file_name, allFuncInfo);
|
||||||
for (auto& func : funcsForFile)
|
for (auto& func : funcsForFile)
|
||||||
if(func->funcPointer->variant() != ENTRY_STAT)
|
if(func->funcPointer->variant() != ENTRY_STAT)
|
||||||
removeDeadCode(func->funcPointer, allFuncInfo, commonBlocks);
|
countOfTransform += removeDeadCode(func->funcPointer, allFuncInfo, commonBlocks);
|
||||||
}
|
}
|
||||||
else if (curr_regime == TEST_PASS)
|
else if (curr_regime == TEST_PASS)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -472,34 +472,21 @@ int removeDeadCode(SgStatement* func,
|
|||||||
READ_STAT
|
READ_STAT
|
||||||
};
|
};
|
||||||
|
|
||||||
static const set<int> skip =
|
|
||||||
{
|
|
||||||
PROG_HEDR,
|
|
||||||
PROC_HEDR,
|
|
||||||
FUNC_HEDR
|
|
||||||
};
|
|
||||||
|
|
||||||
vector<SgStatement*> remove;
|
vector<SgStatement*> remove;
|
||||||
SgStatement* start = intervalDelStart ? intervalDelStart : func;
|
SgStatement* start = intervalDelStart ? intervalDelStart : func;
|
||||||
SgStatement* end = intervalDelEnd ? intervalDelEnd : func->lastNodeOfStmt();
|
SgStatement* end = intervalDelEnd ? intervalDelEnd : func->lastNodeOfStmt();
|
||||||
|
|
||||||
auto st = start;
|
for (auto st = start; st != end; st = st->lexNext())
|
||||||
if (skip.find(st->variant()) != skip.end())
|
|
||||||
st = st->lexNext();
|
|
||||||
|
|
||||||
for (; st != end; st = st->lexNext())
|
|
||||||
{
|
{
|
||||||
if (skip.find(st->variant()) != skip.end())
|
const int var = st->variant();
|
||||||
{
|
if (removable.find(var) != removable.end() && useful.find(st) == useful.end())
|
||||||
st = st->lastNodeOfStmt();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removable.find(st->variant()) != removable.end() && useful.find(st) == useful.end())
|
|
||||||
{
|
{
|
||||||
remove.push_back(st);
|
remove.push_back(st);
|
||||||
st = st->lastNodeOfStmt();
|
st = st->lastNodeOfStmt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (var == CONTAINS_STMT)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& rem : remove)
|
for (auto& rem : remove)
|
||||||
@@ -513,21 +500,9 @@ int removeDeadCode(SgStatement* func,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
remove.clear();
|
remove.clear();
|
||||||
|
for (auto st = start; st != end; st = st->lexNext())
|
||||||
st = start;
|
|
||||||
if (skip.find(st->variant()) != skip.end())
|
|
||||||
st = st->lexNext();
|
|
||||||
|
|
||||||
for (; st != end; st = st->lexNext())
|
|
||||||
{
|
{
|
||||||
const int var = st->variant();
|
const int var = st->variant();
|
||||||
|
|
||||||
if (skip.find(var) != skip.end())
|
|
||||||
{
|
|
||||||
st = st->lastNodeOfStmt();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) &&
|
if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) &&
|
||||||
st->lexNext()->variant() == CONTROL_END)
|
st->lexNext()->variant() == CONTROL_END)
|
||||||
{
|
{
|
||||||
@@ -550,6 +525,9 @@ int removeDeadCode(SgStatement* func,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: SWITCH and other block statements
|
//TODO: SWITCH and other block statements
|
||||||
|
|
||||||
|
if (var == CONTAINS_STMT)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -562,6 +540,5 @@ int removeDeadCode(SgStatement* func,
|
|||||||
} while (remove.size());
|
} while (remove.size());
|
||||||
|
|
||||||
deleteCFG(cfg);
|
deleteCFG(cfg);
|
||||||
|
|
||||||
return countOfTransform;
|
return countOfTransform;
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_SPF "2314"
|
#define VERSION_SPF "2315"
|
||||||
|
|||||||
Reference in New Issue
Block a user