< 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,55 ****
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;
--- 45,54 ----
*** 121,130 ****
--- 120,130 ----
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,148 ****
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;
--- 136,146 ----
*** 204,213 ****
--- 202,213 ----
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,387 ****
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.
! */
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);
}
}
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.
! */
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;
}
protected void lowerVerifyHeap(VerifyHeapNode n) {
GraphUtil.removeFixedWithUnusedInputs(n);
}
--- 319,360 ----
return;
}
ResolvedJavaMethod method = math.graph().method();
if (method != null) {
if (method.getAnnotation(Snippet.class) != null) {
! // 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.
return;
}
}
+ 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.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.
return;
}
}
! 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,483 ****
--- 447,461 ----
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 >