< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/DefaultHotSpotLoweringProvider.java

Print this page




 566         StructuredGraph graph = loadMethodNode.graph();
 567         HotSpotResolvedJavaMethod method = (HotSpotResolvedJavaMethod) loadMethodNode.getMethod();
 568         ReadNode metaspaceMethod = createReadVirtualMethod(graph, loadMethodNode.getHub(), method, loadMethodNode.getReceiverType());
 569         graph.replaceFixed(loadMethodNode, metaspaceMethod);
 570     }
 571 
 572     private static void lowerGetClassNode(GetClassNode getClass, LoweringTool tool, StructuredGraph graph) {
 573         StampProvider stampProvider = tool.getStampProvider();
 574         LoadHubNode hub = graph.unique(new LoadHubNode(stampProvider, getClass.getObject()));
 575         HubGetClassNode hubGetClass = graph.unique(new HubGetClassNode(tool.getMetaAccess(), hub));
 576         getClass.replaceAtUsagesAndDelete(hubGetClass);
 577         hub.lower(tool);
 578         hubGetClass.lower(tool);
 579     }
 580 
 581     private void lowerStoreHubNode(StoreHubNode storeHub, StructuredGraph graph) {
 582         WriteNode hub = createWriteHub(graph, storeHub.getObject(), storeHub.getValue());
 583         graph.replaceFixed(storeHub, hub);
 584     }
 585 
 586     @Override
 587     public BarrierType fieldInitializationBarrier(JavaKind entryKind) {
 588         return (entryKind == JavaKind.Object && !runtime.getVMConfig().useDeferredInitBarriers) ? BarrierType.IMPRECISE : BarrierType.NONE;
 589     }
 590 
 591     @Override
 592     public BarrierType arrayInitializationBarrier(JavaKind entryKind) {
 593         return (entryKind == JavaKind.Object && !runtime.getVMConfig().useDeferredInitBarriers) ? BarrierType.PRECISE : BarrierType.NONE;
 594     }
 595 
 596     private void lowerOSRStartNode(OSRStartNode osrStart) {
 597         StructuredGraph graph = osrStart.graph();
 598         if (graph.getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) {
 599             StartNode newStart = graph.add(new StartNode());
 600             ParameterNode buffer = graph.addWithoutUnique(new ParameterNode(0, StampPair.createSingle(StampFactory.forKind(runtime.getTarget().wordJavaKind))));
 601             ForeignCallNode migrationEnd = graph.add(new ForeignCallNode(foreignCalls, OSR_MIGRATION_END, buffer));
 602             migrationEnd.setStateAfter(osrStart.stateAfter());
 603             newStart.setNext(migrationEnd);
 604             FixedNode next = osrStart.next();
 605             osrStart.setNext(null);
 606             migrationEnd.setNext(next);
 607             graph.setStart(newStart);
 608 
 609             final int wordSize = target.wordSize;
 610 
 611             // @formatter:off
 612             // taken from c2 locals_addr = osr_buf + (max_locals-1)*wordSize)
 613             // @formatter:on
 614             int localsOffset = (graph.method().getMaxLocals() - 1) * wordSize;
 615             for (OSRLocalNode osrLocal : graph.getNodes(OSRLocalNode.TYPE)) {


 766         } else {
 767             return memoryRead;
 768         }
 769     }
 770 
 771     private WriteNode createWriteHub(StructuredGraph graph, ValueNode object, ValueNode value) {
 772         assert !object.isConstant() || object.asConstant().isDefaultForKind();
 773 
 774         ValueNode writeValue = value;
 775         if (runtime.getVMConfig().useCompressedClassPointers) {
 776             writeValue = HotSpotCompressionNode.compress(value, runtime.getVMConfig().getKlassEncoding());
 777         }
 778 
 779         AddressNode address = createOffsetAddress(graph, object, runtime.getVMConfig().hubOffset);
 780         return graph.add(new WriteNode(address, HUB_WRITE_LOCATION, writeValue, BarrierType.NONE));
 781     }
 782 
 783     @Override
 784     protected BarrierType fieldLoadBarrierType(ResolvedJavaField f) {
 785         HotSpotResolvedJavaField loadField = (HotSpotResolvedJavaField) f;
 786         BarrierType barrierType = BarrierType.NONE;
 787         if (runtime.getVMConfig().useG1GC && loadField.getJavaKind() == JavaKind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) &&
 788                         loadField.getName().equals("referent")) {
 789             barrierType = BarrierType.PRECISE;
 790         }
 791         return barrierType;
 792     }
 793 
 794     @Override
 795     public int fieldOffset(ResolvedJavaField f) {
 796         return f.getOffset();
 797     }
 798 
 799     @Override
 800     public int arrayLengthOffset() {
 801         return runtime.getVMConfig().arrayOopDescLengthOffset();
 802     }
 803 
 804     @Override
 805     protected final JavaKind getStorageKind(ResolvedJavaField field) {
 806         return field.getJavaKind();
 807     }
 808 
 809     @Override
 810     public ObjectCloneSnippets.Templates getObjectCloneSnippets() {
 811         return objectCloneSnippets;


 566         StructuredGraph graph = loadMethodNode.graph();
 567         HotSpotResolvedJavaMethod method = (HotSpotResolvedJavaMethod) loadMethodNode.getMethod();
 568         ReadNode metaspaceMethod = createReadVirtualMethod(graph, loadMethodNode.getHub(), method, loadMethodNode.getReceiverType());
 569         graph.replaceFixed(loadMethodNode, metaspaceMethod);
 570     }
 571 
 572     private static void lowerGetClassNode(GetClassNode getClass, LoweringTool tool, StructuredGraph graph) {
 573         StampProvider stampProvider = tool.getStampProvider();
 574         LoadHubNode hub = graph.unique(new LoadHubNode(stampProvider, getClass.getObject()));
 575         HubGetClassNode hubGetClass = graph.unique(new HubGetClassNode(tool.getMetaAccess(), hub));
 576         getClass.replaceAtUsagesAndDelete(hubGetClass);
 577         hub.lower(tool);
 578         hubGetClass.lower(tool);
 579     }
 580 
 581     private void lowerStoreHubNode(StoreHubNode storeHub, StructuredGraph graph) {
 582         WriteNode hub = createWriteHub(graph, storeHub.getObject(), storeHub.getValue());
 583         graph.replaceFixed(storeHub, hub);
 584     }
 585 










 586     private void lowerOSRStartNode(OSRStartNode osrStart) {
 587         StructuredGraph graph = osrStart.graph();
 588         if (graph.getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) {
 589             StartNode newStart = graph.add(new StartNode());
 590             ParameterNode buffer = graph.addWithoutUnique(new ParameterNode(0, StampPair.createSingle(StampFactory.forKind(runtime.getTarget().wordJavaKind))));
 591             ForeignCallNode migrationEnd = graph.add(new ForeignCallNode(foreignCalls, OSR_MIGRATION_END, buffer));
 592             migrationEnd.setStateAfter(osrStart.stateAfter());
 593             newStart.setNext(migrationEnd);
 594             FixedNode next = osrStart.next();
 595             osrStart.setNext(null);
 596             migrationEnd.setNext(next);
 597             graph.setStart(newStart);
 598 
 599             final int wordSize = target.wordSize;
 600 
 601             // @formatter:off
 602             // taken from c2 locals_addr = osr_buf + (max_locals-1)*wordSize)
 603             // @formatter:on
 604             int localsOffset = (graph.method().getMaxLocals() - 1) * wordSize;
 605             for (OSRLocalNode osrLocal : graph.getNodes(OSRLocalNode.TYPE)) {


 756         } else {
 757             return memoryRead;
 758         }
 759     }
 760 
 761     private WriteNode createWriteHub(StructuredGraph graph, ValueNode object, ValueNode value) {
 762         assert !object.isConstant() || object.asConstant().isDefaultForKind();
 763 
 764         ValueNode writeValue = value;
 765         if (runtime.getVMConfig().useCompressedClassPointers) {
 766             writeValue = HotSpotCompressionNode.compress(value, runtime.getVMConfig().getKlassEncoding());
 767         }
 768 
 769         AddressNode address = createOffsetAddress(graph, object, runtime.getVMConfig().hubOffset);
 770         return graph.add(new WriteNode(address, HUB_WRITE_LOCATION, writeValue, BarrierType.NONE));
 771     }
 772 
 773     @Override
 774     protected BarrierType fieldLoadBarrierType(ResolvedJavaField f) {
 775         HotSpotResolvedJavaField loadField = (HotSpotResolvedJavaField) f;
 776         if (loadField.getJavaKind() == JavaKind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) &&

 777                         loadField.getName().equals("referent")) {
 778             return BarrierType.WEAK_FIELD;
 779         }
 780         return super.fieldLoadBarrierType(f);
 781     }
 782 
 783     @Override
 784     public int fieldOffset(ResolvedJavaField f) {
 785         return f.getOffset();
 786     }
 787 
 788     @Override
 789     public int arrayLengthOffset() {
 790         return runtime.getVMConfig().arrayOopDescLengthOffset();
 791     }
 792 
 793     @Override
 794     protected final JavaKind getStorageKind(ResolvedJavaField field) {
 795         return field.getJavaKind();
 796     }
 797 
 798     @Override
 799     public ObjectCloneSnippets.Templates getObjectCloneSnippets() {
 800         return objectCloneSnippets;
< prev index next >