Skip to content

Commit 69448f4

Browse files
committed
Redefer function bodies that are not currently being executed and are
eligible for deferred parsing (e.g., not arrow functions, not functions-in-block). This is experimental behavior, off by default. Define an 'on' mode in which all eligible functions are redeferred on GC, as well as a 'stress' mode in which all candidates are redeferred on each stack probe. This change is built on a previous PR that refactors the FunctionBody hierarchy to make it easier to toggle between deferred and fully-compiled states.
1 parent d13a32d commit 69448f4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1314
-905
lines changed

lib/Backend/BailOut.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,7 +1748,7 @@ void BailOutRecord::ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::S
17481748
bailOutRecordNotConst->bailOutCount++;
17491749

17501750
Js::FunctionEntryPointInfo *entryPointInfo = function->GetFunctionEntryPointInfo();
1751-
uint8 callsCount = entryPointInfo->callsCount;
1751+
uint32 callsCount = entryPointInfo->callsCount;
17521752
RejitReason rejitReason = RejitReason::None;
17531753
bool reThunk = false;
17541754

@@ -2297,11 +2297,7 @@ void BailOutRecord::ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::S
22972297

22982298
entryPointInfo->totalJittedLoopIterations += entryPointInfo->jittedLoopIterationsSinceLastBailout;
22992299
entryPointInfo->jittedLoopIterationsSinceLastBailout = 0;
2300-
if (entryPointInfo->totalJittedLoopIterations > UINT8_MAX)
2301-
{
2302-
entryPointInfo->totalJittedLoopIterations = UINT8_MAX;
2303-
}
2304-
uint8 totalJittedLoopIterations = (uint8)entryPointInfo->totalJittedLoopIterations;
2300+
uint32 totalJittedLoopIterations = (uint8)entryPointInfo->totalJittedLoopIterations;
23052301
totalJittedLoopIterations = totalJittedLoopIterations <= Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout() ? 0 : totalJittedLoopIterations - Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout();
23062302

23072303
CheckPreemptiveRejit(executeFunction, bailOutKind, bailOutRecordNotConst, totalJittedLoopIterations, interpreterFrame->GetCurrentLoopNum());
@@ -2583,7 +2579,7 @@ void BailOutRecord::ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::S
25832579
}
25842580
}
25852581

2586-
void BailOutRecord::CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint8& callsOrIterationsCount, int loopNumber)
2582+
void BailOutRecord::CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint32& callsOrIterationsCount, int loopNumber)
25872583
{
25882584
if (bailOutKind == IR::BailOutOnNoProfile && executeFunction->IncrementBailOnMisingProfileCount() > CONFIG_FLAG(BailOnNoProfileLimit))
25892585
{

lib/Backend/BailOut.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ class BailOutRecord
255255

256256
static void ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::ScriptFunction * innerMostInlinee, BailOutRecord const * bailOutRecord, IR::BailOutKind bailOutKind, Js::ImplicitCallFlags savedImplicitCallFlags, void * returnAddress);
257257
static void ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::ScriptFunction * innerMostInlinee, BailOutRecord const * bailOutRecord, IR::BailOutKind bailOutKind);
258-
static void CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint8& callsOrIterationsCount, int loopNumber);
258+
static void CheckPreemptiveRejit(Js::FunctionBody* executeFunction, IR::BailOutKind bailOutKind, BailOutRecord* bailoutRecord, uint32& callsOrIterationsCount, int loopNumber);
259259
void RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStackLayout * layout, Js::InterpreterStackFrame * newInstance, Js::ScriptContext * scriptContext,
260260
bool fromLoopBody, Js::Var * registerSaves, BailOutReturnValue * returnValue, Js::Var* pArgumentsObject, Js::Var branchValue = nullptr, void* returnAddress = nullptr, bool useStartCall = true, void * argoutRestoreAddress = nullptr) const;
261261
void RestoreValues(IR::BailOutKind bailOutKind, Js::JavascriptCallStackLayout * layout, uint count, __in_ecount_opt(count) int * offsets, int argOutSlotId,

lib/Backend/JITTimeFunctionBody.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -920,12 +920,12 @@ JITTimeFunctionBody::GetRootObject() const
920920
return m_bodyData.constTable[Js::FunctionBody::RootObjectRegSlot - Js::FunctionBody::FirstRegSlot];
921921
}
922922

923-
intptr_t
923+
Js::FunctionInfoPtrPtr
924924
JITTimeFunctionBody::GetNestedFuncRef(uint index) const
925925
{
926926
Assert(index < GetNestedCount());
927-
intptr_t baseAddr = m_bodyData.nestedFuncArrayAddr;
928-
return baseAddr + (index * sizeof(void*));
927+
Js::FunctionInfoPtrPtr baseAddr = (Js::FunctionInfoPtrPtr)m_bodyData.nestedFuncArrayAddr;
928+
return baseAddr + index;
929929
}
930930

