summaryrefslogtreecommitdiff
path: root/src/jit/inline.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/inline.h')
-rw-r--r--src/jit/inline.h52
1 files changed, 31 insertions, 21 deletions
diff --git a/src/jit/inline.h b/src/jit/inline.h
index 2634ebe6fa..ee07130676 100644
--- a/src/jit/inline.h
+++ b/src/jit/inline.h
@@ -506,6 +506,7 @@ struct InlineCandidateInfo
var_types fncRetType;
CORINFO_METHOD_HANDLE ilCallerHandle; // the logical IL caller of this inlinee.
CORINFO_CONTEXT_HANDLE exactContextHnd;
+ bool exactContextNeedsRuntimeLookup;
CorInfoInitClassResult initClassResult;
};
@@ -513,31 +514,32 @@ struct InlineCandidateInfo
struct InlArgInfo
{
- unsigned argIsUsed : 1; // is this arg used at all?
- unsigned argIsInvariant : 1; // the argument is a constant or a local variable address
- unsigned argIsLclVar : 1; // the argument is a local variable
- unsigned argIsThis : 1; // the argument is the 'this' pointer
- unsigned argHasSideEff : 1; // the argument has side effects
- unsigned argHasGlobRef : 1; // the argument has a global ref
- unsigned argHasTmp : 1; // the argument will be evaluated to a temp
- unsigned argIsByRefToStructLocal : 1; // Is this arg an address of a struct local or a normed struct local or a
- // field in them?
- unsigned argHasLdargaOp : 1; // Is there LDARGA(s) operation on this argument?
- unsigned argHasStargOp : 1; // Is there STARG(s) operation on this argument?
-
- unsigned argTmpNum; // the argument tmp number
- GenTreePtr argNode;
- GenTreePtr argBashTmpNode; // tmp node created, if it may be replaced with actual arg
+ GenTreePtr argNode; // caller node for this argument
+ GenTreePtr argBashTmpNode; // tmp node created, if it may be replaced with actual arg
+ unsigned argTmpNum; // the argument tmp number
+ unsigned argIsUsed : 1; // is this arg used at all?
+ unsigned argIsInvariant : 1; // the argument is a constant or a local variable address
+ unsigned argIsLclVar : 1; // the argument is a local variable
+ unsigned argIsThis : 1; // the argument is the 'this' pointer
+ unsigned argHasSideEff : 1; // the argument has side effects
+ unsigned argHasGlobRef : 1; // the argument has a global ref
+ unsigned argHasTmp : 1; // the argument will be evaluated to a temp
+ unsigned argHasLdargaOp : 1; // Is there LDARGA(s) operation on this argument?
+ unsigned argHasStargOp : 1; // Is there STARG(s) operation on this argument?
+ unsigned argIsByRefToStructLocal : 1; // Is this arg an address of a struct local or a normed struct local or a
+ // field in them?
};
-// InlArgInfo describes inline candidate local variable properties.
+// InlLclVarInfo describes inline candidate argument and local variable properties.
struct InlLclVarInfo
{
- var_types lclTypeInfo;
typeInfo lclVerTypeInfo;
- bool lclHasLdlocaOp; // Is there LDLOCA(s) operation on this argument?
- bool lclIsPinned;
+ var_types lclTypeInfo;
+ unsigned lclHasLdlocaOp : 1; // Is there LDLOCA(s) operation on this local?
+ unsigned lclHasStlocOp : 1; // Is there a STLOC on this local?
+ unsigned lclHasMultipleStlocOp : 1; // Is there more than one STLOC on this local
+ unsigned lclIsPinned : 1;
};
// InlineInfo provides detailed information about a particular inline candidate.
@@ -563,8 +565,16 @@ struct InlineInfo
int lclTmpNum[MAX_INL_LCLS]; // map local# -> temp# (-1 if unused)
InlLclVarInfo lclVarInfo[MAX_INL_LCLS + MAX_INL_ARGS + 1]; // type information from local sig
- bool thisDereferencedFirst;
- bool hasPinnedLocals;
+ unsigned numberOfGcRefLocals; // Number of TYP_REF and TYP_BYREF locals
+
+ bool HasGcRefLocals() const
+ {
+ return numberOfGcRefLocals > 0;
+ }
+
+ bool thisDereferencedFirst;
+ unsigned typeContextArg;
+
#ifdef FEATURE_SIMD
bool hasSIMDTypeArgLocalOrReturn;
#endif // FEATURE_SIMD