Kaydet (Commit) 9b79a443 authored tarafından Tor Lillqvist's avatar Tor Lillqvist Kaydeden (comit) László Németh

Avoid pointless single-line wrapper for OpenCL isnan()

Change-Id: I4056a1afac1413616a06d0b2f03d4bdead6cad10
üst f0249a88
......@@ -57,9 +57,8 @@ static const char* publicFunc =
" return (as_ulong(fVal) & 0XFFFF); // any other error\n"
"}\n"
"\n"
"int isNan(double a) { return isnan(a); }\n"
"double fsum_count(double a, double b, __private int *p) {\n"
" bool t = isNan(a);\n"
" bool t = isnan(a);\n"
" (*p) += t?0:1;\n"
" return t?b:a+b;\n"
"}\n"
......@@ -75,8 +74,8 @@ static const char* publicFunc =
" (*p) += t?0:1;\n"
" return result;\n"
"}\n"
"double fsum(double a, double b) { return isNan(a)?b:a+b; }\n"
"double legalize(double a, double b) { return isNan(a)?b:a;}\n"
"double fsum(double a, double b) { return isnan(a)?b:a+b; }\n"
"double legalize(double a, double b) { return isnan(a)?b:a;}\n"
"double fsub(double a, double b) { return a-b; }\n"
"double fdiv(double a, double b) { return a/b; }\n"
"double strequal(unsigned a, unsigned b) { return (a==b)?1.0:0; }\n"
......@@ -906,7 +905,7 @@ public:
virtual std::string GenSlidingWindowDeclRef( bool nested ) const override
{
std::stringstream ss;
ss << "(!isNan(" << VectorRef::GenSlidingWindowDeclRef();
ss << "(!isnan(" << VectorRef::GenSlidingWindowDeclRef();
ss << ")?" << VectorRef::GenSlidingWindowDeclRef();
ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested);
ss << ")";
......@@ -1151,7 +1150,7 @@ public:
virtual std::string GenSlidingWindowDeclRef( bool nested ) const override
{
std::stringstream ss;
ss << "(!isNan(" << mDoubleArgument.GenSlidingWindowDeclRef();
ss << "(!isnan(" << mDoubleArgument.GenSlidingWindowDeclRef();
ss << ")?" << mDoubleArgument.GenSlidingWindowDeclRef();
ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested);
ss << ")";
......@@ -1401,12 +1400,12 @@ public:
ss << " tmp = " << mpCodeGen->GetBottom() << ";\n";
ss << " int loopOffset = l*512;\n";
ss << " if((loopOffset + lidx + offset + 256) < end) {\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << ", tmp);\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)";
ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)";
ss << ", tmp);\n";
ss << " } else if ((loopOffset + lidx + offset) < end)\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << ", tmp);\n";
ss << " shm_buf[lidx] = tmp;\n";
ss << " barrier(CLK_LOCAL_MEM_FENCE);\n";
......@@ -1734,7 +1733,7 @@ public:
if (!bNanHandled)
{
ss << "if (isNan(";
ss << "if (isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
if (ZeroReturnZero())
......@@ -1895,7 +1894,7 @@ public:
static_cast<const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp3 << pSVR->GetArrayLength();
temp3 << ")||isNan(" << vSubArguments[i]
temp3 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef();
temp3 << ")?0:";
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef();
......@@ -1908,7 +1907,7 @@ public:
static_cast<const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp3 << pSVR->GetArrayLength();
temp3 << ")||isNan(" << vSubArguments[i]
temp3 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(true);
temp3 << ")?0:";
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
......@@ -1971,7 +1970,7 @@ public:
static_cast<const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp4 << pSVR->GetArrayLength();
temp4 << ")||isNan(" << vSubArguments[i]
temp4 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef();
temp4 << ")?0:";
temp4 << vSubArguments[i]->GenSlidingWindowDeclRef();
......@@ -1984,7 +1983,7 @@ public:
static_cast<const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken());
temp4 << pSVR->GetArrayLength();
temp4 << ")||isNan(" << vSubArguments[i]
temp4 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(true);
temp4 << ")?0:";
temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
......@@ -2032,7 +2031,7 @@ public:
virtual std::string Gen2( const std::string& lhs, const std::string& rhs ) const override
{
std::stringstream ss;
ss << "(isNan(" << lhs << ")?" << rhs << ":" << rhs << "+1.0)";
ss << "(isnan(" << lhs << ")?" << rhs << ":" << rhs << "+1.0)";
return ss.str();
}
virtual std::string BinFuncName() const override { return "fcount"; }
......
......@@ -54,7 +54,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
ss << " {\n";
ss << " x = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
ss << " if (isNan(x))\n";
ss << " if (isnan(x))\n";
ss << " x = 0.0;\n";
ss << " }\n";
}
......@@ -86,7 +86,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
ss << " {\n";
ss << " N = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n";
ss << " if (isNan(N))\n";
ss << " if (isnan(N))\n";
ss << " N = 0.0;\n";
ss << " }\n";
}
......@@ -225,7 +225,7 @@ void OpGestep::GenSlidingWindowFunction(
}
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
ss << " if (isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
ss << " tmp"<<i<<" = 0;\n";
......
......@@ -45,7 +45,7 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss,
formula::SingleVectorRefToken *>(tmpCur0);
ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength();
ss<< ";\n";
ss <<" if(gid0 >= buffer_len"<<j<<" || isNan(";
ss <<" if(gid0 >= buffer_len"<<j<<" || isnan(";
ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" tmp = 1;\n else\n";
......@@ -78,14 +78,14 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss,
}
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 1;\n else\n";
}
else
{
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 1;\n else\n";
......@@ -130,7 +130,7 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss,
formula::SingleVectorRefToken *>(tmpCur0);
ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength();
ss<< ";\n";
ss <<" if(gid0 >= buffer_len"<<j<<" || isNan(";
ss <<" if(gid0 >= buffer_len"<<j<<" || isnan(";
ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" tmp = 0;\n else\n";
......@@ -163,14 +163,14 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss,
}
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 0;\n else\n";
}
else
{
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 0;\n else\n";
......@@ -204,7 +204,7 @@ void OpNot::GenSlidingWindowFunction(std::stringstream &ss,
{
const formula::SingleVectorRefToken*pCurDVR= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isNan(";
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan(";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" tmp = 0;\n else\n";
......@@ -244,7 +244,7 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss,
{
const formula::SingleVectorRefToken*pCurDVR= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isNan(";
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan(";
ss <<rArg->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" tmp = 0;\n else\n";
......@@ -279,14 +279,14 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss,
}
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{
ss <<" if(isNan("<<rArg->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 0;\n else\n";
}
else
{
ss <<" if(isNan("<<rArg->GenSlidingWindowDeclRef();
ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n";
ss <<" tmp = 0;\n else\n";
......@@ -324,7 +324,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
{
if(vSubArguments.size()==3)
{
ss << " if(isNan(";
ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
......@@ -339,7 +339,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
}
if(vSubArguments.size()==2)
{
ss << " if(isNan(";
ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
......@@ -352,7 +352,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
}
if(vSubArguments.size()==1)
{
ss << " if(isNan(";
ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -229,7 +229,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
ss << " if(singleIndex>=";
ss << pTmpDVR1->GetArrayLength();
ss << " ||";
ss << "isNan(";
ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(true);
ss << "))\n";
ss << " tmp";
......@@ -249,7 +249,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
ss << " if(doubleIndex>=";
ss << pTmpDVR2->GetArrayLength();
ss << " ||";
ss << "isNan(";
ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
ss << " tmp";
......@@ -265,7 +265,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush)
{
ss << " if(";
ss << "isNan(";
ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
ss << " tmp";
......
......@@ -217,7 +217,7 @@ public:
SubArguments& vSubArguments, int argumentNum );
static void CheckAllSubArgumentIsNan( std::stringstream& ss,
SubArguments& vSubArguments );
// only check isNan
// only check isnan
static void CheckSubArgumentIsNan2( std::stringstream& ss,
SubArguments& vSubArguments, int argumentNum, const std::string& p );
static void UnrollDoubleVector( std::stringstream& ss,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment