src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java
changeset 48861 47f19ff9903c
parent 48398 79afa4c434f6
child 49873 26ebfe8ce852
equal deleted inserted replaced
48860:5bce1b7e7800 48861:47f19ff9903c
    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     }