< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/MathUtil.java

Print this page




  71 
  72     public static ValueNode sub(StructuredGraph graph, ValueNode v1, ValueNode v2) {
  73         if (isConstantZero(v2)) {
  74             return v1;
  75         }
  76         return BinaryArithmeticNode.sub(graph, v1, v2, NodeView.DEFAULT);
  77     }
  78 
  79     public static ValueNode divBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, GuardingNode zeroCheck) {
  80         return fixedDivBefore(graph, before, dividend, divisor, (dend, sor) -> SignedDivNode.create(dend, sor, zeroCheck, NodeView.DEFAULT));
  81     }
  82 
  83     public static ValueNode unsignedDivBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, GuardingNode zeroCheck) {
  84         return fixedDivBefore(graph, before, dividend, divisor, (dend, sor) -> UnsignedDivNode.create(dend, sor, zeroCheck, NodeView.DEFAULT));
  85     }
  86 
  87     private static ValueNode fixedDivBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, BiFunction<ValueNode, ValueNode, ValueNode> createDiv) {
  88         if (isConstantOne(divisor)) {
  89             return dividend;
  90         }
  91         ValueNode div = graph.addOrUniqueWithInputs(createDiv.apply(dividend, divisor));
  92         if (div instanceof FixedBinaryNode) {
  93             FixedBinaryNode fixedDiv = (FixedBinaryNode) div;
  94             if (before.predecessor() instanceof FixedBinaryNode) {
  95                 FixedBinaryNode binaryPredecessor = (FixedBinaryNode) before.predecessor();
  96                 if (fixedDiv.dataFlowEquals(binaryPredecessor)) {
  97                     fixedDiv.safeDelete();
  98                     return binaryPredecessor;
  99                 }
 100             }
 101             graph.addBeforeFixed(before, fixedDiv);
 102         }
 103         return div;
 104     }
 105 }


  71 
  72     public static ValueNode sub(StructuredGraph graph, ValueNode v1, ValueNode v2) {
  73         if (isConstantZero(v2)) {
  74             return v1;
  75         }
  76         return BinaryArithmeticNode.sub(graph, v1, v2, NodeView.DEFAULT);
  77     }
  78 
  79     public static ValueNode divBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, GuardingNode zeroCheck) {
  80         return fixedDivBefore(graph, before, dividend, divisor, (dend, sor) -> SignedDivNode.create(dend, sor, zeroCheck, NodeView.DEFAULT));
  81     }
  82 
  83     public static ValueNode unsignedDivBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, GuardingNode zeroCheck) {
  84         return fixedDivBefore(graph, before, dividend, divisor, (dend, sor) -> UnsignedDivNode.create(dend, sor, zeroCheck, NodeView.DEFAULT));
  85     }
  86 
  87     private static ValueNode fixedDivBefore(StructuredGraph graph, FixedNode before, ValueNode dividend, ValueNode divisor, BiFunction<ValueNode, ValueNode, ValueNode> createDiv) {
  88         if (isConstantOne(divisor)) {
  89             return dividend;
  90         }
  91         ValueNode div = createDiv.apply(dividend, divisor);
  92         if (div instanceof FixedBinaryNode) {
  93             FixedBinaryNode fixedDiv = (FixedBinaryNode) div;
  94             if (before.predecessor() instanceof FixedBinaryNode) {
  95                 FixedBinaryNode binaryPredecessor = (FixedBinaryNode) before.predecessor();
  96                 if (fixedDiv.dataFlowEquals(binaryPredecessor)) {
  97                     fixedDiv.safeDelete();
  98                     return binaryPredecessor;
  99                 }
 100             }
 101             graph.addBeforeFixed(before, graph.addOrUniqueWithInputs(fixedDiv));
 102         }
 103         return div;
 104     }
 105 }
< prev index next >