Skip to content

Commit f16c527

Browse files
committed
Disable obj-type spec for Init*LetFld and Init*ConstFld opcodes
The lowerer doesn't expect InitLetFld to be obj-type speced. While it is legal to obj-type spec InitLetFld and changing the lowerer would be one way to fix this issue, it would not be performant as we don't share types of activation objects yet, leading to repeated Obj-type spec bailouts for InitLetFld. Same reasoning applies to other opcodes Init*LetFld and Init*ConstFld opcodes.
1 parent f03bda5 commit f16c527

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

lib/Runtime/ByteCode/OpCodes.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,14 @@ MACRO_EXTEND_WMS( InitUndeclConsoleLetFld, ElementScopedU, OpSideEffect
302302
MACRO_EXTEND_WMS( InitUndeclConsoleConstFld, ElementScopedU, OpSideEffect|OpHasImplicitCall)
303303
MACRO_WMS( InitConst, Reg2, OpTempNumberTransfer|OpTempObjectTransfer|OpNonIntTransfer|OpCanCSE) // Create and initialize 'const' as property of global object
304304
MACRO_WMS( InitConstSlot, ElementSlot, None)
305-
MACRO_WMS( InitLetFld, ElementCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
306-
MACRO_WMS( InitRootLetFld, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
307-
MACRO_WMS( InitConstFld, ElementCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
308-
MACRO_WMS( InitRootConstFld, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
305+
306+
// Re-evaluate following 4 opcodes and InitInnerLetFld for obj type spec and inline cache lookup when we add sharing of types having properties with non-default
307+
// attributes. Currently, these opcodes are used to set properties on scope objects, whose types we do not share as all their properties are non-configurable
308+
MACRO_WMS( InitLetFld, ElementCP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
309+
MACRO_WMS( InitRootLetFld, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
310+
MACRO_WMS( InitConstFld, ElementCP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
311+
MACRO_WMS( InitRootConstFld, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
312+
309313
MACRO_WMS( InitClassMember, ElementCP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Class member
310314
MACRO_EXTEND_WMS( InitClassMemberComputedName,ElementI, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Class member with computed property name
311315
MACRO_EXTEND_WMS( InitClassMemberSet, ElementC, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Class member in set syntax
@@ -356,9 +360,9 @@ MACRO_WMS_PROFILED_OP( StFldStrict, ElementCP, OpSideEffect|OpHas
356360
MACRO_WMS_PROFILED_OP( StRootFldStrict, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Store into ScriptObject instance's direct field (strict mode, x = ..., access to let/const on root object)
357361
MACRO_WMS_PROFILED_OP( InitFld, ElementCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
358362
MACRO_WMS_PROFILED_OP( InitLocalFld, ElementP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
359-
MACRO_EXTEND_WMS( InitLocalLetFld, ElementP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
363+
MACRO_EXTEND_WMS( InitLocalLetFld, ElementP, OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
360364
MACRO_EXTEND_WMS( InitInnerFld, ElementPIndexed,OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
361-
MACRO_EXTEND_WMS( InitInnerLetFld, ElementPIndexed,OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
365+
MACRO_EXTEND_WMS( InitInnerLetFld, ElementPIndexed,OpSideEffect|OpHasImplicitCall|OpPostOpDbgBailOut) // Declare a property with an initial value
362366
MACRO_WMS_PROFILED_OP( InitRootFld, ElementRootCP, OpSideEffect|OpHasImplicitCall|OpFastFldInstr|OpPostOpDbgBailOut) // Declare a property with an initial value
363367
MACRO_BACKEND_ONLY( LdMethodFromFlags, ElementCP, OpFastFldInstr|OpCanCSE)
364368

0 commit comments

Comments
 (0)