--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java 2019-03-12 08:10:11.107803455 +0100 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java 2019-03-12 08:10:10.743801098 +0100 @@ -47,7 +47,6 @@ import org.graalvm.compiler.api.replacements.Snippet; import org.graalvm.compiler.api.replacements.SnippetReflectionProvider; import org.graalvm.compiler.core.common.LIRKind; -import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor; import org.graalvm.compiler.core.common.spi.ForeignCallsProvider; import org.graalvm.compiler.core.common.type.IntegerStamp; import org.graalvm.compiler.core.common.type.ObjectStamp; @@ -123,6 +122,7 @@ import org.graalvm.compiler.nodes.memory.ReadNode; import org.graalvm.compiler.nodes.memory.WriteNode; import org.graalvm.compiler.nodes.memory.address.AddressNode; +import org.graalvm.compiler.nodes.memory.address.IndexAddressNode; import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode; import org.graalvm.compiler.nodes.spi.Lowerable; import org.graalvm.compiler.nodes.spi.LoweringProvider; @@ -138,9 +138,7 @@ import org.graalvm.compiler.phases.util.Providers; import org.graalvm.compiler.replacements.SnippetLowerableMemoryNode.SnippetLowering; import org.graalvm.compiler.replacements.nodes.BinaryMathIntrinsicNode; -import org.graalvm.compiler.replacements.nodes.BinaryMathIntrinsicNode.BinaryOperation; import org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode; -import org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation; import jdk.internal.vm.compiler.word.LocationIdentity; import jdk.vm.ci.code.CodeUtil; @@ -206,6 +204,8 @@ lowerLoadIndexedNode((LoadIndexedNode) n, tool); } else if (n instanceof StoreIndexedNode) { lowerStoreIndexedNode((StoreIndexedNode) n, tool); + } else if (n instanceof IndexAddressNode) { + lowerIndexAddressNode((IndexAddressNode) n); } else if (n instanceof ArrayLengthNode) { lowerArrayLengthNode((ArrayLengthNode) n, tool); } else if (n instanceof LoadHubNode) { @@ -321,27 +321,20 @@ ResolvedJavaMethod method = math.graph().method(); if (method != null) { if (method.getAnnotation(Snippet.class) != null) { - /* - * In the context of the snippet use the LIR lowering instead of the Node lowering. - */ + // In the context of SnippetStub, i.e., Graal-generated stubs, use the LIR + // lowering to emit the stub assembly code instead of the Node lowering. return; } if (method.getName().equalsIgnoreCase(math.getOperation().name()) && tool.getMetaAccess().lookupJavaType(Math.class).equals(method.getDeclaringClass())) { - /* - * A root compilation of the intrinsic method should emit the full assembly - * implementation. - */ + // A root compilation of the intrinsic method should emit the full assembly + // implementation. return; } - - } - ForeignCallDescriptor foreignCall = toForeignCall(math.getOperation()); - if (foreignCall != null) { - StructuredGraph graph = math.graph(); - ForeignCallNode call = graph.add(new ForeignCallNode(foreignCalls, toForeignCall(math.getOperation()), math.getX(), math.getY())); - graph.addAfterFixed(tool.lastFixedNode(), call); - math.replaceAtUsages(call); } + StructuredGraph graph = math.graph(); + ForeignCallNode call = graph.add(new ForeignCallNode(foreignCalls, math.getOperation().foreignCallDescriptor, math.getX(), math.getY())); + graph.addAfterFixed(tool.lastFixedNode(), call); + math.replaceAtUsages(call); } private void lowerUnaryMath(UnaryMathIntrinsicNode math, LoweringTool tool) { @@ -350,36 +343,16 @@ } ResolvedJavaMethod method = math.graph().method(); if (method != null) { - if (method.getAnnotation(Snippet.class) != null) { - /* - * In the context of the snippet use the LIR lowering instead of the Node lowering. - */ - return; - } if (method.getName().equalsIgnoreCase(math.getOperation().name()) && tool.getMetaAccess().lookupJavaType(Math.class).equals(method.getDeclaringClass())) { - /* - * A root compilation of the intrinsic method should emit the full assembly - * implementation. - */ + // A root compilation of the intrinsic method should emit the full assembly + // implementation. return; } - - } - ForeignCallDescriptor foreignCall = toForeignCall(math.getOperation()); - if (foreignCall != null) { - StructuredGraph graph = math.graph(); - ForeignCallNode call = math.graph().add(new ForeignCallNode(foreignCalls, foreignCall, math.getValue())); - graph.addAfterFixed(tool.lastFixedNode(), call); - math.replaceAtUsages(call); } - } - - protected ForeignCallDescriptor toForeignCall(UnaryOperation operation) { - return operation.foreignCallDescriptor; - } - - protected ForeignCallDescriptor toForeignCall(BinaryOperation operation) { - return operation.foreignCallDescriptor; + StructuredGraph graph = math.graph(); + ForeignCallNode call = math.graph().add(new ForeignCallNode(foreignCalls, math.getOperation().foreignCallDescriptor, math.getValue())); + graph.addAfterFixed(tool.lastFixedNode(), call); + math.replaceAtUsages(call); } protected void lowerVerifyHeap(VerifyHeapNode n) { @@ -476,6 +449,11 @@ return graph.unique(new OffsetAddressNode(array, offset)); } + protected void lowerIndexAddressNode(IndexAddressNode indexAddress) { + AddressNode lowered = createArrayAddress(indexAddress.graph(), indexAddress.getArray(), indexAddress.getElementKind(), indexAddress.getIndex()); + indexAddress.replaceAndDelete(lowered); + } + protected void lowerLoadIndexedNode(LoadIndexedNode loadIndexed, LoweringTool tool) { StructuredGraph graph = loadIndexed.graph(); ValueNode array = loadIndexed.array();