931931
intptr_t

lib/Backend/JITTimeFunctionBody.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class JITTimeFunctionBody
101101
uint GetFullStatementMapCount() const;
102102
void * ReadFromAuxData(uint offset) const;
103103
void * ReadFromAuxContextData(uint offset) const;
104-
intptr_t GetNestedFuncRef(uint index) const;
104+
Js::FunctionInfoPtrPtr GetNestedFuncRef(uint index) const;
105105
intptr_t GetConstantVar(Js::RegSlot location) const;
106106
template<class T>
107107
T* GetConstAsT(Js::RegSlot location) const

lib/Backend/Lower.cpp

Lines changed: 82 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5400,11 +5400,10 @@ Lowerer::LoadFunctionBodyAsArgument(IR::Instr *instr, IR::IntConstOpnd * functio
54005400
// At which point the deferred function proxy may be collect.
54015401
// Just pass it the address where we will find the function proxy/body
54025402

5403-
intptr_t proxyRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue());
5404-
AssertMsg(proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd");
5405-
//AssertMsg(*proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd");
5403+
Js::FunctionInfoPtrPtr infoRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue());
5404+
AssertMsg(infoRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd");
54065405

5407-
IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)proxyRef, IR::AddrOpndKindDynamicMisc, m_func);
5406+
IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)infoRef, IR::AddrOpndKindDynamicMisc, m_func);
54085407
instrPrev = m_lowererMD.LoadHelperArgument(instr, indexOpnd);
54095408

54105409
m_lowererMD.LoadHelperArgument(instr, envOpnd);
@@ -6090,7 +6089,7 @@ Lowerer::LowerIsInst(IR::Instr * isInstInstr, IR::JnHelperMethod helperMethod)
60906089
}
60916090

60926091
void
6093-
Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy)
6092+
Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo)
60946093
{
60956094
Func * func = this->m_func;
60966095
Assert(func->HasAnyStackNestedFunc());
@@ -6104,7 +6103,7 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro
61046103

61056104
// Currently we don't initialize the environment until we actually allocate the function, we also
61066105
// walk the list of stack function when we need to box them. so we should use initialize it to NullFrameDisplay
6107-
GenerateStackScriptFunctionInit(addressOpnd, nestedProxy,
6106+
GenerateStackScriptFunctionInit(addressOpnd, nestedInfo,
61086107
IR::AddrOpnd::New(func->GetThreadContextInfo()->GetNullFrameDisplayAddr(), IR::AddrOpndKindDynamicMisc, func), insertBeforeInstr);
61096108

61106109
// Establish the next link
@@ -6114,26 +6113,28 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro
61146113

61156114
void
61166115
Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd,
6117-
intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed)
6116+
Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed)
61186117
{
61196118
Func * func = this->m_func;
61206119
IR::Opnd * functionProxyOpnd;
6120+
IR::Opnd * functionInfoOpnd = nullptr;
61216121
IR::Opnd * typeOpnd = nullptr;
61226122
bool doCheckTypeOpnd = true;
6123-
if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*(Js::FunctionProxy **)nestedProxy)->IsDeferred())
6123+
if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*nestedInfo)->IsDeferred())
61246124
{
6125+
functionInfoOpnd = IR::RegOpnd::New(TyMachPtr, func);
6126+
InsertMove(functionInfoOpnd, IR::MemRefOpnd::New(nestedInfo, TyMachPtr, func), insertBeforeInstr);
61256127
functionProxyOpnd = IR::RegOpnd::New(TyMachPtr, func);
6126-
InsertMove(functionProxyOpnd, IR::MemRefOpnd::New(nestedProxy, TyMachPtr, func), insertBeforeInstr);
6128+
InsertMove(functionProxyOpnd, IR::IndirOpnd::New(functionInfoOpnd->AsRegOpnd(), Js::FunctionInfo::GetOffsetOfFunctionProxy(), TyMachPtr, func), insertBeforeInstr);
61276129
typeOpnd = IR::RegOpnd::New(TyMachPtr, func);
61286130
InsertMove(typeOpnd, IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfDeferredPrototypeType(),
61296131
TyMachPtr, func), insertBeforeInstr);
61306132
}
61316133
else
61326134
{
6133-
Js::FunctionProxy * functionProxy = *(Js::FunctionProxy **)nestedProxy;
6134-
Js::FunctionBody * functionBody = functionProxy->GetFunctionBody();
6135+
Js::FunctionBody * functionBody = (*nestedInfo)->GetFunctionBody();
61356136
functionProxyOpnd = CreateFunctionBodyOpnd(functionBody);
6136-
Js::ScriptFunctionType * type = functionProxy->GetDeferredPrototypeType();
6137+
Js::ScriptFunctionType * type = functionBody->GetDeferredPrototypeType();
61376138
if (type != nullptr)
61386139
{
61396140
typeOpnd = IR::AddrOpnd::New(type, IR::AddrOpndKindDynamicType, func);
@@ -6171,14 +6172,16 @@ Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddr
61716172
GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfConstructorCache(),
61726173
LoadLibraryValueOpnd(insertBeforeInstr, LibraryValue::ValueConstructorCacheDefaultInstance),
61736174
insertBeforeInstr, isZeroed);
6174-
IR::Opnd *functionInfoOpnd;
6175-
if (functionProxyOpnd->IsRegOpnd())
6175+
if (!functionInfoOpnd)
61766176
{
6177-
functionInfoOpnd = IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func);
6178-
}
6179-
else
6180-
{
6181-
functionInfoOpnd = IR::MemRefOpnd::New((BYTE*)functionProxyOpnd->AsAddrOpnd()->m_address + Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func);
6177+
if (functionProxyOpnd->IsRegOpnd())
6178+
{
6179+
functionInfoOpnd = IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func);
6180+
}
6181+
else
6182+
{
6183+
functionInfoOpnd = IR::MemRefOpnd::New((BYTE*)functionProxyOpnd->AsAddrOpnd()->m_address + Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func);
6184+
}
61826185
}
61836186
GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfFunctionInfo(), functionInfoOpnd, insertBeforeInstr, isZeroed);
61846187
GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfEnvironment(), envOpnd, insertBeforeInstr, isZeroed);
@@ -6187,12 +6190,12 @@ Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddr
61876190
}
61886191

