src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java
equal
deleted
inserted
replaced
28 import java.util.ArrayList; |
28 import java.util.ArrayList; |
29 import java.util.Arrays; |
29 import java.util.Arrays; |
30 import java.util.Iterator; |
30 import java.util.Iterator; |
31 import java.util.List; |
31 import java.util.List; |
32 |
32 |
|
33 import org.graalvm.collections.EconomicMap; |
|
34 import org.graalvm.collections.Equivalence; |
33 import org.graalvm.compiler.core.common.calc.Condition; |
35 import org.graalvm.compiler.core.common.calc.Condition; |
34 import org.graalvm.compiler.core.common.type.IntegerStamp; |
36 import org.graalvm.compiler.core.common.type.IntegerStamp; |
35 import org.graalvm.compiler.core.common.type.Stamp; |
37 import org.graalvm.compiler.core.common.type.Stamp; |
36 import org.graalvm.compiler.core.common.type.StampFactory; |
38 import org.graalvm.compiler.core.common.type.StampFactory; |
37 import org.graalvm.compiler.debug.CounterKey; |
39 import org.graalvm.compiler.debug.CounterKey; |
57 import org.graalvm.compiler.nodes.java.InstanceOfNode; |
59 import org.graalvm.compiler.nodes.java.InstanceOfNode; |
58 import org.graalvm.compiler.nodes.java.LoadFieldNode; |
60 import org.graalvm.compiler.nodes.java.LoadFieldNode; |
59 import org.graalvm.compiler.nodes.spi.LIRLowerable; |
61 import org.graalvm.compiler.nodes.spi.LIRLowerable; |
60 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool; |
62 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool; |
61 import org.graalvm.compiler.nodes.util.GraphUtil; |
63 import org.graalvm.compiler.nodes.util.GraphUtil; |
62 import org.graalvm.util.EconomicMap; |
|
63 import org.graalvm.util.Equivalence; |
|
64 |
64 |
65 import jdk.vm.ci.meta.Constant; |
65 import jdk.vm.ci.meta.Constant; |
66 import jdk.vm.ci.meta.JavaConstant; |
66 import jdk.vm.ci.meta.JavaConstant; |
67 import jdk.vm.ci.meta.JavaKind; |
67 import jdk.vm.ci.meta.JavaKind; |
68 import jdk.vm.ci.meta.MetaAccessProvider; |
68 import jdk.vm.ci.meta.MetaAccessProvider; |
555 return true; |
555 return true; |
556 } |
556 } |
557 } else if (next1 instanceof DeoptimizeNode && next2 instanceof DeoptimizeNode) { |
557 } else if (next1 instanceof DeoptimizeNode && next2 instanceof DeoptimizeNode) { |
558 DeoptimizeNode deopt1 = (DeoptimizeNode) next1; |
558 DeoptimizeNode deopt1 = (DeoptimizeNode) next1; |
559 DeoptimizeNode deopt2 = (DeoptimizeNode) next2; |
559 DeoptimizeNode deopt2 = (DeoptimizeNode) next2; |
560 if (deopt1.reason() == deopt2.reason() && deopt1.action() == deopt2.action()) { |
560 if (deopt1.getReason() == deopt2.getReason() && deopt1.getAction() == deopt2.getAction()) { |
561 // Same deoptimization reason and action. |
561 // Same deoptimization reason and action. |
562 return true; |
562 return true; |
563 } |
563 } |
564 } else if (next1 instanceof LoopExitNode && next2 instanceof LoopExitNode) { |
564 } else if (next1 instanceof LoopExitNode && next2 instanceof LoopExitNode) { |
565 LoopExitNode exit1 = (LoopExitNode) next1; |
565 LoopExitNode exit1 = (LoopExitNode) next1; |
598 return true; |
598 return true; |
599 } |
599 } |
600 } |
600 } |
601 } else if (a instanceof CompareNode) { |
601 } else if (a instanceof CompareNode) { |
602 CompareNode compareA = (CompareNode) a; |
602 CompareNode compareA = (CompareNode) a; |
603 Condition conditionA = compareA.condition(); |
603 Condition conditionA = compareA.condition().asCondition(); |
604 if (compareA.unorderedIsTrue()) { |
604 if (compareA.unorderedIsTrue()) { |
605 return false; |
605 return false; |
606 } |
606 } |
607 if (b instanceof CompareNode) { |
607 if (b instanceof CompareNode) { |
608 CompareNode compareB = (CompareNode) b; |
608 CompareNode compareB = (CompareNode) b; |
612 } |
612 } |
613 if (compareB.unorderedIsTrue()) { |
613 if (compareB.unorderedIsTrue()) { |
614 return false; |
614 return false; |
615 } |
615 } |
616 Condition comparableCondition = null; |
616 Condition comparableCondition = null; |
617 Condition conditionB = compareB.condition(); |
617 Condition conditionB = compareB.condition().asCondition(); |
618 if (compareB.getX() == compareA.getX() && compareB.getY() == compareA.getY()) { |
618 if (compareB.getX() == compareA.getX() && compareB.getY() == compareA.getY()) { |
619 comparableCondition = conditionB; |
619 comparableCondition = conditionB; |
620 } else if (compareB.getX() == compareA.getY() && compareB.getY() == compareA.getX()) { |
620 } else if (compareB.getX() == compareA.getY() && compareB.getY() == compareA.getX()) { |
621 comparableCondition = conditionB.mirror(); |
621 comparableCondition = conditionB.mirror(); |
622 } |
622 } |
1382 return null; |
1382 return null; |
1383 } |
1383 } |
1384 |
1384 |
1385 @Override |
1385 @Override |
1386 public AbstractBeginNode getPrimarySuccessor() { |
1386 public AbstractBeginNode getPrimarySuccessor() { |
1387 return this.trueSuccessor(); |
1387 return null; |
1388 } |
1388 } |
1389 |
1389 |
1390 public AbstractBeginNode getSuccessor(boolean result) { |
1390 public AbstractBeginNode getSuccessor(boolean result) { |
1391 return result ? this.trueSuccessor() : this.falseSuccessor(); |
1391 return result ? this.trueSuccessor() : this.falseSuccessor(); |
1392 } |
1392 } |