@Override public void lower(LoweringTool tool) { if (graph().getGuardsStage().areFrameStatesAtDeopts()) { ForeignCallDescriptor desc = HotSpotHostForeignCallsProvider.lookupCheckcastArraycopyDescriptor(isUninit()); StructuredGraph graph = graph(); ValueNode srcAddr = computeBase(getSource(), getSourcePosition()); ValueNode destAddr = computeBase(getDestination(), getDestinationPosition()); ValueNode len = getLength(); if (len.stamp().getStackKind() != runtime.getTarget().wordJavaKind) { len = IntegerConvertNode.convert( len, StampFactory.forKind(runtime.getTarget().wordJavaKind), graph()); } ForeignCallNode call = graph.add( new ForeignCallNode( runtime.getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len, superCheckOffset, destElemKlass)); call.setStateAfter(stateAfter()); graph.replaceFixedWithFixed(this, call); } }
NodeIntrinsificationPhase getIntrinsifier() { if (intrinsifier == null) { HotSpotProviders providers = runtime.getHostProviders(); intrinsifier = new NodeIntrinsificationPhase(providers, providers.getSnippetReflection()); } return intrinsifier; }
public Suites createSuites() { Suites ret = Suites.createDefaultSuites(); if (ImmutableCode.getValue()) { // lowering introduces class constants, therefore it must be after lowering ret.getHighTier() .appendPhase( new LoadJavaMirrorWithKlassPhase( runtime.getConfig().classMirrorOffset, runtime.getConfig().getOopEncoding())); if (VerifyPhases.getValue()) { ret.getHighTier().appendPhase(new AheadOfTimeVerificationPhase()); } } ret.getMidTier().appendPhase(new WriteBarrierAdditionPhase(runtime.getConfig())); if (VerifyPhases.getValue()) { ret.getMidTier().appendPhase(new WriteBarrierVerificationPhase()); } return ret; }
MetaAccessProvider getMetaAccess() { return runtime.getHostProviders().getMetaAccess(); }