< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ExpandLogicPhase.java
Print this page
rev 56282 : [mq]: graal
*** 22,32 ****
*/
package org.graalvm.compiler.phases.common;
- import org.graalvm.compiler.core.common.type.FloatStamp;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.debug.DebugCloseable;
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.Graph;
import org.graalvm.compiler.graph.Node;
--- 22,31 ----
*** 40,55 ****
import org.graalvm.compiler.nodes.MergeNode;
import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.ShortCircuitOrNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
- import org.graalvm.compiler.nodes.calc.FloatEqualsNode;
- import org.graalvm.compiler.nodes.calc.FloatLessThanNode;
- import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
- import org.graalvm.compiler.nodes.calc.IntegerLessThanNode;
- import org.graalvm.compiler.nodes.calc.NormalizeCompareNode;
import org.graalvm.compiler.phases.Phase;
public class ExpandLogicPhase extends Phase {
private static final double EPSILON = 1E-6;
--- 39,50 ----
import org.graalvm.compiler.nodes.MergeNode;
import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.ShortCircuitOrNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
+ import org.graalvm.compiler.nodes.calc.AbstractNormalizeCompareNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
import org.graalvm.compiler.phases.Phase;
public class ExpandLogicPhase extends Phase {
private static final double EPSILON = 1E-6;
*** 59,93 ****
for (ShortCircuitOrNode logic : graph.getNodes(ShortCircuitOrNode.TYPE)) {
processBinary(logic);
}
assert graph.getNodes(ShortCircuitOrNode.TYPE).isEmpty();
! for (NormalizeCompareNode logic : graph.getNodes(NormalizeCompareNode.TYPE)) {
try (DebugCloseable context = logic.withNodeSourcePosition()) {
processNormalizeCompareNode(logic);
}
}
graph.setAfterExpandLogic();
}
! private static void processNormalizeCompareNode(NormalizeCompareNode normalize) {
! LogicNode equalComp;
! LogicNode lessComp;
StructuredGraph graph = normalize.graph();
! ValueNode x = normalize.getX();
! ValueNode y = normalize.getY();
! if (x.stamp(NodeView.DEFAULT) instanceof FloatStamp) {
! equalComp = graph.addOrUniqueWithInputs(FloatEqualsNode.create(x, y, NodeView.DEFAULT));
! lessComp = graph.addOrUniqueWithInputs(FloatLessThanNode.create(x, y, normalize.isUnorderedLess(), NodeView.DEFAULT));
! } else {
! equalComp = graph.addOrUniqueWithInputs(IntegerEqualsNode.create(x, y, NodeView.DEFAULT));
! lessComp = graph.addOrUniqueWithInputs(IntegerLessThanNode.create(x, y, NodeView.DEFAULT));
! }
!
Stamp stamp = normalize.stamp(NodeView.DEFAULT);
! ConditionalNode equalValue = graph.unique(
! new ConditionalNode(equalComp, ConstantNode.forIntegerStamp(stamp, 0, graph), ConstantNode.forIntegerStamp(stamp, 1, graph)));
ConditionalNode value = graph.unique(new ConditionalNode(lessComp, ConstantNode.forIntegerStamp(stamp, -1, graph), equalValue));
normalize.replaceAtUsagesAndDelete(value);
}
@SuppressWarnings("try")
--- 54,77 ----
for (ShortCircuitOrNode logic : graph.getNodes(ShortCircuitOrNode.TYPE)) {
processBinary(logic);
}
assert graph.getNodes(ShortCircuitOrNode.TYPE).isEmpty();
! for (AbstractNormalizeCompareNode logic : graph.getNodes(AbstractNormalizeCompareNode.TYPE)) {
try (DebugCloseable context = logic.withNodeSourcePosition()) {
processNormalizeCompareNode(logic);
}
}
graph.setAfterExpandLogic();
}
! private static void processNormalizeCompareNode(AbstractNormalizeCompareNode normalize) {
StructuredGraph graph = normalize.graph();
! LogicNode equalComp = graph.addOrUniqueWithInputs(normalize.createEqualComparison());
! LogicNode lessComp = graph.addOrUniqueWithInputs(normalize.createLowerComparison());
Stamp stamp = normalize.stamp(NodeView.DEFAULT);
! ConditionalNode equalValue = graph.unique(new ConditionalNode(equalComp, ConstantNode.forIntegerStamp(stamp, 0, graph), ConstantNode.forIntegerStamp(stamp, 1, graph)));
ConditionalNode value = graph.unique(new ConditionalNode(lessComp, ConstantNode.forIntegerStamp(stamp, -1, graph), equalValue));
normalize.replaceAtUsagesAndDelete(value);
}
@SuppressWarnings("try")
< prev index next >