cleanup and replaced parseFortranDouble to strtod
This commit is contained in:
@@ -1635,9 +1635,9 @@ void loopAnalyzer(SgFile *file, vector<ParallelRegion*> ®ions, map<tuple<int,
|
||||
string fName = file->functions(i)->symbol()->identifier();
|
||||
#if _WIN32
|
||||
if (file->functions(i)->variant() != MODULE_STMT)
|
||||
sendMessage_2lvl(wstring(L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '") + wstring(fName.begin(), fName.end()) + L"'");
|
||||
sendMessage_2lvl(wstring(L"обработка функции '") + wstring(fName.begin(), fName.end()) + L"'");
|
||||
else
|
||||
sendMessage_2lvl(wstring(L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '") + wstring(fName.begin(), fName.end()) + L"'");
|
||||
sendMessage_2lvl(wstring(L"обработка модуля '") + wstring(fName.begin(), fName.end()) + L"'");
|
||||
#else
|
||||
if (file->functions(i)->variant() != MODULE_STMT)
|
||||
sendMessage_2lvl(wstring(L"processing function '") + wstring(fName.begin(), fName.end()) + L"'");
|
||||
@@ -1712,8 +1712,8 @@ void loopAnalyzer(SgFile *file, vector<ParallelRegion*> ®ions, map<tuple<int,
|
||||
|
||||
const ParallelRegionLines* prevParLines = NULL;
|
||||
double prevLinesWeight = 1.0;
|
||||
|
||||
double currentWeight = 1.0;
|
||||
|
||||
while (st != lastNode)
|
||||
{
|
||||
createNeededException();
|
||||
@@ -2189,7 +2189,7 @@ void loopAnalyzer(SgFile *file, vector<ParallelRegion*> ®ions, map<tuple<int,
|
||||
{
|
||||
string fName = file->functions(i)->symbol()->identifier();
|
||||
#ifdef _WIN32
|
||||
sendMessage_2lvl(wstring(L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ") + std::to_wstring(idx) + L"/" + std::to_wstring(convertedLoopInfo.size()));
|
||||
sendMessage_2lvl(wstring(L"обработка цикла ") + std::to_wstring(idx) + L"/" + std::to_wstring(convertedLoopInfo.size()));
|
||||
#else
|
||||
sendMessage_2lvl(wstring(L"processing loop ") + std::to_wstring(idx) + L"/" + std::to_wstring(convertedLoopInfo.size()));
|
||||
#endif
|
||||
|
||||
@@ -106,7 +106,7 @@ static void updateRegionInfo(SgStatement *st, map<string, pair<Statement*, State
|
||||
|
||||
extendRegionInfo(st, startEnd, lines_);
|
||||
|
||||
set<string> calls_from_statement;
|
||||
set<string> callsFromStatement;
|
||||
|
||||
if (st->variant() == PROC_STAT)
|
||||
{
|
||||
@@ -114,16 +114,16 @@ static void updateRegionInfo(SgStatement *st, map<string, pair<Statement*, State
|
||||
//check contains
|
||||
if (mapFuncs.find(containsPrefix + fullName) != mapFuncs.end())
|
||||
fullName = containsPrefix + fullName;
|
||||
calls_from_statement.insert(fullName);
|
||||
callsFromStatement.insert(fullName);
|
||||
}
|
||||
|
||||
for (int z = 0; z < 3; ++z)
|
||||
findFuncCalls(st->expr(z), calls_from_statement, containsPrefix, mapFuncs);
|
||||
findFuncCalls(st->expr(z), callsFromStatement, containsPrefix, mapFuncs);
|
||||
|
||||
string filename = st->fileName();
|
||||
int line = st->lineNumber();
|
||||
|
||||
for (const auto &func_name : calls_from_statement)
|
||||
for (const auto &func_name : callsFromStatement)
|
||||
funcCallFromReg[func_name][filename].insert(line);
|
||||
}
|
||||
|
||||
@@ -294,71 +294,6 @@ static void checkForEmpty(SgStatement *start, SgStatement *end, vector<Messages>
|
||||
}
|
||||
}
|
||||
|
||||
static bool parseFortranDouble(const char* str, double &val)
|
||||
{
|
||||
int base_sign = 1, exp_sign = 1;
|
||||
|
||||
int integer_part = 0, power = 0;
|
||||
double decimal_part = 0;
|
||||
while (*str && *str != '.' && *str != 'd' && *str != 'D')
|
||||
{
|
||||
if (*str >= '0' && *str <= '9')
|
||||
integer_part = integer_part * 10 + (*str - '0');
|
||||
else if (*str == '-')
|
||||
base_sign = -1;
|
||||
else if (*str == '+')
|
||||
base_sign = 1;
|
||||
|
||||
str++;
|
||||
}
|
||||
|
||||
if (*str == '.')
|
||||
{
|
||||
str++;
|
||||
|
||||
int base = 10;
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
decimal_part += double(*str - '0') / base;
|
||||
str++;
|
||||
base *= 10;
|
||||
}
|
||||
}
|
||||
|
||||
if (*str == 'd' || *str == 'D')
|
||||
{
|
||||
str++;
|
||||
|
||||
while (*str == '+' || *str == '-' || *str >= '0' && *str <= '9')
|
||||
{
|
||||
if (*str >= '0' && *str <= '9')
|
||||
power = power * 10 + (*str - '0');
|
||||
else if (*str == '-')
|
||||
exp_sign = -1;
|
||||
else if (*str == '+')
|
||||
exp_sign = 1;
|
||||
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
double result = integer_part + decimal_part;
|
||||
|
||||
for(int i = 0; i < power; i++)
|
||||
{
|
||||
if (exp_sign > 0)
|
||||
result *= 10;
|
||||
else
|
||||
result /= 10;
|
||||
}
|
||||
|
||||
if (base_sign < 0)
|
||||
result = -result;
|
||||
|
||||
val = result;
|
||||
return true;
|
||||
}
|
||||
|
||||
void fillRegionLines(SgFile *file, vector<ParallelRegion*> ®ions, vector<Messages>& messagesForFile, vector<LoopGraph*> *loops, vector<FuncInfo*> *funcs)
|
||||
{
|
||||
map<string, FuncInfo*> mapFuncs;
|
||||
@@ -453,7 +388,6 @@ void fillRegionLines(SgFile *file, vector<ParallelRegion*> ®ions, vector<Mess
|
||||
while (apply_fragment)
|
||||
{
|
||||
auto *curr = apply_fragment->lhs();
|
||||
|
||||
if (curr)
|
||||
{
|
||||
__spf_print(1, "%s %d\n", curr->unparse(), curr->variant());
|
||||
@@ -462,18 +396,15 @@ void fillRegionLines(SgFile *file, vector<ParallelRegion*> ®ions, vector<Mess
|
||||
{
|
||||
if (curr->lhs() &&
|
||||
isSgValueExp(curr->lhs()) &&
|
||||
isSgValueExp(curr->lhs())->doubleValue() &&
|
||||
parseFortranDouble(isSgValueExp(curr->lhs())->doubleValue(), fragmentWeight))
|
||||
isSgValueExp(curr->lhs())->doubleValue())
|
||||
{
|
||||
fragmentWeight = strtod(isSgValueExp(curr->lhs())->doubleValue(), NULL);
|
||||
__spf_print(1, "->> %lf\n", fragmentWeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
__spf_print(1, "WEIGHT clause without double argument\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
apply_fragment = apply_fragment->rhs();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1418,32 +1418,30 @@ ParallelRegion* getRegionByLine(const vector<ParallelRegion*>& regions, const st
|
||||
std::pair<ParallelRegion*, const ParallelRegionLines*> getRegionAndLinesByLine(const vector<ParallelRegion*>& regions, const string& file, const int line)
|
||||
{
|
||||
if (regions.size() == 1 && regions[0]->GetName() == "DEFAULT") // only default
|
||||
return {regions[0], NULL};
|
||||
|
||||
return { regions[0], NULL };
|
||||
else if (regions.size() > 0)
|
||||
{
|
||||
map<ParallelRegion*, const ParallelRegionLines*> regFound;
|
||||
|
||||
const ParallelRegionLines* foundLines = nullptr;
|
||||
const ParallelRegionLines* foundLines = NULL;
|
||||
|
||||
for (int i = 0; i < regions.size(); ++i)
|
||||
if (regions[i]->HasThisLine(line, file, &foundLines))
|
||||
regFound[regions[i]] = foundLines;
|
||||
|
||||
if (regFound.size() == 0)
|
||||
return {NULL, NULL};
|
||||
return { NULL, NULL };
|
||||
else if (regFound.size() == 1)
|
||||
return *regFound.begin();
|
||||
else
|
||||
{
|
||||
__spf_print(1, "WARN: this lines included in more than one region!!\n");
|
||||
return {NULL, NULL};
|
||||
return { NULL, NULL };
|
||||
}
|
||||
}
|
||||
else
|
||||
return {NULL, NULL};
|
||||
return { NULL, NULL };
|
||||
|
||||
return {NULL, NULL};
|
||||
return { NULL, NULL };
|
||||
}
|
||||
|
||||
set<ParallelRegion*> getAllRegionsByLine(const vector<ParallelRegion*>& regions, const string& file, const int line)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define VERSION_SPF "2422"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user