protected LoweringProvider createLoweringProvider(Providers p) { return SubstrateLoweringProvider.create(p.getMetaAccess(), p.getForeignCalls()); }
private Stamp returnStamp(Signature signature) { JavaType returnType = signature.getReturnType(null); JavaKind returnKind = signature.getReturnKind(); if (returnKind == JavaKind.Object && returnType instanceof ResolvedJavaType) { return StampFactory.object(TypeReference.createTrustedWithoutAssumptions((ResolvedJavaType) returnType)); } else { return getLoweringProvider().loadStamp(StampFactory.forKind(returnKind), signature.getReturnKind()); } }
Map<Class<? extends Node>, NodeLoweringProvider<?>> lowerings = lowerer.getLowerings(); lowerer.setConfiguration(runtimeConfig, options, factories, providers, snippetReflection); NonSnippetLowerings.registerLowerings(runtimeConfig, mustNotAllocatePredicate, options, factories, providers, snippetReflection, lowerings); ArithmeticSnippets.registerLowerings(options, factories, providers, snippetReflection, lowerings);
public ValueNode createCFunctionCall(ValueNode targetAddress, List<ValueNode> arguments, Signature signature, boolean emitTransition, boolean emitDeoptTarget) { if (emitTransition) { append(new CFunctionPrologueNode()); } InvokeNode invoke = createIndirectCall(targetAddress, arguments, signature, SubstrateCallingConventionType.NativeCall); assert !emitDeoptTarget || !emitTransition : "cannot have transition for deoptimization targets"; if (emitTransition) { append(new CFunctionEpilogueNode()); } else if (emitDeoptTarget) { DeoptEntryNode deoptEntry = append(new DeoptEntryNode()); deoptEntry.setStateAfter(invoke.stateAfter()); } /* * Sign extend or zero the upper bits of a return value smaller than an int to preserve the * invariant that all such values are represented by an int in the VM. We cannot rely on the * native C compiler doing this for us. */ return getLoweringProvider().implicitLoadConvert(getGraph(), asKind(signature.getReturnType(null)), invoke); }
private Inflation setupBigBang(TargetDescription target, OptionValues options, ForkJoinPool analysisExecutor, AnalysisMetaAccess aMetaAccess, AnalysisConstantReflectionProvider aConstantReflection, WordTypes aWordTypes, SnippetReflectionProvider aSnippetReflection) { assert aUniverse != null : "Analysis universe must be initialized."; assert nativeLibraries != null : "Native libraries must be set."; AnalysisConstantFieldProvider aConstantFieldProvider = new AnalysisConstantFieldProvider(aUniverse, aMetaAccess, aConstantReflection); /* * Install all snippets so that the types, methods, and fields used in the snippets get * added to the universe. */ ForeignCallsProvider aForeignCalls = new SubstrateForeignCallsProvider(); LoweringProvider aLoweringProvider = SubstrateLoweringProvider.create(aMetaAccess, null); StampProvider aStampProvider = new SubstrateStampProvider(aMetaAccess); HostedProviders aProviders = new HostedProviders(aMetaAccess, null, aConstantReflection, aConstantFieldProvider, aForeignCalls, aLoweringProvider, null, aStampProvider, aSnippetReflection, aWordTypes); BytecodeProvider bytecodeProvider = new ResolvedJavaMethodBytecodeProvider(); SubstrateReplacements aReplacments = new SubstrateReplacements(options, aProviders, aSnippetReflection, bytecodeProvider, target, new SubstrateGraphMakerFactory(aWordTypes)); aProviders = new HostedProviders(aMetaAccess, null, aConstantReflection, aConstantFieldProvider, aForeignCalls, aLoweringProvider, aReplacments, aStampProvider, aSnippetReflection, aWordTypes); return new Inflation(options, aUniverse, aProviders, analysisExecutor); }