summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2018-11-27 15:53:45 +0100
committerLuboš Luňák <l.lunak@collabora.com>2018-12-05 10:58:41 +0100
commit94efbf7b1eb854cae5087239a2cd1555b752edf9 (patch)
tree30cd29acefa84e4cc516876a8730230ac439d3b2
parent4cf986afb3d7fb9f59b900f766c0273d4455b8e0 (diff)
make OpenCL SLOPE() handle problems more gracefully
It's silly to just return NaN just because the function can't handle something. If nothing else, at least a proper error should be reported (or in this case, the fallback to the core function will take care of it). Change-Id: I9c971082f4c5c9836318cf63d15fa7c278274273 Reviewed-on: https://gerrit.libreoffice.org/64244 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com> (cherry picked from commit c0c03aadb3ec25ca5c4c07f270164158b6667cc2) Reviewed-on: https://gerrit.libreoffice.org/64534
-rw-r--r--sc/source/core/opencl/op_statistical.cxx24
1 files changed, 4 insertions, 20 deletions
diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx
index 5278ad2b31f7..d18b3ffceec1 100644
--- a/sc/source/core/opencl/op_statistical.cxx
+++ b/sc/source/core/opencl/op_statistical.cxx
@@ -2548,6 +2548,7 @@ void OpStDevP::GenSlidingWindowFunction(std::stringstream &ss,
void OpSlope::GenSlidingWindowFunction(std::stringstream &ss,
const std::string &sSymName, SubArguments &vSubArguments)
{
+ CHECK_PARAMETER_COUNT(2,2);
ss << "\ndouble " << sSymName;
ss << "_" << BinFuncName() << "(";
for (size_t i = 0; i < vSubArguments.size(); i++)
@@ -2567,12 +2568,6 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss,
ss << " double fCount = 0.0;\n";
ss << " double argX = 0.0;\n";
ss << " double argY = 0.0;\n";
- if(vSubArguments.size() != 2)
- {
- ss << " return NAN;\n";
- ss << "}\n";
- return ;
- }
FormulaToken *pCur = vSubArguments[1]->GetFormulaToken();
FormulaToken *pCur1 = vSubArguments[0]->GetFormulaToken();
assert(pCur);
@@ -2591,11 +2586,7 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss,
pDVR1->GetArrayLength() ? pDVR->GetArrayLength():
pDVR1->GetArrayLength();
if(nCurWindowSize != nCurWindowSize1)
- {
- ss << " return NAN;\n";
- ss << "}\n";
- return ;
- }
+ throw Unhandled(__FILE__, __LINE__);
ss << " for (int i = ";
if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed())
&&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed()))
@@ -2626,13 +2617,7 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss,
}
else
{
- ss << "0; i < " << nCurWindowSize << "; i++)\n";
- ss << " {\n";
- ss << " break;\n";
- ss << " }";
- ss << " return NAN;\n";
- ss << "}\n";
- return ;
+ throw Unhandled(__FILE__, __LINE__);
}
ss << " argX = ";
@@ -2701,8 +2686,7 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss,
}
else
{
- ss << " return NAN;\n";
- ss << "}\n";
+ throw Unhandled(__FILE__, __LINE__);
}
}
void OpSTEYX::GenSlidingWindowFunction(std::stringstream &ss,