@@ -499,8 +499,8 @@ uint Inline::FillInlineesDataArray(
499
499
Js::FunctionBody *inlineeFunctionBody = inlineeJitTimeData->GetFunctionBody ();
500
500
if (!PHASE_OFF (Js::PolymorphicInlinePhase, inlineeFunctionBody))
501
501
{
502
- const Js::FunctionCodeGenJitTimeData* rightInlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFunctionBody);
503
- const Js::FunctionCodeGenRuntimeData* rightInlineeRuntimeData = inlineeRuntimeData->GetRuntimeDataFromFunctionInfo (inlineeFunctionBody);
502
+ const Js::FunctionCodeGenJitTimeData* rightInlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFunctionBody-> GetFunctionInfo () );
503
+ const Js::FunctionCodeGenRuntimeData* rightInlineeRuntimeData = inlineeRuntimeData->GetRuntimeDataFromFunctionInfo (inlineeFunctionBody-> GetFunctionInfo () );
504
504
505
505
if (rightInlineeJitTimeData)
506
506
{
@@ -551,15 +551,15 @@ void Inline::FillInlineesDataArrayUsingFixedMethods(
551
551
inlineeFuncBody = inlineeJitTimeData->GetFunctionBody ();
552
552
if (!PHASE_OFF (Js::PolymorphicInlinePhase, inlineeFuncBody) && !PHASE_OFF (Js::PolymorphicInlineFixedMethodsPhase, inlineeFuncBody))
553
553
{
554
- const Js::FunctionCodeGenJitTimeData* jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFuncBody);
554
+ const Js::FunctionCodeGenJitTimeData* jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFuncBody-> GetFunctionInfo () );
555
555
if (jitTimeData)
556
556
{
557
557
for (uint16 i = 0 ; i < cachedFixedInlineeCount; i++)
558
558
{
559
559
if (inlineeFuncBody == ((Js::JavascriptFunction*)(fixedFieldInfoArray[i].fieldValue ))->GetFunctionBody ())
560
560
{
561
- inlineesDataArray[i].inlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFuncBody);
562
- inlineesDataArray[i].inlineeRuntimeData = inlineeRuntimeData->GetRuntimeDataFromFunctionInfo (inlineeFuncBody);
561
+ inlineesDataArray[i].inlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfo (inlineeFuncBody-> GetFunctionInfo () );
562
+ inlineesDataArray[i].inlineeRuntimeData = inlineeRuntimeData->GetRuntimeDataFromFunctionInfo (inlineeFuncBody-> GetFunctionInfo () );
563
563
inlineesDataArray[i].functionBody = inlineeFuncBody;
564
564
break ;
565
565
}
@@ -759,7 +759,7 @@ Inline::InlinePolymorphicFunctionUsingFixedMethods(IR::Instr *callInstr, const J
759
759
if (i == 0 )
760
760
{
761
761
// Do all the general, non-function-object-specific checks just once.
762
- if (!TryOptimizeCallInstrWithFixedMethod (callInstr, (Js::FunctionInfo*)( inlineesDataArray[i].functionBody ), true , false , false , true /* isInlined*/ , safeThis, true /* dontOptimizeJustCheck*/ , i))
762
+ if (!TryOptimizeCallInstrWithFixedMethod (callInstr, inlineesDataArray[i].functionBody -> GetFunctionInfo ( ), true , false , false , true /* isInlined*/ , safeThis, true /* dontOptimizeJustCheck*/ , i))
763
763
{
764
764
POLYMORPHIC_INLINE_TESTTRACE (_u (" INLINING (Polymorphic; Using Fixed Methods): Skip Inline: can't optimize using Fixed Methods %d (Max: %d)\t Inlinee: %s (%s):\t Caller: %s (%s)\n " ),
765
765
inlineeCount, Js::DynamicProfileInfo::maxPolymorphicInliningSize,
@@ -771,7 +771,7 @@ Inline::InlinePolymorphicFunctionUsingFixedMethods(IR::Instr *callInstr, const J
771
771
else
772
772
{
773
773
if (methodPropertyOpnd->GetFieldValueAsFixedFunction (i) &&
774
- methodPropertyOpnd->GetFieldValueAsFixedFunction (i)->GetFunctionInfo () != (Js::FunctionInfo*)( inlineesDataArray[i].functionBody ))
774
+ methodPropertyOpnd->GetFieldValueAsFixedFunction (i)->GetFunctionInfo () != inlineesDataArray[i].functionBody -> GetFunctionInfo ( ))
775
775
{
776
776
POLYMORPHIC_INLINE_TESTTRACE (_u (" INLINING (Polymorphic; Using Fixed Methods): Skip Inline: can't optimize using Fixed Methods %d (Max: %d)\t Inlinee: %s (%s):\t Caller: %s (%s)\n " ),
777
777
inlineeCount, Js::DynamicProfileInfo::maxPolymorphicInliningSize,
@@ -1012,7 +1012,7 @@ Inline::InlinePolymorphicFunction(IR::Instr *callInstr, const Js::FunctionCodeGe
1012
1012
IR::RegOpnd* functionObject = callInstr->GetSrc1 ()->AsRegOpnd ();
1013
1013
dispatchStartLabel->InsertBefore (IR::BranchInstr::New (Js::OpCode::BrAddr_A, inlineeStartLabel,
1014
1014
IR::IndirOpnd::New (functionObject, Js::JavascriptFunction::GetOffsetOfFunctionInfo (), TyMachPtr, dispatchStartLabel->m_func ),
1015
- IR::AddrOpnd::New (inlineesDataArray[i].functionBody , IR::AddrOpndKindDynamicFunctionBody , dispatchStartLabel->m_func ), dispatchStartLabel->m_func ));
1015
+ IR::AddrOpnd::New (inlineesDataArray[i].functionBody -> GetFunctionInfo () , IR::AddrOpndKindDynamicFunctionInfo , dispatchStartLabel->m_func ), dispatchStartLabel->m_func ));
1016
1016
}
1017
1017
1018
1018
CompletePolymorphicInlining (callInstr, returnValueOpnd, doneLabel, dispatchStartLabel, /* ldMethodFldInstr*/ nullptr , IR::BailOutOnPolymorphicInlineFunction);
@@ -3440,11 +3440,11 @@ Inline::InlineFunctionCommon(IR::Instr *callInstr, StackSym* originalCallTargetS
3440
3440
#endif
3441
3441
if (callInstr->m_opcode == Js::OpCode::CallIFixed)
3442
3442
{
3443
- Assert (callInstr->GetFixedFunction ()->GetFunctionInfo () == funcBody);
3443
+ Assert (callInstr->GetFixedFunction ()->GetFunctionInfo () == funcBody-> GetFunctionInfo () );
3444
3444
}
3445
3445
else
3446
3446
{
3447
- PrepareInsertionPoint (callInstr, funcBody, inlineBailoutChecksBeforeInstr);
3447
+ PrepareInsertionPoint (callInstr, funcBody-> GetFunctionInfo () , inlineBailoutChecksBeforeInstr);
3448
3448
}
3449
3449
3450
3450
Assert (formalCount <= Js::InlineeCallInfo::MaxInlineeArgoutCount);
@@ -3961,14 +3961,14 @@ Inline::InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr
3961
3961
}
3962
3962
3963
3963
void
3964
- Inline::InsertFunctionBodyCheck (IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, Js::FunctionInfo *funcInfo)
3964
+ Inline::InsertFunctionInfoCheck (IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, Js::FunctionInfo *funcInfo)
3965
3965
{
3966
3966
// if (JavascriptFunction::FromVar(r1)->functionInfo != funcInfo) goto noInlineLabel
3967
3967
// BrNeq_I4 noInlineLabel, r1->functionInfo, funcInfo
3968
- IR::IndirOpnd* funcBody = IR::IndirOpnd::New (callInstr->GetSrc1 ()->AsRegOpnd (), Js::JavascriptFunction::GetOffsetOfFunctionInfo (), TyMachPtr, callInstr->m_func );
3969
- IR::AddrOpnd* inlinedFuncBody = IR::AddrOpnd::New (funcInfo, IR::AddrOpndKindDynamicFunctionBody , callInstr->m_func );
3970
- bailoutInstr->SetSrc1 (funcBody );
3971
- bailoutInstr->SetSrc2 (inlinedFuncBody );
3968
+ IR::IndirOpnd* opndFuncInfo = IR::IndirOpnd::New (callInstr->GetSrc1 ()->AsRegOpnd (), Js::JavascriptFunction::GetOffsetOfFunctionInfo (), TyMachPtr, callInstr->m_func );
3969
+ IR::AddrOpnd* inlinedFuncInfo = IR::AddrOpnd::New (funcInfo, IR::AddrOpndKindDynamicFunctionInfo , callInstr->m_func );
3970
+ bailoutInstr->SetSrc1 (opndFuncInfo );
3971
+ bailoutInstr->SetSrc2 (inlinedFuncInfo );
3972
3972
3973
3973
insertBeforeInstr->InsertBefore (bailoutInstr);
3974
3974
}
@@ -3987,6 +3987,10 @@ Inline::InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeI
3987
3987
IR::Instr *
3988
3988
Inline::PrepareInsertionPoint (IR::Instr *callInstr, Js::FunctionInfo *funcInfo, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind)
3989
3989
{
3990
+ if (callInstr->m_func == this ->topFunc && this ->topFunc ->GetLocalFunctionId ()==160 && callInstr->GetByteCodeOffset ()==0x1f )
3991
+ {
3992
+ *(volatile int *)this ;
3993
+ }
3990
3994
Assert (insertBeforeInstr);
3991
3995
Assert (insertBeforeInstr->m_func == callInstr->m_func );
3992
3996
Assert (bailOutKind == IR::BailOutOnInlineFunction);
@@ -4006,7 +4010,7 @@ Inline::PrepareInsertionPoint(IR::Instr *callInstr, Js::FunctionInfo *funcInfo,
4006
4010
InsertFunctionTypeIdCheck (callInstr, insertBeforeInstr, bailOutIfNotJsFunction);
4007
4011
4008
4012
// 3. Bailout if function body doesn't match funcInfo
4009
- InsertFunctionBodyCheck (callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo);
4013
+ InsertFunctionInfoCheck (callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo);
4010
4014
4011
4015
return primaryBailOutInstr;
4012
4016
}
@@ -5369,4 +5373,4 @@ Inline::Simd128FixLoadStoreInstr(Js::BuiltinFunction builtInId, IR::Instr * call
5369
5373
5370
5374
}
5371
5375
}
5372
- #endif
5376
+ #endif
0 commit comments