Skip to content

Commit 68e34a5

Browse files
committed
Use LocalFunctionId to recognize Built-in's instead of entry address
1 parent 40a21ee commit 68e34a5

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

lib/Backend/GlobOpt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1635,7 +1635,7 @@ GlobOpt::OptArguments(IR::Instr *instr)
16351635
{
16361636
Assert(builtinOpnd->AsAddrOpnd()->m_isFunction);
16371637

1638-
Js::BuiltinFunction builtinFunction = Js::JavascriptLibrary::GetBuiltInForFuncInfo(((FixedFieldInfo*)builtinOpnd->AsAddrOpnd()->m_metadata)->GetFuncInfoAddr(), func->GetThreadContextInfo());
1638+
Js::BuiltinFunction builtinFunction = Js::JavascriptLibrary::GetBuiltInForFuncInfo(((FixedFieldInfo*)builtinOpnd->AsAddrOpnd()->m_metadata)->GetLocalFuncId());
16391639
if (builtinFunction == Js::BuiltinFunction::JavascriptFunction_Apply)
16401640
{
16411641
CurrentBlockData()->ClearArgumentsSym(src1->AsRegOpnd());

lib/Backend/Inline.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,7 +2016,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo *
20162016
*pIsInlined = false;
20172017

20182018
// Inlining is profile-based, so get the built-in function from profile rather than from the callInstr's opnd.
2019-
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo());
2019+
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetLocalFunctionId());
20202020

20212021
#if defined(DBG_DUMP) || defined(ENABLE_DEBUG_CONFIG_OPTIONS)
20222022
char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE];
@@ -2193,7 +2193,7 @@ Inline::InlineBuiltInFunction(IR::Instr *callInstr, const FunctionJITTimeInfo *
21932193
argoutInstr->SetByteCodeOffset(callInstr);
21942194
callInstr->GetInsertBeforeByteCodeUsesInstr()->InsertBefore(argoutInstr);
21952195

2196-
Js::BuiltinFunction builtInFunctionId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo());
2196+
Js::BuiltinFunction builtInFunctionId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(inlineeData->GetLocalFunctionId());
21972197

21982198

21992199
callInstr->m_opcode = inlineCallOpCode;
@@ -2420,7 +2420,7 @@ IR::Instr* Inline::InlineApply(IR::Instr *callInstr, const FunctionJITTimeInfo *
24202420
return callInstr;
24212421
}
24222422

2423-
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(applyData->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo());
2423+
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(applyData->GetLocalFunctionId());
24242424
const FunctionJITTimeInfo * inlineeData = nullptr;
24252425

24262426
IR::Instr* arrayArgInstr = nullptr;
@@ -2657,7 +2657,7 @@ IR::Instr * Inline::InlineApplyBuiltInTargetWithArray(IR::Instr * callInstr, con
26572657
argOut = IR::Instr::New(Js::OpCode::ArgOut_A_InlineSpecialized, linkOpnd, implicitThisArgOut->GetSrc1(), argOut->GetDst(), callInstr->m_func);
26582658
callInstr->InsertBefore(argOut);
26592659

2660-
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInInfo->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo());
2660+
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInInfo->GetLocalFunctionId());
26612661
IR::HelperCallOpnd * helperCallOpnd = nullptr;
26622662
switch (builtInId)
26632663
{
@@ -3022,7 +3022,7 @@ IR::Instr*
30223022
Inline::InlineCall(IR::Instr *callInstr, const FunctionJITTimeInfo *funcInfo, const FunctionJITTimeInfo * inlinerData, const StackSym *symCallerThis, bool* pIsInlined, uint callSiteId, uint recursiveInlineDepth)
30233023
{
30243024
Func *func = callInstr->m_func;
3025-
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetFunctionInfoAddr(), func->GetThreadContextInfo());
3025+
Js::BuiltinFunction builtInId = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetLocalFunctionId());
30263026

