diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-04 00:25:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-04 00:25:45 +0100 |
commit | 19113f6da3db1abbe8a3e36f081a0ec03f878f12 (patch) | |
tree | ecf3063c4fbde0ef6d2ece92255527aeffa27e53 /searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/Simplifier.java | |
parent | 7e43b15f2e427ac08af82e2292e8649328f729e5 (diff) | |
parent | 599946ff2d1838914ffbab7d74fdbe6055187189 (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.java | 14 |
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) |