< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopTransformations.java
Print this page
rev 56282 : [mq]: graal
*** 60,73 ****
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.AddNode;
import org.graalvm.compiler.nodes.calc.CompareNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
- import org.graalvm.compiler.nodes.calc.IntegerLessThanNode;
import org.graalvm.compiler.nodes.extended.OpaqueNode;
import org.graalvm.compiler.nodes.extended.SwitchNode;
import org.graalvm.compiler.nodes.spi.CoreProviders;
import org.graalvm.compiler.phases.common.CanonicalizerPhase;
public abstract class LoopTransformations {
private LoopTransformations() {
--- 60,73 ----
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.AddNode;
import org.graalvm.compiler.nodes.calc.CompareNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
import org.graalvm.compiler.nodes.extended.OpaqueNode;
import org.graalvm.compiler.nodes.extended.SwitchNode;
import org.graalvm.compiler.nodes.spi.CoreProviders;
+ import org.graalvm.compiler.nodes.util.IntegerHelper;
import org.graalvm.compiler.phases.common.CanonicalizerPhase;
public abstract class LoopTransformations {
private LoopTransformations() {
*** 357,371 ****
// Update the pre loops limit test
// Make new limit one iteration
ValueNode newLimit = AddNode.add(preCounted.getStart(), preCounted.getCounter().strideNode(), NodeView.DEFAULT);
// Fetch the variable we are not replacing and configure the one we are
ValueNode ub = preCounted.getLimit();
LogicNode entryCheck;
if (preCounted.getDirection() == Direction.Up) {
! entryCheck = IntegerLessThanNode.create(newLimit, ub, NodeView.DEFAULT);
} else {
! entryCheck = IntegerLessThanNode.create(ub, newLimit, NodeView.DEFAULT);
}
newLimit = ConditionalNode.create(entryCheck, newLimit, ub, NodeView.DEFAULT);
// Re-wire the condition with the new limit
CompareNode compareNode = (CompareNode) preCounted.getLimitTest().condition();
compareNode.replaceFirstInput(ub, compareNode.graph().addOrUniqueWithInputs(newLimit));
--- 357,372 ----
// Update the pre loops limit test
// Make new limit one iteration
ValueNode newLimit = AddNode.add(preCounted.getStart(), preCounted.getCounter().strideNode(), NodeView.DEFAULT);
// Fetch the variable we are not replacing and configure the one we are
ValueNode ub = preCounted.getLimit();
+ IntegerHelper helper = preCounted.getCounterIntegerHelper();
LogicNode entryCheck;
if (preCounted.getDirection() == Direction.Up) {
! entryCheck = helper.createCompareNode(newLimit, ub, NodeView.DEFAULT);
} else {
! entryCheck = helper.createCompareNode(ub, newLimit, NodeView.DEFAULT);
}
newLimit = ConditionalNode.create(entryCheck, newLimit, ub, NodeView.DEFAULT);
// Re-wire the condition with the new limit
CompareNode compareNode = (CompareNode) preCounted.getLimitTest().condition();
compareNode.replaceFirstInput(ub, compareNode.graph().addOrUniqueWithInputs(newLimit));
< prev index next >