< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java
Print this page
@@ -45,11 +45,10 @@
import org.graalvm.compiler.api.directives.GraalDirectives;
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;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
@@ -121,10 +120,11 @@
import org.graalvm.compiler.nodes.java.ValueCompareAndSwapNode;
import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
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;
import org.graalvm.compiler.nodes.spi.LoweringTool;
import org.graalvm.compiler.nodes.type.StampTool;
@@ -136,13 +136,11 @@
import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
import org.graalvm.compiler.options.OptionValues;
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;
import jdk.vm.ci.code.MemoryBarriers;
import jdk.vm.ci.code.TargetDescription;
@@ -204,10 +202,12 @@
lowerStoreFieldNode((StoreFieldNode) n, tool);
} else if (n instanceof LoadIndexedNode) {
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) {
lowerLoadHubNode((LoadHubNode) n, tool);
} else if (n instanceof LoadArrayComponentHubNode) {
@@ -319,69 +319,42 @@
return;
}
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) {
if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) {
return;
}
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) {
GraphUtil.removeFixedWithUnusedInputs(n);
}
@@ -474,10 +447,15 @@
ValueNode offset = graph.unique(new AddNode(scaledIndex, ConstantNode.forIntegerKind(target.wordJavaKind, base, graph)));
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();
array = createNullCheckedValue(array, loadIndexed, tool);
JavaKind elementKind = loadIndexed.elementKind();
< prev index next >