summaryrefslogtreecommitdiffstats
path: root/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-04 00:25:45 +0100
committerGitHub <noreply@github.com>2021-11-04 00:25:45 +0100
commit19113f6da3db1abbe8a3e36f081a0ec03f878f12 (patch)
treeecf3063c4fbde0ef6d2ece92255527aeffa27e53 /searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java
parent7e43b15f2e427ac08af82e2292e8649328f729e5 (diff)
parent599946ff2d1838914ffbab7d74fdbe6055187189 (diff)
Merge pull request #19855 from vespa-engine/balder/optimize-negative-constantsv7.495.22
Avoid intermediate NegativeNode in the leaf nodes, adding approximate…
Diffstat (limited to 'searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java14
1 files changed, 12 insertions, 2 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java
index a56106e8f9d..b48303ae98b 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchlib.rankingexpression.transform;
-import com.yahoo.document.update.ArithmeticValueUpdate;
+import com.yahoo.searchlib.rankingexpression.evaluation.DoubleCompatibleValue;
import com.yahoo.searchlib.rankingexpression.evaluation.DoubleValue;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
import com.yahoo.searchlib.rankingexpression.rule.ArithmeticNode;
@@ -12,9 +12,9 @@ import com.yahoo.searchlib.rankingexpression.rule.ConstantNode;
import com.yahoo.searchlib.rankingexpression.rule.EmbracedNode;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
import com.yahoo.searchlib.rankingexpression.rule.IfNode;
+import com.yahoo.searchlib.rankingexpression.rule.NegativeNode;
import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
-import com.yahoo.tensor.functions.TensorFunction;
import java.util.ArrayList;
import java.util.List;
@@ -36,6 +36,8 @@ public class Simplifier extends ExpressionTransformer<TransformContext> {
node = ((EmbracedNode)node).children().get(0);
if (node instanceof ArithmeticNode)
node = transformArithmetic((ArithmeticNode) node);
+ if (node instanceof NegativeNode)
+ node = transformNegativeNode((NegativeNode) node);
return node;
}
@@ -107,6 +109,14 @@ public class Simplifier extends ExpressionTransformer<TransformContext> {
return node.getFalseExpression();
}
+ private ExpressionNode transformNegativeNode(NegativeNode node) {
+ if ( ! (node.getValue() instanceof ConstantNode) ) return node;
+
+ ConstantNode constant = (ConstantNode) node.getValue();
+ if ( ! (constant.getValue() instanceof DoubleCompatibleValue)) return node;
+ return new ConstantNode(constant.getValue().negate() );
+ }
+
private boolean allMultiplicationOrDivision(ArithmeticNode node) {
for (ArithmeticOperator o : node.operators())
if (o != ArithmeticOperator.MULTIPLY && o != ArithmeticOperator.DIVIDE)