improved shared memory parallelization
This commit is contained in:
@@ -81,7 +81,7 @@ static void preventLoopsFromParallelizations(LoopGraph* loop, const set<DIST::Ar
|
|||||||
loop->usedArraysAll.begin(), loop->usedArraysAll.end(),
|
loop->usedArraysAll.begin(), loop->usedArraysAll.end(),
|
||||||
back_inserter(conflict_arrays));
|
back_inserter(conflict_arrays));
|
||||||
|
|
||||||
for(DIST::Array* conflict_array: conflict_arrays)
|
for(auto& conflict_array : conflict_arrays)
|
||||||
{
|
{
|
||||||
// constructing string with array and it's sizes
|
// constructing string with array and it's sizes
|
||||||
string array_bounds;
|
string array_bounds;
|
||||||
@@ -90,11 +90,7 @@ static void preventLoopsFromParallelizations(LoopGraph* loop, const set<DIST::Ar
|
|||||||
{
|
{
|
||||||
if(i != 0)
|
if(i != 0)
|
||||||
array_bounds += ",";
|
array_bounds += ",";
|
||||||
|
array_bounds += "*";
|
||||||
const auto& bounds_pair = array_sizes[i];
|
|
||||||
array_bounds += bounds_pair.first >= 0 ? to_string(bounds_pair.first) : "*";
|
|
||||||
array_bounds += ":";
|
|
||||||
array_bounds += bounds_pair.second >= 0 ? to_string(bounds_pair.second) : "*";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string array_ref = conflict_array->GetShortName() + "(" + array_bounds + ")";
|
string array_ref = conflict_array->GetShortName() + "(" + array_bounds + ")";
|
||||||
@@ -219,7 +215,16 @@ void SelectArrayConfForParallelization(SgProject* proj, map<string, vector<FuncI
|
|||||||
set<DIST::Array*> realRefs;
|
set<DIST::Array*> realRefs;
|
||||||
getRealArrayRefs(arr, arr, realRefs, arrayLinksByFuncCalls);
|
getRealArrayRefs(arr, arr, realRefs, arrayLinksByFuncCalls);
|
||||||
|
|
||||||
int num_of_dims = arr->GetDimSize();
|
bool fullUnknownSizes = true;
|
||||||
|
for (auto& dim : arr->GetSizes())
|
||||||
|
{
|
||||||
|
if (dim.first == dim.second && dim.first != -1)
|
||||||
|
fullUnknownSizes = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fullUnknownSizes && realRefs.find(arr) != realRefs.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
for(DIST::Array* ref : realRefs)
|
for(DIST::Array* ref : realRefs)
|
||||||
usedArrays[ref][DimConf(arr)][byFunc.first].insert(arr);
|
usedArrays[ref][DimConf(arr)][byFunc.first].insert(arr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1336,7 +1336,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
|||||||
detectCopies(allFuncInfo);
|
detectCopies(allFuncInfo);
|
||||||
fillInterfaceBlock(allFuncInfo);
|
fillInterfaceBlock(allFuncInfo);
|
||||||
intentInsertToInterfaces(allFuncInfo);
|
intentInsertToInterfaces(allFuncInfo);
|
||||||
//createInterfacesForAssumedSize(allFuncInfo);
|
createInterfacesForAssumedSize(allFuncInfo);
|
||||||
|
|
||||||
//this call is only for testing
|
//this call is only for testing
|
||||||
//setPureStatus(allFuncInfo);
|
//setPureStatus(allFuncInfo);
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ using std::wstring;
|
|||||||
using std::make_pair;
|
using std::make_pair;
|
||||||
using std::to_string;
|
using std::to_string;
|
||||||
|
|
||||||
|
static bool isIntrincis(const string& name);
|
||||||
|
|
||||||
void insertIntrinsicStat(const vector<FuncInfo*>& allFuncInfo)
|
void insertIntrinsicStat(const vector<FuncInfo*>& allFuncInfo)
|
||||||
{
|
{
|
||||||
for (auto& func : allFuncInfo)
|
for (auto& func : allFuncInfo)
|
||||||
@@ -59,7 +61,7 @@ void insertIntrinsicStat(const vector<FuncInfo*>& allFuncInfo)
|
|||||||
if (intrincis.find(name) != intrincis.end())
|
if (intrincis.find(name) != intrincis.end())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!isIntrinsicFunctionName(name.c_str()))
|
if (!isIntrincis(name))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
void* ptr = call.pointerDetailCallsFrom.first;
|
void* ptr = call.pointerDetailCallsFrom.first;
|
||||||
@@ -123,14 +125,15 @@ void createInterfacesForOutCalls(FuncInfo* func)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool changeIfHasStarRange(SgExpression* arrayDecl)
|
static bool changeIfHasStarRange(SgExpression* arrayDecl, bool doReplace = false)
|
||||||
{
|
{
|
||||||
SgExpression* list = arrayDecl->lhs();
|
SgExpression* list = arrayDecl->lhs();
|
||||||
bool has = false;
|
bool has = doReplace;
|
||||||
|
|
||||||
while (list)
|
while (list)
|
||||||
{
|
{
|
||||||
if (list->lhs()->variant() == STAR_RANGE)
|
const int var = list->lhs()->variant();
|
||||||
|
if (var == STAR_RANGE)
|
||||||
has = true;
|
has = true;
|
||||||
list = list->rhs();
|
list = list->rhs();
|
||||||
}
|
}
|
||||||
@@ -148,6 +151,43 @@ static bool changeIfHasStarRange(SgExpression* arrayDecl)
|
|||||||
return has;
|
return has;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void removeExternalStat(SgStatement* func, const set<string>& addedInterfaceFor)
|
||||||
|
{
|
||||||
|
vector<SgStatement*> toRem;
|
||||||
|
for (auto st = func; st != func->lastNodeOfStmt(); st = st->lexNext())
|
||||||
|
{
|
||||||
|
if (isSgExecutableStatement(st))
|
||||||
|
break;
|
||||||
|
if (st->variant() == CONTAINS_STMT)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (st->variant() == EXTERN_STAT)
|
||||||
|
{
|
||||||
|
vector<SgExpression*> list;
|
||||||
|
SgExpression* ex = st->expr(0);
|
||||||
|
int count = 0;
|
||||||
|
while (ex)
|
||||||
|
{
|
||||||
|
if (addedInterfaceFor.find(ex->lhs()->symbol()->identifier()) == addedInterfaceFor.end())
|
||||||
|
list.push_back(ex->lhs());
|
||||||
|
count++;
|
||||||
|
ex = ex->rhs();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == list.size())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (list.size() == 0)
|
||||||
|
toRem.push_back(st);
|
||||||
|
else
|
||||||
|
st->setExpression(0, makeExprList(list, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& rem : toRem)
|
||||||
|
rem->deleteStmt();
|
||||||
|
}
|
||||||
|
|
||||||
void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFuncInfo)
|
void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFuncInfo)
|
||||||
{
|
{
|
||||||
set<FuncInfo*> hasAssumedSizeArrays;
|
set<FuncInfo*> hasAssumedSizeArrays;
|
||||||
@@ -163,6 +203,8 @@ void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFun
|
|||||||
if (prog == NULL)
|
if (prog == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
vector<SgExpression*> arrayRefs;
|
||||||
|
bool hasRefs = false;
|
||||||
for (int z = 0; z < func->funcParams.countOfPars; ++z)
|
for (int z = 0; z < func->funcParams.countOfPars; ++z)
|
||||||
{
|
{
|
||||||
if (func->funcParams.parametersT[z] == ARRAY_T)
|
if (func->funcParams.parametersT[z] == ARRAY_T)
|
||||||
@@ -181,7 +223,12 @@ void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFun
|
|||||||
if (list->lhs() && list->lhs()->symbol()->identifier() == name)
|
if (list->lhs() && list->lhs()->symbol()->identifier() == name)
|
||||||
{
|
{
|
||||||
if (changeIfHasStarRange(list->lhs()))
|
if (changeIfHasStarRange(list->lhs()))
|
||||||
|
{
|
||||||
|
hasRefs = true;
|
||||||
hasAssumedSizeArrays.insert(func);
|
hasAssumedSizeArrays.insert(func);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
arrayRefs.push_back(list->lhs());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
list = list->rhs();
|
list = list->rhs();
|
||||||
@@ -189,6 +236,10 @@ void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasRefs)
|
||||||
|
for (auto& ref : arrayRefs)
|
||||||
|
changeIfHasStarRange(ref, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,6 +253,11 @@ void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFun
|
|||||||
|
|
||||||
for (auto& func : funcByFile.second)
|
for (auto& func : funcByFile.second)
|
||||||
{
|
{
|
||||||
|
SgProgHedrStmt* prog = isSgProgHedrStmt(func->funcPointer->GetOriginal());
|
||||||
|
if (prog == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
set<string> addedInterfaceFor;
|
||||||
for (auto& elem : func->callsFromV)
|
for (auto& elem : func->callsFromV)
|
||||||
{
|
{
|
||||||
auto it = hasAssumedSizeArrays.find(elem);
|
auto it = hasAssumedSizeArrays.find(elem);
|
||||||
@@ -209,10 +265,13 @@ void createInterfacesForAssumedSize(const map<string, vector<FuncInfo*>>& allFun
|
|||||||
{
|
{
|
||||||
auto callFrom = *it;
|
auto callFrom = *it;
|
||||||
DvmhRegionInserter::createInterfaceBlockForOutCall(func, callFrom);
|
DvmhRegionInserter::createInterfaceBlockForOutCall(func, callFrom);
|
||||||
|
addedInterfaceFor.insert(callFrom->funcName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if (addedInterfaceFor.size())
|
||||||
|
removeExternalStat(prog, addedInterfaceFor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1703,3 +1762,321 @@ void moduleTransfer(const map<string, vector<FuncInfo*>>& allFuncInfo)
|
|||||||
for (auto& func : funcForInterfaceAdd)
|
for (auto& func : funcForInterfaceAdd)
|
||||||
createInterfaceBlockForToCalls(func);
|
createInterfaceBlockForToCalls(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isIntrincis(const string& name)
|
||||||
|
{
|
||||||
|
static set<string> intrinsicF;
|
||||||
|
if (intrinsicF.size() == 0)
|
||||||
|
{
|
||||||
|
intrinsicF.insert(string("abs"));
|
||||||
|
intrinsicF.insert(string("adjustl"));
|
||||||
|
intrinsicF.insert(string("and"));
|
||||||
|
intrinsicF.insert(string("any"));
|
||||||
|
intrinsicF.insert(string("associated"));
|
||||||
|
intrinsicF.insert(string("allocated"));
|
||||||
|
intrinsicF.insert(string("amod"));
|
||||||
|
intrinsicF.insert(string("aimax0"));
|
||||||
|
intrinsicF.insert(string("ajmax0"));
|
||||||
|
intrinsicF.insert(string("akmax0"));
|
||||||
|
intrinsicF.insert(string("aimin0"));
|
||||||
|
intrinsicF.insert(string("ajmin0"));
|
||||||
|
intrinsicF.insert(string("akmin0"));
|
||||||
|
intrinsicF.insert(string("amax1"));
|
||||||
|
intrinsicF.insert(string("amax0"));
|
||||||
|
intrinsicF.insert(string("amin1"));
|
||||||
|
intrinsicF.insert(string("amin0"));
|
||||||
|
intrinsicF.insert(string("aimag"));
|
||||||
|
intrinsicF.insert(string("alog"));
|
||||||
|
intrinsicF.insert(string("alog10"));
|
||||||
|
intrinsicF.insert(string("asin"));
|
||||||
|
intrinsicF.insert(string("asind"));
|
||||||
|
intrinsicF.insert(string("asinh"));
|
||||||
|
intrinsicF.insert(string("acos"));
|
||||||
|
intrinsicF.insert(string("acosd"));
|
||||||
|
intrinsicF.insert(string("acosh"));
|
||||||
|
intrinsicF.insert(string("atan"));
|
||||||
|
intrinsicF.insert(string("atand"));
|
||||||
|
intrinsicF.insert(string("atanh"));
|
||||||
|
intrinsicF.insert(string("atan2"));
|
||||||
|
intrinsicF.insert(string("atan2d"));
|
||||||
|
intrinsicF.insert(string("aint"));
|
||||||
|
intrinsicF.insert(string("anint"));
|
||||||
|
intrinsicF.insert(string("achar"));
|
||||||
|
intrinsicF.insert(string("babs"));
|
||||||
|
intrinsicF.insert(string("bbits"));
|
||||||
|
intrinsicF.insert(string("bbset"));
|
||||||
|
intrinsicF.insert(string("bdim"));
|
||||||
|
intrinsicF.insert(string("biand"));
|
||||||
|
intrinsicF.insert(string("bieor"));
|
||||||
|
intrinsicF.insert(string("bior"));
|
||||||
|
intrinsicF.insert(string("bixor"));
|
||||||
|
intrinsicF.insert(string("btest"));
|
||||||
|
intrinsicF.insert(string("bbtest"));
|
||||||
|
intrinsicF.insert(string("bbclr"));
|
||||||
|
intrinsicF.insert(string("bitest"));
|
||||||
|
intrinsicF.insert(string("bjtest"));
|
||||||
|
intrinsicF.insert(string("bktest"));
|
||||||
|
intrinsicF.insert(string("bessel_j0"));
|
||||||
|
intrinsicF.insert(string("bessel_j1"));
|
||||||
|
intrinsicF.insert(string("bessel_jn"));
|
||||||
|
intrinsicF.insert(string("bessel_y0"));
|
||||||
|
intrinsicF.insert(string("bessel_y1"));
|
||||||
|
intrinsicF.insert(string("bessel_yn"));
|
||||||
|
intrinsicF.insert(string("bmod"));
|
||||||
|
intrinsicF.insert(string("bnot"));
|
||||||
|
intrinsicF.insert(string("bshft"));
|
||||||
|
intrinsicF.insert(string("bshftc"));
|
||||||
|
intrinsicF.insert(string("bsign"));
|
||||||
|
intrinsicF.insert(string("cos"));
|
||||||
|
intrinsicF.insert(string("ccos"));
|
||||||
|
intrinsicF.insert(string("cdcos"));
|
||||||
|
intrinsicF.insert(string("cosd"));
|
||||||
|
intrinsicF.insert(string("cosh"));
|
||||||
|
intrinsicF.insert(string("cotan"));
|
||||||
|
intrinsicF.insert(string("cotand"));
|
||||||
|
intrinsicF.insert(string("ceiling"));
|
||||||
|
intrinsicF.insert(string("cexp"));
|
||||||
|
intrinsicF.insert(string("conjg"));
|
||||||
|
intrinsicF.insert(string("csqrt"));
|
||||||
|
intrinsicF.insert(string("clog"));
|
||||||
|
intrinsicF.insert(string("clog10"));
|
||||||
|
intrinsicF.insert(string("cdlog"));
|
||||||
|
intrinsicF.insert(string("cdlog10"));
|
||||||
|
intrinsicF.insert(string("csin"));
|
||||||
|
intrinsicF.insert(string("cabs"));
|
||||||
|
intrinsicF.insert(string("cdabs"));
|
||||||
|
intrinsicF.insert(string("cdexp"));
|
||||||
|
intrinsicF.insert(string("cdsin"));
|
||||||
|
intrinsicF.insert(string("cdsqrt"));
|
||||||
|
intrinsicF.insert(string("cdtan"));
|
||||||
|
intrinsicF.insert(string("cmplx"));
|
||||||
|
intrinsicF.insert(string("char"));
|
||||||
|
intrinsicF.insert(string("ctan"));
|
||||||
|
intrinsicF.insert(string("cpu_time"));
|
||||||
|
intrinsicF.insert(string("dim"));
|
||||||
|
intrinsicF.insert(string("ddim"));
|
||||||
|
intrinsicF.insert(string("dble"));
|
||||||
|
intrinsicF.insert(string("dfloat"));
|
||||||
|
intrinsicF.insert(string("dfloti"));
|
||||||
|
intrinsicF.insert(string("dflotj"));
|
||||||
|
intrinsicF.insert(string("dflotk"));
|
||||||
|
intrinsicF.insert(string("dint"));
|
||||||
|
intrinsicF.insert(string("dmax1"));
|
||||||
|
intrinsicF.insert(string("dmin1"));
|
||||||
|
intrinsicF.insert(string("dmod"));
|
||||||
|
intrinsicF.insert(string("dprod"));
|
||||||
|
intrinsicF.insert(string("dreal"));
|
||||||
|
intrinsicF.insert(string("dsign"));
|
||||||
|
intrinsicF.insert(string("dshiftl"));
|
||||||
|
intrinsicF.insert(string("dshiftr"));
|
||||||
|
intrinsicF.insert(string("dabs"));
|
||||||
|
intrinsicF.insert(string("dsqrt"));
|
||||||
|
intrinsicF.insert(string("dexp"));
|
||||||
|
intrinsicF.insert(string("dlog"));
|
||||||
|
intrinsicF.insert(string("dlog10"));
|
||||||
|
intrinsicF.insert(string("dsin"));
|
||||||
|
intrinsicF.insert(string("dcos"));
|
||||||
|
intrinsicF.insert(string("dcosd"));
|
||||||
|
intrinsicF.insert(string("dtan"));
|
||||||
|
intrinsicF.insert(string("dtand"));
|
||||||
|
intrinsicF.insert(string("dasin"));
|
||||||
|
intrinsicF.insert(string("dasind"));
|
||||||
|
intrinsicF.insert(string("dasinh"));
|
||||||
|
intrinsicF.insert(string("dacos"));
|
||||||
|
intrinsicF.insert(string("dacosd"));
|
||||||
|
intrinsicF.insert(string("dacosh"));
|
||||||
|
intrinsicF.insert(string("datan"));
|
||||||
|
intrinsicF.insert(string("datand"));
|
||||||
|
intrinsicF.insert(string("datanh"));
|
||||||
|
intrinsicF.insert(string("datan2"));
|
||||||
|
intrinsicF.insert(string("datan2d"));
|
||||||
|
intrinsicF.insert(string("derf"));
|
||||||
|
intrinsicF.insert(string("derfc"));
|
||||||
|
intrinsicF.insert(string("dsind"));
|
||||||
|
intrinsicF.insert(string("dsinh"));
|
||||||
|
intrinsicF.insert(string("dcosh"));
|
||||||
|
intrinsicF.insert(string("dcotan"));
|
||||||
|
intrinsicF.insert(string("dcotand"));
|
||||||
|
intrinsicF.insert(string("dtanh"));
|
||||||
|
intrinsicF.insert(string("dnint"));
|
||||||
|
intrinsicF.insert(string("dcmplx"));
|
||||||
|
intrinsicF.insert(string("dconjg"));
|
||||||
|
intrinsicF.insert(string("dimag"));
|
||||||
|
intrinsicF.insert(string("exp"));
|
||||||
|
intrinsicF.insert(string("erf"));
|
||||||
|
intrinsicF.insert(string("erfc"));
|
||||||
|
intrinsicF.insert(string("erfc_scaled"));
|
||||||
|
intrinsicF.insert(string("etime"));
|
||||||
|
intrinsicF.insert(string("float"));
|
||||||
|
intrinsicF.insert(string("floati"));
|
||||||
|
intrinsicF.insert(string("floatj"));
|
||||||
|
intrinsicF.insert(string("floatk"));
|
||||||
|
intrinsicF.insert(string("floor"));
|
||||||
|
intrinsicF.insert(string("flush"));
|
||||||
|
intrinsicF.insert(string("gamma"));
|
||||||
|
intrinsicF.insert(string("habs"));
|
||||||
|
intrinsicF.insert(string("hbclr"));
|
||||||
|
intrinsicF.insert(string("hbits"));
|
||||||
|
intrinsicF.insert(string("hbset"));
|
||||||
|
intrinsicF.insert(string("hdim"));
|
||||||
|
intrinsicF.insert(string("hiand"));
|
||||||
|
intrinsicF.insert(string("hieor"));
|
||||||
|
intrinsicF.insert(string("hior"));
|
||||||
|
intrinsicF.insert(string("hixor"));
|
||||||
|
intrinsicF.insert(string("hmod"));
|
||||||
|
intrinsicF.insert(string("hnot"));
|
||||||
|
intrinsicF.insert(string("hshft"));
|
||||||
|
intrinsicF.insert(string("hshftc"));
|
||||||
|
intrinsicF.insert(string("hsign"));
|
||||||
|
intrinsicF.insert(string("htest"));
|
||||||
|
intrinsicF.insert(string("huge"));
|
||||||
|
intrinsicF.insert(string("hypot"));
|
||||||
|
intrinsicF.insert(string("iiabs"));
|
||||||
|
intrinsicF.insert(string("iargc"));
|
||||||
|
intrinsicF.insert(string("iiand"));
|
||||||
|
intrinsicF.insert(string("iibclr"));
|
||||||
|
intrinsicF.insert(string("iibits"));
|
||||||
|
intrinsicF.insert(string("iibset"));
|
||||||
|
intrinsicF.insert(string("iidim"));
|
||||||
|
intrinsicF.insert(string("iieor"));
|
||||||
|
intrinsicF.insert(string("iior"));
|
||||||
|
intrinsicF.insert(string("iishft"));
|
||||||
|
intrinsicF.insert(string("iishftc"));
|
||||||
|
intrinsicF.insert(string("iisign"));
|
||||||
|
intrinsicF.insert(string("iixor"));
|
||||||
|
intrinsicF.insert(string("int"));
|
||||||
|
intrinsicF.insert(string("idint"));
|
||||||
|
intrinsicF.insert(string("ifix"));
|
||||||
|
intrinsicF.insert(string("idim"));
|
||||||
|
intrinsicF.insert(string("isign"));
|
||||||
|
intrinsicF.insert(string("index"));
|
||||||
|
intrinsicF.insert(string("iabs"));
|
||||||
|
intrinsicF.insert(string("ibits"));
|
||||||
|
intrinsicF.insert(string("idnint"));
|
||||||
|
intrinsicF.insert(string("ichar"));
|
||||||
|
intrinsicF.insert(string("iachar"));
|
||||||
|
intrinsicF.insert(string("isnan"));
|
||||||
|
intrinsicF.insert(string("iand"));
|
||||||
|
intrinsicF.insert(string("ior"));
|
||||||
|
intrinsicF.insert(string("ibset"));
|
||||||
|
intrinsicF.insert(string("ibclr"));
|
||||||
|
intrinsicF.insert(string("ibchng"));
|
||||||
|
intrinsicF.insert(string("ieor"));
|
||||||
|
intrinsicF.insert(string("ilen"));
|
||||||
|
intrinsicF.insert(string("imag"));
|
||||||
|
intrinsicF.insert(string("imax0"));
|
||||||
|
intrinsicF.insert(string("imax1"));
|
||||||
|
intrinsicF.insert(string("imin0"));
|
||||||
|
intrinsicF.insert(string("imin1"));
|
||||||
|
intrinsicF.insert(string("imod"));
|
||||||
|
intrinsicF.insert(string("inot"));
|
||||||
|
intrinsicF.insert(string("isha"));
|
||||||
|
intrinsicF.insert(string("ishc"));
|
||||||
|
intrinsicF.insert(string("ishft"));
|
||||||
|
intrinsicF.insert(string("ishftc"));
|
||||||
|
intrinsicF.insert(string("ishl"));
|
||||||
|
intrinsicF.insert(string("ixor"));
|
||||||
|
intrinsicF.insert(string("jiabs"));
|
||||||
|
intrinsicF.insert(string("jiand"));
|
||||||
|
intrinsicF.insert(string("jibclr"));
|
||||||
|
intrinsicF.insert(string("jibits"));
|
||||||
|
intrinsicF.insert(string("jibset"));
|
||||||
|
intrinsicF.insert(string("jidim"));
|
||||||
|
intrinsicF.insert(string("jieor"));
|
||||||
|
intrinsicF.insert(string("jior"));
|
||||||
|
intrinsicF.insert(string("jishft"));
|
||||||
|
intrinsicF.insert(string("jishftc"));
|
||||||
|
intrinsicF.insert(string("jisign"));
|
||||||
|
intrinsicF.insert(string("jixor"));
|
||||||
|
intrinsicF.insert(string("jmax0"));
|
||||||
|
intrinsicF.insert(string("jmax1"));
|
||||||
|
intrinsicF.insert(string("jmin0"));
|
||||||
|
intrinsicF.insert(string("jmin1"));
|
||||||
|
intrinsicF.insert(string("jmod"));
|
||||||
|
intrinsicF.insert(string("jnot"));
|
||||||
|
intrinsicF.insert(string("kiabs"));
|
||||||
|
intrinsicF.insert(string("kiand"));
|
||||||
|
intrinsicF.insert(string("kibclr"));
|
||||||
|
intrinsicF.insert(string("kibits"));
|
||||||
|
intrinsicF.insert(string("kibset"));
|
||||||
|
intrinsicF.insert(string("kidim"));
|
||||||
|
intrinsicF.insert(string("kieor"));
|
||||||
|
intrinsicF.insert(string("kior"));
|
||||||
|
intrinsicF.insert(string("kishft"));
|
||||||
|
intrinsicF.insert(string("kishftc"));
|
||||||
|
intrinsicF.insert(string("kisign"));
|
||||||
|
intrinsicF.insert(string("kmax0"));
|
||||||
|
intrinsicF.insert(string("kmax1"));
|
||||||
|
intrinsicF.insert(string("kmin0"));
|
||||||
|
intrinsicF.insert(string("kmin1"));
|
||||||
|
intrinsicF.insert(string("kmod"));
|
||||||
|
intrinsicF.insert(string("knot"));
|
||||||
|
intrinsicF.insert(string("len"));
|
||||||
|
intrinsicF.insert(string("len_trim"));
|
||||||
|
intrinsicF.insert(string("lge"));
|
||||||
|
intrinsicF.insert(string("lgt"));
|
||||||
|
intrinsicF.insert(string("lle"));
|
||||||
|
intrinsicF.insert(string("llt"));
|
||||||
|
intrinsicF.insert(string("log_gamma"));
|
||||||
|
intrinsicF.insert(string("log"));
|
||||||
|
intrinsicF.insert(string("log10"));
|
||||||
|
intrinsicF.insert(string("lshft"));
|
||||||
|
intrinsicF.insert(string("lshift"));
|
||||||
|
intrinsicF.insert(string("max"));
|
||||||
|
intrinsicF.insert(string("max0"));
|
||||||
|
intrinsicF.insert(string("max1"));
|
||||||
|
intrinsicF.insert(string("merge_bits"));
|
||||||
|
intrinsicF.insert(string("min"));
|
||||||
|
intrinsicF.insert(string("minval"));
|
||||||
|
intrinsicF.insert(string("maxval"));
|
||||||
|
intrinsicF.insert(string("min0"));
|
||||||
|
intrinsicF.insert(string("min1"));
|
||||||
|
intrinsicF.insert(string("mod"));
|
||||||
|
intrinsicF.insert(string("modulo"));
|
||||||
|
intrinsicF.insert(string("not"));
|
||||||
|
intrinsicF.insert(string("nint"));
|
||||||
|
intrinsicF.insert(string("null"));
|
||||||
|
intrinsicF.insert(string("or"));
|
||||||
|
intrinsicF.insert(string("popcnt"));
|
||||||
|
intrinsicF.insert(string("poppar"));
|
||||||
|
intrinsicF.insert(string("random_number"));
|
||||||
|
intrinsicF.insert(string("real"));
|
||||||
|
intrinsicF.insert(string("reshape"));
|
||||||
|
intrinsicF.insert(string("present"));
|
||||||
|
intrinsicF.insert(string("repeat"));
|
||||||
|
intrinsicF.insert(string("rshft"));
|
||||||
|
intrinsicF.insert(string("rshift"));
|
||||||
|
intrinsicF.insert(string("sign"));
|
||||||
|
intrinsicF.insert(string("size"));
|
||||||
|
intrinsicF.insert(string("scan"));
|
||||||
|
intrinsicF.insert(string("sizeof"));
|
||||||
|
intrinsicF.insert(string("sngl"));
|
||||||
|
intrinsicF.insert(string("sqrt"));
|
||||||
|
intrinsicF.insert(string("sin"));
|
||||||
|
intrinsicF.insert(string("sind"));
|
||||||
|
intrinsicF.insert(string("sinh"));
|
||||||
|
intrinsicF.insert(string("shifta"));
|
||||||
|
intrinsicF.insert(string("shiftl"));
|
||||||
|
intrinsicF.insert(string("shiftr"));
|
||||||
|
intrinsicF.insert(string("sum"));
|
||||||
|
intrinsicF.insert(string("tan"));
|
||||||
|
intrinsicF.insert(string("tand"));
|
||||||
|
intrinsicF.insert(string("tanh"));
|
||||||
|
intrinsicF.insert(string("tiny"));
|
||||||
|
intrinsicF.insert(string("trailz"));
|
||||||
|
intrinsicF.insert(string("trim"));
|
||||||
|
intrinsicF.insert(string("xor"));
|
||||||
|
intrinsicF.insert(string("wtime"));
|
||||||
|
intrinsicF.insert(string("zabs"));
|
||||||
|
intrinsicF.insert(string("zcos"));
|
||||||
|
intrinsicF.insert(string("zexp"));
|
||||||
|
intrinsicF.insert(string("zlog"));
|
||||||
|
intrinsicF.insert(string("zsin"));
|
||||||
|
intrinsicF.insert(string("zsqrt"));
|
||||||
|
intrinsicF.insert(string("ztan"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intrinsicF.find(name) != intrinsicF.end())
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_SPF "2327"
|
#define VERSION_SPF "2329"
|
||||||
|
|||||||
Reference in New Issue
Block a user