Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify signature context management in Crossgen2 #32158

Merged
merged 1 commit into from
Feb 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2232,7 +2232,7 @@ private void getFieldInfo(ref CORINFO_RESOLVED_TOKEN pResolvedToken, CORINFO_MET

// Static fields outside of the version bubble need to be accessed using the ENCODE_FIELD_ADDRESS
// helper in accordance with ZapInfo::getFieldInfo in CoreCLR.
pResult->fieldLookup = CreateConstLookupToSymbol(_compilation.SymbolNodeFactory.FieldAddress(field, GetSignatureContext()));
pResult->fieldLookup = CreateConstLookupToSymbol(_compilation.SymbolNodeFactory.FieldAddress(field));

pResult->helper = CorInfoHelpFunc.CORINFO_HELP_READYTORUN_STATIC_BASE;

Expand All @@ -2246,7 +2246,7 @@ private void getFieldInfo(ref CORINFO_RESOLVED_TOKEN pResolvedToken, CORINFO_MET
{
pResult->fieldLookup = CreateConstLookupToSymbol(
#if READYTORUN
_compilation.SymbolNodeFactory.CreateReadyToRunHelper(helperId, field.OwningType, GetSignatureContext())
_compilation.SymbolNodeFactory.CreateReadyToRunHelper(helperId, field.OwningType)
#else
_compilation.NodeFactory.ReadyToRunHelper(helperId, field.OwningType)
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ public class DelayLoadHelperMethodImport : DelayLoadHelperImport, IMethodNode

private readonly bool _useInstantiatingStub;

private readonly SignatureContext _signatureContext;

public DelayLoadHelperMethodImport(
NodeFactory factory,
ImportSectionNode importSectionNode,
Expand All @@ -32,13 +30,11 @@ public DelayLoadHelperMethodImport(
bool useVirtualCall,
bool useInstantiatingStub,
Signature instanceSignature,
SignatureContext signatureContext,
string callSite = null)
: base(factory, importSectionNode, helper, instanceSignature, useVirtualCall, callSite)
{
_method = method;
_useInstantiatingStub = useInstantiatingStub;
_signatureContext = signatureContext;
}

public override IEnumerable<DependencyListEntry> GetStaticDependencies(NodeFactory factory)
Expand All @@ -55,8 +51,7 @@ public override IEnumerable<DependencyListEntry> GetStaticDependencies(NodeFacto
new MethodWithToken(canonMethod, _method.Token, constrainedType: null),
isUnboxingStub: false,
isInstantiatingStub: false,
isPrecodeImportRequired: false,
signatureContext: _signatureContext);
isPrecodeImportRequired: false);
yield return new DependencyListEntry(canonMethodNode, "Canonical method for instantiating stub");
}
}
Expand All @@ -72,10 +67,6 @@ public override int CompareToImpl(ISortableNode other, CompilerComparer comparer
if (result != 0)
return result;

result = _signatureContext.CompareTo(otherNode._signatureContext, comparer);
if (result != 0)
return result;

result = _method.CompareTo(otherNode._method, comparer);
if (result != 0)
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,19 @@ public class DelegateCtorSignature : Signature

private readonly ModuleToken _methodToken;

private readonly SignatureContext _signatureContext;

public DelegateCtorSignature(
TypeDesc delegateType,
IMethodNode targetMethod,
ModuleToken methodToken,
SignatureContext signatureContext)
ModuleToken methodToken)
{
_delegateType = delegateType;
_targetMethod = targetMethod;
_methodToken = methodToken;
_signatureContext = signatureContext;

// Ensure types in signature are loadable and resolvable, otherwise we'll fail later while emitting the signature
signatureContext.Resolver.CompilerContext.EnsureLoadableType(delegateType);
signatureContext.Resolver.CompilerContext.EnsureLoadableMethod(targetMethod.Method);
CompilerTypeSystemContext compilerContext = (CompilerTypeSystemContext)delegateType.Context;
compilerContext.EnsureLoadableType(delegateType);
compilerContext.EnsureLoadableMethod(targetMethod.Method);
}

public override int ClassCode => 99885741;
Expand All @@ -44,7 +41,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)

if (!relocsOnly)
{
SignatureContext innerContext = builder.EmitFixup(factory, ReadyToRunFixupKind.DelegateCtor, _methodToken.Module, _signatureContext);
SignatureContext innerContext = builder.EmitFixup(factory, ReadyToRunFixupKind.DelegateCtor, _methodToken.Module, factory.SignatureContext);

builder.EmitMethodSignature(
new MethodWithToken(_targetMethod.Method, _methodToken, constrainedType: null),
Expand Down Expand Up @@ -93,11 +90,7 @@ public override int CompareToImpl(ISortableNode other, CompilerComparer comparer
if (result != 0)
return result;

result = _methodToken.CompareTo(otherNode._methodToken);
if (result != 0)
return result;

return _signatureContext.CompareTo(otherNode._signatureContext, comparer);
return _methodToken.CompareTo(otherNode._methodToken);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ public ExternalMethodImport(
ReadyToRunFixupKind fixupKind,
MethodWithToken method,
bool isUnboxingStub,
bool isInstantiatingStub,
SignatureContext signatureContext)
bool isInstantiatingStub)
: base(
factory,
factory.MethodImports,
Expand All @@ -28,8 +27,7 @@ public ExternalMethodImport(
fixupKind,
method,
isUnboxingStub,
isInstantiatingStub,
signatureContext))
isInstantiatingStub))
{
_method = method;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@ public class FieldFixupSignature : Signature

private readonly FieldDesc _fieldDesc;

private readonly SignatureContext _signatureContext;

public FieldFixupSignature(ReadyToRunFixupKind fixupKind, FieldDesc fieldDesc, SignatureContext signatureContext)
public FieldFixupSignature(ReadyToRunFixupKind fixupKind, FieldDesc fieldDesc)
{
_fixupKind = fixupKind;
_fieldDesc = fieldDesc;
_signatureContext = signatureContext;

// Ensure types in signature are loadable and resolvable, otherwise we'll fail later while emitting the signature
signatureContext.Resolver.CompilerContext.EnsureLoadableType(fieldDesc.OwningType);
((CompilerTypeSystemContext)fieldDesc.Context).EnsureLoadableType(fieldDesc.OwningType);
}

public override int ClassCode => 271828182;
Expand All @@ -40,8 +37,8 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
{
dataBuilder.AddSymbol(this);

EcmaModule targetModule = _signatureContext.GetTargetModule(_fieldDesc);
SignatureContext innerContext = dataBuilder.EmitFixup(factory, _fixupKind, targetModule, _signatureContext);
EcmaModule targetModule = factory.SignatureContext.GetTargetModule(_fieldDesc);
SignatureContext innerContext = dataBuilder.EmitFixup(factory, _fixupKind, targetModule, factory.SignatureContext);

dataBuilder.EmitFieldSignature(_fieldDesc, innerContext);
}
Expand All @@ -62,11 +59,7 @@ public override int CompareToImpl(ISortableNode other, CompilerComparer comparer
if (result != 0)
return result;

result = comparer.Compare(_fieldDesc, otherNode._fieldDesc);
if (result != 0)
return result;

return _signatureContext.CompareTo(otherNode._signatureContext, comparer);
return comparer.Compare(_fieldDesc, otherNode._fieldDesc);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,13 @@ public class GenericLookupSignature : Signature

private readonly GenericContext _methodContext;

private readonly SignatureContext _signatureContext;

public GenericLookupSignature(
CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind,
ReadyToRunFixupKind fixupKind,
TypeDesc typeArgument,
MethodWithToken methodArgument,
FieldDesc fieldArgument,
GenericContext methodContext,
SignatureContext signatureContext)
GenericContext methodContext)
{
Debug.Assert(typeArgument != null || methodArgument != null || fieldArgument != null);
_runtimeLookupKind = runtimeLookupKind;
Expand All @@ -45,7 +42,6 @@ public GenericLookupSignature(
_methodArgument = methodArgument;
_fieldArgument = fieldArgument;
_methodContext = methodContext;
_signatureContext = signatureContext;
}

public override int ClassCode => 258608008;
Expand All @@ -65,11 +61,11 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
}
else if (_typeArgument != null)
{
targetModule = _signatureContext.GetTargetModule(_typeArgument);
targetModule = factory.SignatureContext.GetTargetModule(_typeArgument);
}
else if (_fieldArgument != null)
{
targetModule = _signatureContext.GetTargetModule(_fieldArgument);
targetModule = factory.SignatureContext.GetTargetModule(_fieldArgument);
}
else
{
Expand Down Expand Up @@ -101,7 +97,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder();
dataBuilder.AddSymbol(this);

SignatureContext innerContext = dataBuilder.EmitFixup(factory, fixupToEmit, targetModule, _signatureContext);
SignatureContext innerContext = dataBuilder.EmitFixup(factory, fixupToEmit, targetModule, factory.SignatureContext);
if (contextTypeToEmit != null)
{
dataBuilder.EmitTypeSignature(contextTypeToEmit, innerContext);
Expand Down Expand Up @@ -214,11 +210,7 @@ public override int CompareToImpl(ISortableNode other, CompilerComparer comparer
return result;
}

result = comparer.Compare(_methodContext.ContextMethod, otherNode._methodContext.ContextMethod);
if (result != 0)
return result;

return _signatureContext.CompareTo(otherNode._signatureContext, comparer);
return comparer.Compare(_methodContext.ContextMethod, otherNode._methodContext.ContextMethod);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
int methodIndex = factory.RuntimeFunctionsTable.GetIndex(method);

bool enforceOwningType = false;
ModuleToken moduleToken = method.SignatureContext.GetModuleTokenForMethod(method.Method.GetTypicalMethodDefinition());
if (moduleToken.Module != factory.InputModuleContext.GlobalContext)
ModuleToken moduleToken = factory.SignatureContext.GetModuleTokenForMethod(method.Method.GetTypicalMethodDefinition());
if (moduleToken.Module != factory.SignatureContext.GlobalContext)
{
enforceOwningType = true;
}
Expand All @@ -64,7 +64,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
new MethodWithToken(method.Method, moduleToken, constrainedType: null),
enforceDefEncoding: true,
enforceOwningType,
method.SignatureContext,
factory.SignatureContext,
isUnboxingStub: false,
isInstantiatingStub: false);
byte[] signature = signatureBuilder.ToArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ public LocalMethodImport(
MethodWithToken method,
MethodWithGCInfo localMethod,
bool isUnboxingStub,
bool isInstantiatingStub,
SignatureContext signatureContext)
bool isInstantiatingStub)
: base(
factory,
factory.MethodImports,
Expand All @@ -31,8 +30,7 @@ public LocalMethodImport(
fixupKind,
method,
isUnboxingStub,
isInstantiatingStub,
signatureContext))
isInstantiatingStub))
{
_localMethod = localMethod;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,26 @@ public class MethodFixupSignature : Signature

private readonly MethodWithToken _method;

private readonly SignatureContext _signatureContext;

private readonly bool _isUnboxingStub;

private readonly bool _isInstantiatingStub;

public MethodFixupSignature(
ReadyToRunFixupKind fixupKind,
MethodWithToken method,
SignatureContext signatureContext,
bool isUnboxingStub,
bool isInstantiatingStub)
{
_fixupKind = fixupKind;
_method = method;
_signatureContext = signatureContext;
_isUnboxingStub = isUnboxingStub;
_isInstantiatingStub = isInstantiatingStub;

// Ensure types in signature are loadable and resolvable, otherwise we'll fail later while emitting the signature
signatureContext.Resolver.CompilerContext.EnsureLoadableMethod(method.Method);
CompilerTypeSystemContext compilerContext = (CompilerTypeSystemContext)method.Method.Context;
compilerContext.EnsureLoadableMethod(method.Method);
if (method.ConstrainedType != null)
signatureContext.Resolver.CompilerContext.EnsureLoadableType(method.ConstrainedType);
compilerContext.EnsureLoadableType(method.ConstrainedType);
}

public MethodDesc Method => _method.Method;
Expand Down Expand Up @@ -88,18 +85,18 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
{
if (method.Token.TokenType == CorTokenType.mdtMethodSpec)
{
method = new MethodWithToken(method.Method, _signatureContext.GetModuleTokenForMethod(method.Method, throwIfNotFound: false), method.ConstrainedType);
method = new MethodWithToken(method.Method, factory.SignatureContext.GetModuleTokenForMethod(method.Method, throwIfNotFound: false), method.ConstrainedType);
}
else if (!optimized && (method.Token.TokenType == CorTokenType.mdtMemberRef))
{
if (method.Method.OwningType.GetTypeDefinition() is EcmaType)
{
method = new MethodWithToken(method.Method, _signatureContext.GetModuleTokenForMethod(method.Method, throwIfNotFound: false), method.ConstrainedType);
method = new MethodWithToken(method.Method, factory.SignatureContext.GetModuleTokenForMethod(method.Method, throwIfNotFound: false), method.ConstrainedType);
}
}
}

SignatureContext innerContext = dataBuilder.EmitFixup(factory, fixupKind, method.Token.Module, _signatureContext);
SignatureContext innerContext = dataBuilder.EmitFixup(factory, fixupKind, method.Token.Module, factory.SignatureContext);

if (optimized && method.Token.TokenType == CorTokenType.mdtMethodDef)
{
Expand Down Expand Up @@ -149,11 +146,7 @@ public override int CompareToImpl(ISortableNode other, CompilerComparer comparer
if (result != 0)
return result;

result = _method.CompareTo(otherNode._method, comparer);
if (result != 0)
return result;

return _signatureContext.CompareTo(otherNode._signatureContext, comparer);
return _method.CompareTo(otherNode._method, comparer);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public class MethodWithGCInfo : ObjectNode, IReadyToRunMethodCodeNode, IMethodBo
public readonly MethodGCInfoNode GCInfoNode;

private readonly MethodDesc _method;
public SignatureContext SignatureContext { get; }

private ObjectData _methodCode;
private FrameInfo[] _frameInfos;
Expand All @@ -29,12 +28,11 @@ public class MethodWithGCInfo : ObjectNode, IReadyToRunMethodCodeNode, IMethodBo
private List<ISymbolNode> _fixups;
private MethodDesc[] _inlinedMethods;

public MethodWithGCInfo(MethodDesc methodDesc, SignatureContext signatureContext)
public MethodWithGCInfo(MethodDesc methodDesc)
{
GCInfoNode = new MethodGCInfoNode(this);
_fixups = new List<ISymbolNode>();
_method = methodDesc;
SignatureContext = signatureContext;
}

public void SetCode(ObjectData data)
Expand Down Expand Up @@ -294,11 +292,7 @@ public void InitializeDebugEHClauseInfos(DebugEHClauseInfo[] debugEHClauseInfos)
public override int CompareToImpl(ISortableNode other, CompilerComparer comparer)
{
MethodWithGCInfo otherNode = (MethodWithGCInfo)other;
int result = comparer.Compare(_method, otherNode._method);
if (result != 0)
return result;

return SignatureContext.CompareTo(otherNode.SignatureContext, comparer);
return comparer.Compare(_method, otherNode._method);
}

public void InitializeInliningInfo(MethodDesc[] inlinedMethods)
Expand Down
Loading