61896192
void
6190-
Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr)
6193+
Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr)
61916194
{
61926195
Func * func = this->m_func;
61936196
GenerateScriptFunctionInit(regOpnd,
61946197
LoadVTableValueOpnd(insertBeforeInstr, VTableValue::VtableStackScriptFunction),
6195-
nestedProxy, envOpnd, insertBeforeInstr);
6198+
nestedInfo, envOpnd, insertBeforeInstr);
61966199
InsertMove(IR::IndirOpnd::New(regOpnd, Js::StackScriptFunction::GetOffsetOfBoxedScriptFunction(), TyMachPtr, func),
61976200
IR::AddrOpnd::NewNull(func), insertBeforeInstr);
61986201
}
@@ -6245,7 +6248,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv
62456248
IR::IntConstOpnd::New(Js::FunctionBody::Flags_StackNestedFunc, TyInt8, func, true),
62466249
Js::OpCode::BrEq_A, labelNoStackFunc, newScFuncInstr);
62476250

6248-
intptr_t nestedProxy = func->GetJITFunctionBody()->GetNestedFuncRef(index);
6251+
Js::FunctionInfoPtrPtr nestedInfo = func->GetJITFunctionBody()->GetNestedFuncRef(index);
62496252
IR::Instr * instrAssignDst;
62506253
IR::RegOpnd * envOpnd = *ppEnvOpnd;
62516254
if (!func->IsLoopBody())
@@ -6254,7 +6257,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv
62546257
StackSym * stackSym = StackSym::New(TyMisc, func);
62556258
// ScriptFunction and it's next pointer
62566259
this->m_func->StackAllocate(stackSym, sizeof(Js::StackScriptFunction) + sizeof(Js::StackScriptFunction *));
6257-
GenerateStackScriptFunctionInit(stackSym, nestedProxy);
6260+
GenerateStackScriptFunctionInit(stackSym, nestedInfo);
62586261