30273027
*pIsInlined = false;
30283028
if (PHASE_OFF(Js::InlineCallPhase, this->topFunc) || PHASE_OFF(Js::InlineCallPhase, func)
@@ -3273,7 +3273,7 @@ Inline::TryGetFixedMethodsForBuiltInAndTarget(IR::Instr *callInstr, const Functi
32733273
char16 debugStringBuffer3[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE];
32743274
#endif
32753275

3276-
Assert(isApplyTarget || Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInFuncInfo->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo()));
3276+
Assert(isApplyTarget || Js::JavascriptLibrary::GetBuiltInForFuncInfo(builtInFuncInfo->GetLocalFunctionId()));
32773277

32783278
Js::OpCode originalCallOpCode = callInstr->m_opcode;
32793279
StackSym* originalCallTargetStackSym = callInstr->GetSrc1()->GetStackSym();
@@ -4363,7 +4363,7 @@ Inline::InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeIns
43634363
void
43644364
Inline::InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr *bailOutInstr, const FunctionJITTimeInfo *funcInfo)
43654365
{
4366-
Js::BuiltinFunction index = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetFunctionInfoAddr(), this->topFunc->GetThreadContextInfo());
4366+
Js::BuiltinFunction index = Js::JavascriptLibrary::GetBuiltInForFuncInfo(funcInfo->GetLocalFunctionId());
43674367
AssertMsg(index < Js::BuiltinFunction::Count, "Invalid built-in index on a call target marked as built-in");
43684368

43694369
bailOutInstr->SetSrc1(callInstr->GetSrc1()->AsRegOpnd());
@@ -5627,7 +5627,7 @@ Inline::GetInlineeHasArgumentObject(Func * inlinee)
56275627
{
56285628
Assert(builtInOpnd->AsAddrOpnd()->m_isFunction);
56295629

5630-
Js::BuiltinFunction builtinFunction = Js::JavascriptLibrary::GetBuiltInForFuncInfo(((FixedFieldInfo*)builtInOpnd->AsAddrOpnd()->m_metadata)->GetFuncInfoAddr(), this->topFunc->GetThreadContextInfo());
5630+
Js::BuiltinFunction builtinFunction = Js::JavascriptLibrary::GetBuiltInForFuncInfo(((FixedFieldInfo*)builtInOpnd->AsAddrOpnd()->m_metadata)->GetLocalFuncId());
56315631
if (builtinFunction == Js::BuiltinFunction::JavascriptFunction_Apply)
56325632
{
56335633
this->SetIsInInlinedApplyCall(true);

lib/Runtime/Library/JavascriptLibrary.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3345,17 +3345,17 @@ namespace Js
33453345
byte count = BuiltinFunction::Count;
33463346
for (byte index = 0; index < count; index++)
33473347
{
3348-
Assert(!builtInFuncs[index] || (index == GetBuiltInForFuncInfo((intptr_t)builtInFuncs[index]->GetFunctionInfo(), scriptContext->GetThreadContext())));
3348+
Assert(!builtInFuncs[index] || (index == GetBuiltInForFuncInfo(builtInFuncs[index]->GetFunctionInfo()->GetLocalFunctionId())));
33493349
}
33503350
}
33513351
#endif
33523352

33533353
// Returns built-in enum value for given funcInfo. Ultimately this will work for all built-ins (not only Math.*).
33543354
// Used by inliner.
3355-
BuiltinFunction JavascriptLibrary::GetBuiltInForFuncInfo(intptr_t funcInfoAddr, ThreadContextInfo * context)
3355+
BuiltinFunction JavascriptLibrary::GetBuiltInForFuncInfo(LocalFunctionId localFuncId)
33563356
{
33573357
#define LIBRARY_FUNCTION(target, name, argc, flags, EntryInfo) \
3358-
if(funcInfoAddr == (intptr_t)ShiftAddr(context, &EntryInfo)) \
3358+
if(localFuncId == EntryInfo.GetLocalFunctionId()) \
33593359
{ \
33603360
return BuiltinFunction::##target##_##name; \
33613361
}

lib/Runtime/Library/JavascriptLibrary.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,7 @@ namespace Js
10631063
Field(JavascriptFunction*)* GetBuiltinFunctions();
10641064
INT_PTR* GetVTableAddresses();
10651065
static BuiltinFunction GetBuiltinFunctionForPropId(PropertyId id);
1066-
static BuiltinFunction GetBuiltInForFuncInfo(intptr_t funcInfoAddr, ThreadContextInfo *context);
1066+
static BuiltinFunction GetBuiltInForFuncInfo(LocalFunctionId localFuncId);
10671067
#if DBG
10681068
static void CheckRegisteredBuiltIns(Field(JavascriptFunction*)* builtInFuncs, ScriptContext *scriptContext);
10691069
#endif

0 commit comments

Comments
 (0)