bool compLocallocOptimized; // Does the method have an optimized localloc
bool compQmarkUsed; // Does the method use GT_QMARK/GT_COLON
bool compQmarkRationalized; // Is it allowed to use a GT_QMARK/GT_COLON node.
- bool compUnsafeCastUsed; // Does the method use LDIND/STIND to cast between scalar/refernce types
bool compHasBackwardJump; // Does the method (or some inlinee) have a lexically backwards jump?
bool compHasBackwardJumpInHandler; // Does the method have a lexically backwards jump in a handler?
bool compSwitchedToOptimized; // Codegen initially was Tier0 but jit switched to FullOpts
compLocallocUsed |= InlineeCompiler->compLocallocUsed;
compLocallocOptimized |= InlineeCompiler->compLocallocOptimized;
compQmarkUsed |= InlineeCompiler->compQmarkUsed;
- compUnsafeCastUsed |= InlineeCompiler->compUnsafeCastUsed;
compGSReorderStackLayout |= InlineeCompiler->compGSReorderStackLayout;
compHasBackwardJump |= InlineeCompiler->compHasBackwardJump;
if (!tiCompatibleWith(value, normPtrVal, true))
{
Verify(tiCompatibleWith(value, normPtrVal, true), "type mismatch");
- compUnsafeCastUsed = true;
}
return ptrVal;
}
if (instrType.IsObjRef() && !ptrVal.IsObjRef())
{
Verify(false, "bad pointer");
- compUnsafeCastUsed = true;
}
else if (!instrType.IsObjRef() && !typeInfo::AreEquivalent(instrType, ptrVal))
{
Verify(false, "pointer not consistent with instr");
- compUnsafeCastUsed = true;
}
}
else
{
Verify(false, "pointer not byref");
- compUnsafeCastUsed = true;
}
return ptrVal;
lclTyp = TYP_DOUBLE;
goto STIND;
STIND:
- compUnsafeCastUsed = true; // Have to go conservative
-
- STIND_POST_VERIFY:
op2 = impPopStack().val; // value to store
op1 = impPopStack().val; // address to store to
lclTyp = TYP_USHORT;
goto LDIND;
LDIND:
- compUnsafeCastUsed = true; // Have to go conservative
-
- LDIND_POST_VERIFY:
op1 = impPopStack().val; // address to load from
impBashVarAddrsToI(op1);
impPushOnStack(op1, typeInfo());
opcode = CEE_STIND_REF;
lclTyp = TYP_REF;
- goto STIND_POST_VERIFY;
+ goto STIND;
}
op2 = impPopStack().val; // Src
lclTyp = TYP_REF;
}
- compUnsafeCastUsed = true;
-
if (lclTyp == TYP_REF)
{
opcode = CEE_STIND_REF;
- goto STIND_POST_VERIFY;
+ goto STIND;
}
CorInfoType jitTyp = info.compCompHnd->asCorInfoType(resolvedToken.hClass);
if (impIsPrimitive(jitTyp))
{
lclTyp = JITtype2varType(jitTyp);
- goto STIND_POST_VERIFY;
+ goto STIND;
}
op2 = impPopStack().val; // Value
tiRetVal = verMakeTypeInfo(resolvedToken.hClass);
- compUnsafeCastUsed = true;
-
if (eeIsValueClass(resolvedToken.hClass))
{
lclTyp = TYP_STRUCT;
{
lclTyp = TYP_REF;
opcode = CEE_LDIND_REF;
- goto LDIND_POST_VERIFY;
+ goto LDIND;
}
op1 = impPopStack().val;