62596262
InsertMove(IR::SymOpnd::New(stackSym, Js::ScriptFunction::GetOffsetOfEnvironment(), TyMachPtr, func),
62606263
envOpnd,
@@ -14283,22 +14286,65 @@ IR::Instr *Lowerer::InsertConvertFloat64ToFloat32(
1428314286
return instr;
1428414287
}
1428514288

14286-
void Lowerer::InsertIncUInt8PreventOverflow(
14289+
void Lowerer::InsertDecUInt32PreventOverflow(
1428714290
IR::Opnd *const dst,
1428814291
IR::Opnd *const src,
1428914292
IR::Instr *const insertBeforeInstr,
1429014293
IR::Instr * *const onOverflowInsertBeforeInstrRef)
1429114294
{
14292-
LowererMD::InsertIncUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef);
14293-
}
14295+
Assert(dst);
14296+
Assert(dst->GetType() == TyUint32);
14297+
Assert(src);
14298+
Assert(src->GetType() == TyUint32);
14299+
Assert(insertBeforeInstr);
1429414300

14295-
void Lowerer::InsertDecUInt8PreventOverflow(
14296-
IR::Opnd *const dst,
14297-
IR::Opnd *const src,
14298-
IR::Instr *const insertBeforeInstr,
14299-
IR::Instr * *const onOverflowInsertBeforeInstrRef)
14300-
{
14301-
LowererMD::InsertDecUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef);
14301+
Func *const func = insertBeforeInstr->m_func;
14302+
14303+
// Generate:
14304+
// subs temp, src, 1
14305+
// bcs $overflow
14306+
// mov dst, temp
14307+
// b $continue
14308+
// $overflow:
14309+
// mov dst, 0
14310+
// $continue:
14311+
14312+
IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr);
14313+
14314+
// subs temp, src, 1
14315+
IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint32, func), TyUint32, func);
14316+
const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func);
14317+
Lowerer::InsertSub(true, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint32, func, true), overflowLabel);
14318+
14319+
// bcs $overflow
14320+
Lowerer::InsertBranch(Js::OpCode::BrLt_A, true, overflowLabel, overflowLabel);
14321+
14322+
// mov dst, temp
14323+
Lowerer::InsertMove(dst, tempOpnd, overflowLabel);
14324+
14325+
const bool dstEqualsSrc = dst->IsEqual(src);
14326+
if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef)
14327+
{
14328+
// b $continue
14329+
// $overflow:
14330+
// mov dst, 0
14331+
// $continue:
14332+
IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr);
14333+
Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel);
14334+
if(!dstEqualsSrc)
14335+
{
14336+
Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint32, func, true), continueLabel);
14337+
}
14338+
14339+
if(onOverflowInsertBeforeInstrRef)
14340+
{
14341+
*onOverflowInsertBeforeInstrRef = continueLabel;
14342+
}
14343+
}
14344+
else
14345+
{
14346+
// $overflow:
14347+
}
1430214348
}
1430314349

1430414350
void Lowerer::InsertFloatCheckForZeroOrNanBranch(
@@ -21619,18 +21665,16 @@ void Lowerer::LowerFunctionBodyCallCountChange(IR::Instr *const insertBeforeInst
2161921665
IR::AddrOpnd::New((Js::Var)func->GetWorkItem()->GetCallsCountAddress(), IR::AddrOpndKindDynamicMisc, func, true),
2162021666
insertBeforeInstr);
2162121667

21622-
IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint8, func);
21668+
IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint32, func);
2162321669
const IR::AutoReuseOpnd autoReuseCountOpnd(countOpnd, func);
2162421670
if(!isSimpleJit)
2162521671
{
21626-
// InsertIncUint8PreventOverflow [countAddress]
21627-
InsertIncUInt8PreventOverflow(countOpnd, countOpnd, insertBeforeInstr);
21672+
InsertAdd(false, countOpnd, countOpnd, IR::IntConstOpnd::New(1, TyUint32, func), insertBeforeInstr);
2162821673
return;
2162921674
}
2163021675

21631-
// InsertDecUint8PreventOverflow [countAddress]
2163221676
IR::Instr *onOverflowInsertBeforeInstr;
21633-
InsertDecUInt8PreventOverflow(
21677+
InsertDecUInt32PreventOverflow(
2163421678
countOpnd,
2163521679
countOpnd,
2163621680
insertBeforeInstr,

lib/Backend/Lower.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,10 @@ class Lowerer
144144
void EnsureZeroLastStackFunctionNext();
145145
void AllocStackClosure();
146146
IR::Instr * GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnvOpnd);
147-
void GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy);
147+
void GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo);
148148
void GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd,
149-
intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false);
150-
void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr);
149+
Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false);
150+
void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr);
151151
IR::Instr * LowerProfiledStFld(IR::JitProfilingInstr * instr, Js::PropertyOperationFlags flags);
152152
IR::Instr * LowerStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, IR::JnHelperMethod polymorphicHelperMethod, bool withInlineCache, IR::LabelInstr *ppBailOutLabel = nullptr, bool isHelper = false, bool withPutFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None);
153153
IR::Instr * LowerScopedStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, bool withInlineCache,
@@ -327,8 +327,7 @@ class Lowerer
327327
static IR::Instr * InsertConvertFloat64ToFloat32(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr);
328328

329329
public:
330-
static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr);
331-
static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr);
330+
static void InsertDecUInt32PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr);
332331
void InsertFloatCheckForZeroOrNanBranch(IR::Opnd *const src, const bool branchOnZeroOrNan, IR::LabelInstr *const target, IR::LabelInstr *const fallthroughLabel, IR::Instr *const insertBeforeInstr);
333332

334333
public:

0 commit comments

Comments
 (0)