WebKit Bugzilla
Attachment 341637 Details for
Bug 186123
: emitMove should only emit the move if it's actually needed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186123-20180530191007.patch (text/plain), 35.08 KB, created by
Keith Miller
on 2018-05-30 19:10:08 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Keith Miller
Created:
2018-05-30 19:10:08 PDT
Size:
35.08 KB
patch
obsolete
>Subversion Revision: 232326 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 2873e04e9224815d9beda548aa9d01486fd7c29d..977b11434e08f2e37756d924f0aa1f3cdeac9fcd 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,68 @@ >+2018-05-30 Keith Miller <keith_miller@apple.com> >+ >+ emitMove should only emit the move if it's actually needed >+ https://bugs.webkit.org/show_bug.cgi?id=186123 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch relpaces emitMove with moveToDestinationIfNeeded. This >+ will prevent us from emiting moves to the same location. The old >+ emitMove, has been renamed to emitMov and made private. >+ >+ * bytecompiler/BytecodeGenerator.cpp: >+ (JSC::BytecodeGenerator::BytecodeGenerator): >+ (JSC::BytecodeGenerator::emitMov): >+ (JSC::BytecodeGenerator::emitGetGlobalPrivate): >+ (JSC::BytecodeGenerator::emitGetAsyncIterator): >+ (JSC::BytecodeGenerator::emitMove): Deleted. >+ * bytecompiler/BytecodeGenerator.h: >+ (JSC::BytecodeGenerator::emitMove): >+ (JSC::BytecodeGenerator::moveToDestinationIfNeeded): Deleted. >+ * bytecompiler/NodesCodegen.cpp: >+ (JSC::ThisNode::emitBytecode): >+ (JSC::SuperNode::emitBytecode): >+ (JSC::NewTargetNode::emitBytecode): >+ (JSC::ResolveNode::emitBytecode): >+ (JSC::TaggedTemplateNode::emitBytecode): >+ (JSC::ArrayNode::emitBytecode): >+ (JSC::ObjectLiteralNode::emitBytecode): >+ (JSC::EvalFunctionCallNode::emitBytecode): >+ (JSC::FunctionCallResolveNode::emitBytecode): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByValDirect): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_toNumber): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_toString): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_toObject): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_idWithProfile): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isJSArray): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isProxyObject): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isRegExpObject): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isObject): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isDerivedArray): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isMap): >+ (JSC::BytecodeIntrinsicNode::emit_intrinsic_isSet): >+ (JSC::CallFunctionCallDotNode::emitBytecode): >+ (JSC::ApplyFunctionCallDotNode::emitBytecode): >+ (JSC::emitPostIncOrDec): >+ (JSC::PostfixNode::emitBracket): >+ (JSC::PostfixNode::emitDot): >+ (JSC::PrefixNode::emitResolve): >+ (JSC::PrefixNode::emitBracket): >+ (JSC::PrefixNode::emitDot): >+ (JSC::LogicalOpNode::emitBytecode): >+ (JSC::ReadModifyResolveNode::emitBytecode): >+ (JSC::AssignResolveNode::emitBytecode): >+ (JSC::AssignDotNode::emitBytecode): >+ (JSC::AssignBracketNode::emitBytecode): >+ (JSC::FunctionNode::emitBytecode): >+ (JSC::ClassExprNode::emitBytecode): >+ (JSC::DestructuringAssignmentNode::emitBytecode): >+ (JSC::ArrayPatternNode::emitDirectBinding): >+ (JSC::ObjectPatternNode::bindValue const): >+ (JSC::AssignmentElementNode::bindValue const): >+ (JSC::ObjectSpreadExpressionNode::emitBytecode): >+ > 2018-05-30 Daniel Bates <dabates@apple.com> > > Web Inspector: Annotate Same-Site cookies >diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >index 651759f24ef331fe44f18cbbb06289b301e17612..f6710ce1537a5e5393d6eb430de48af19bd93985 100644 >--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >@@ -614,14 +614,14 @@ BytecodeGenerator::BytecodeGenerator(VM& vm, FunctionNode* functionNode, Unlinke > // let promiseCapability be @newPromiseCapability(@Promise) > auto varNewPromiseCapability = variable(propertyNames().builtinNames().newPromiseCapabilityPrivateName()); > RefPtr<RegisterID> scope = newTemporary(); >- moveToDestinationIfNeeded(scope.get(), emitResolveScope(scope.get(), varNewPromiseCapability)); >+ emitMove(scope.get(), emitResolveScope(scope.get(), varNewPromiseCapability)); > RefPtr<RegisterID> newPromiseCapability = emitGetFromScope(newTemporary(), scope.get(), varNewPromiseCapability, ThrowIfNotFound); > > CallArguments args(*this, nullptr, 1); > emitLoad(args.thisRegister(), jsUndefined()); > > auto varPromiseConstructor = variable(propertyNames().builtinNames().PromisePrivateName()); >- moveToDestinationIfNeeded(scope.get(), emitResolveScope(scope.get(), varPromiseConstructor)); >+ emitMove(scope.get(), emitResolveScope(scope.get(), varPromiseConstructor)); > emitGetFromScope(args.argumentRegister(0), scope.get(), varPromiseConstructor, ThrowIfNotFound); > > // JSTextPosition(int _line, int _offset, int _lineStartOffset) >@@ -1666,7 +1666,7 @@ RegisterID* BytecodeGenerator::emitMoveEmptyValue(RegisterID* dst) > return dst; > } > >-RegisterID* BytecodeGenerator::emitMove(RegisterID* dst, RegisterID* src) >+RegisterID* BytecodeGenerator::emitMov(RegisterID* dst, RegisterID* src) > { > ASSERT(src != m_emptyValueRegister); > >@@ -4458,7 +4458,7 @@ RegisterID* BytecodeGenerator::emitGetGlobalPrivate(RegisterID* dst, const Ident > return emitMove(dst, local); > > RefPtr<RegisterID> scope = newTemporary(); >- moveToDestinationIfNeeded(scope.get(), emitResolveScope(scope.get(), var)); >+ emitMove(scope.get(), emitResolveScope(scope.get(), var)); > return emitGetFromScope(dst, scope.get(), var, ThrowIfNotFound); > } > >@@ -4908,7 +4908,7 @@ RegisterID* BytecodeGenerator::emitGetAsyncIterator(RegisterID* argument, Throwa > > auto varCreateAsyncFromSyncIterator = variable(propertyNames().builtinNames().createAsyncFromSyncIteratorPrivateName()); > RefPtr<RegisterID> scope = newTemporary(); >- moveToDestinationIfNeeded(scope.get(), emitResolveScope(scope.get(), varCreateAsyncFromSyncIterator)); >+ emitMove(scope.get(), emitResolveScope(scope.get(), varCreateAsyncFromSyncIterator)); > RefPtr<RegisterID> createAsyncFromSyncIterator = emitGetFromScope(newTemporary(), scope.get(), varCreateAsyncFromSyncIterator, ThrowIfNotFound); > > CallArguments args(*this, nullptr, 2); >diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >index a9bcb45aab3e5f6e6ebf1d7e68e8c79c3ea5d181..273559038c3e9933f94f9dcad715bdb03572a55a 100644 >--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >@@ -467,9 +467,9 @@ namespace JSC { > } > > // Moves src to dst if dst is not null and is different from src, otherwise just returns src. >- RegisterID* moveToDestinationIfNeeded(RegisterID* dst, RegisterID* src) >+ RegisterID* emitMove(RegisterID* dst, RegisterID* src) > { >- return dst == ignoredResult() ? 0 : (dst && dst != src) ? emitMove(dst, src) : src; >+ return dst == ignoredResult() ? nullptr : (dst && dst != src) ? emitMov(dst, src) : src; > } > > Ref<LabelScope> newLabelScope(LabelScope::Type, const Identifier* = 0); >@@ -684,7 +684,6 @@ namespace JSC { > > RegisterID* emitMoveLinkTimeConstant(RegisterID* dst, LinkTimeConstant); > RegisterID* emitMoveEmptyValue(RegisterID* dst); >- RegisterID* emitMove(RegisterID* dst, RegisterID* src); > > RegisterID* emitToNumber(RegisterID* dst, RegisterID* src) { return emitUnaryOpProfiled(op_to_number, dst, src); } > RegisterID* emitToString(RegisterID* dst, RegisterID* src) { return emitUnaryOp(op_to_string, dst, src); } >@@ -992,6 +991,8 @@ namespace JSC { > > void emitToThis(); > >+ RegisterID* emitMov(RegisterID* dst, RegisterID* src); >+ > public: > bool isSuperUsedInInnerArrowFunction(); > bool isSuperCallUsedInInnerArrowFunction(); >diff --git a/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp b/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp >index 84e2548bcbef6eb837df673b179f8252dda9ae1e..3c7798cc656fd1986e431f4dc15e75baad612aa5 100644 >--- a/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp >+++ b/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp >@@ -160,7 +160,7 @@ RegisterID* ThisNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst > if (dst == generator.ignoredResult()) > return 0; > >- RegisterID* result = generator.moveToDestinationIfNeeded(dst, generator.thisRegister()); >+ RegisterID* result = generator.emitMove(dst, generator.thisRegister()); > static const unsigned thisLength = 4; > generator.emitProfileType(generator.thisRegister(), position(), JSTextPosition(-1, position().offset + thisLength, -1)); > return result; >@@ -199,7 +199,7 @@ static RegisterID* emitGetSuperFunctionForConstruct(BytecodeGenerator& generator > RegisterID* SuperNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) > { > RegisterID* result = emitSuperBaseForCallee(generator); >- return generator.moveToDestinationIfNeeded(generator.finalDestination(dst), result); >+ return generator.emitMove(generator.finalDestination(dst), result); > } > > // ------------------------------ ImportNode ------------------------------------- >@@ -220,7 +220,7 @@ RegisterID* NewTargetNode::emitBytecode(BytecodeGenerator& generator, RegisterID > if (dst == generator.ignoredResult()) > return nullptr; > >- return generator.moveToDestinationIfNeeded(dst, generator.newTarget()); >+ return generator.emitMove(dst, generator.newTarget()); > } > > // ------------------------------ ImportMetaNode --------------------------------- >@@ -246,7 +246,7 @@ RegisterID* ResolveNode::emitBytecode(BytecodeGenerator& generator, RegisterID* > return nullptr; > > generator.emitProfileType(local, var, m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); >- return generator.moveToDestinationIfNeeded(dst, local); >+ return generator.emitMove(dst, local); > } > > JSTextPosition divot = m_start + m_ident.length(); >@@ -337,7 +337,7 @@ RegisterID* TaggedTemplateNode::emitBytecode(BytecodeGenerator& generator, Regis > > JSTextPosition newDivot = divotStart() + identifier.length(); > generator.emitExpressionInfo(newDivot, divotStart(), newDivot); >- generator.moveToDestinationIfNeeded(base.get(), generator.emitResolveScope(base.get(), var)); >+ generator.emitMove(base.get(), generator.emitResolveScope(base.get(), var)); > generator.emitGetFromScope(tag.get(), base.get(), var, ThrowIfNotFound); > generator.emitTDZCheckIfNecessary(var, tag.get(), nullptr); > } >@@ -452,7 +452,7 @@ RegisterID* ArrayNode::emitBytecode(BytecodeGenerator& generator, RegisterID* ds > generator.emitPutById(array.get(), generator.propertyNames().length, value); > } > >- return generator.moveToDestinationIfNeeded(dst, array.get()); >+ return generator.emitMove(dst, array.get()); > > handleSpread: > RefPtr<RegisterID> index = generator.emitLoad(generator.newTemporary(), jsNumber(length)); >@@ -477,7 +477,7 @@ handleSpread: > generator.emitBinaryOp(op_add, index.get(), index.get(), generator.emitLoad(0, jsNumber(m_elision)), OperandTypes(ResultType::numberTypeIsInt32(), ResultType::numberTypeIsInt32())); > generator.emitPutById(array.get(), generator.propertyNames().length, index.get()); > } >- return generator.moveToDestinationIfNeeded(dst, array.get()); >+ return generator.emitMove(dst, array.get()); > } > > bool ArrayNode::isSimpleArray() const >@@ -523,7 +523,7 @@ RegisterID* ObjectLiteralNode::emitBytecode(BytecodeGenerator& generator, Regist > } > RefPtr<RegisterID> newObj = generator.emitNewObject(generator.tempDestination(dst)); > generator.emitNode(newObj.get(), m_list); >- return generator.moveToDestinationIfNeeded(dst, newObj.get()); >+ return generator.emitMove(dst, newObj.get()); > } > > // ------------------------------ PropertyListNode ----------------------------- >@@ -855,7 +855,7 @@ RegisterID* EvalFunctionCallNode::emitBytecode(BytecodeGenerator& generator, Reg > CallArguments callArguments(generator, m_args); > JSTextPosition newDivot = divotStart() + 4; > generator.emitExpressionInfo(newDivot, divotStart(), newDivot); >- generator.moveToDestinationIfNeeded( >+ generator.emitMove( > callArguments.thisRegister(), > generator.emitResolveScope(callArguments.thisRegister(), var)); > generator.emitGetFromScope(func.get(), callArguments.thisRegister(), var, ThrowIfNotFound); >@@ -909,7 +909,7 @@ RegisterID* FunctionCallResolveNode::emitBytecode(BytecodeGenerator& generator, > { > if (UNLIKELY(m_ident == generator.vm()->propertyNames->builtinNames().assertPrivateName())) { > if (ASSERT_DISABLED) >- return generator.moveToDestinationIfNeeded(dst, generator.emitLoad(nullptr, jsUndefined())); >+ return generator.emitMove(dst, generator.emitLoad(nullptr, jsUndefined())); > } > > ExpectedFunction expectedFunction = generator.expectedFunctionForIdentifier(m_ident); >@@ -934,7 +934,7 @@ RegisterID* FunctionCallResolveNode::emitBytecode(BytecodeGenerator& generator, > > JSTextPosition newDivot = divotStart() + m_ident.length(); > generator.emitExpressionInfo(newDivot, divotStart(), newDivot); >- generator.moveToDestinationIfNeeded( >+ generator.emitMove( > callArguments.thisRegister(), > generator.emitResolveScope(callArguments.thisRegister(), var)); > generator.emitGetFromScope(func.get(), callArguments.thisRegister(), var, ThrowIfNotFound); >@@ -1010,7 +1010,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect(BytecodeGenerato > > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutById(base.get(), ident, value.get(), PropertyNode::KnownDirect)); >+ return generator.emitMove(dst, generator.emitDirectPutById(base.get(), ident, value.get(), PropertyNode::KnownDirect)); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate(BytecodeGenerator& generator, RegisterID* dst) >@@ -1026,7 +1026,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate(BytecodeG > > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutById(base.get(), *ident, value.get(), PropertyNode::KnownDirect)); >+ return generator.emitMove(dst, generator.emitDirectPutById(base.get(), *ident, value.get(), PropertyNode::KnownDirect)); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByValDirect(BytecodeGenerator& generator, RegisterID* dst) >@@ -1040,7 +1040,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByValDirect(BytecodeGenerat > > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutByVal(base.get(), index.get(), value.get())); >+ return generator.emitMove(dst, generator.emitDirectPutByVal(base.get(), index.get(), value.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_tailCallForwardArguments(BytecodeGenerator& generator, RegisterID* dst) >@@ -1113,7 +1113,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_toNumber(BytecodeGenerator& ge > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitToNumber(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitToNumber(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_toString(BytecodeGenerator& generator, RegisterID* dst) >@@ -1122,7 +1122,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_toString(BytecodeGenerator& ge > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitToString(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitToString(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_toObject(BytecodeGenerator& generator, RegisterID* dst) >@@ -1136,9 +1136,9 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_toObject(BytecodeGenerator& ge > ASSERT(node->m_expr->isString()); > const Identifier& message = static_cast<StringNode*>(node->m_expr)->value(); > ASSERT(!node->m_next); >- return generator.moveToDestinationIfNeeded(dst, generator.emitToObject(temp.get(), src.get(), message)); >+ return generator.emitMove(dst, generator.emitToObject(temp.get(), src.get(), message)); > } >- return generator.moveToDestinationIfNeeded(dst, generator.emitToObject(temp.get(), src.get(), generator.vm()->propertyNames->emptyIdentifier)); >+ return generator.emitMove(dst, generator.emitToObject(temp.get(), src.get(), generator.vm()->propertyNames->emptyIdentifier)); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_idWithProfile(BytecodeGenerator& generator, RegisterID* dst) >@@ -1154,7 +1154,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_idWithProfile(BytecodeGenerato > speculation |= speculationFromString(ident.utf8().data()); > } > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIdWithProfile(idValue.get(), speculation)); >+ return generator.emitMove(dst, generator.emitIdWithProfile(idValue.get(), speculation)); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isJSArray(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1163,7 +1163,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isJSArray(JSC::BytecodeGenerat > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsJSArray(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsJSArray(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isProxyObject(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1172,7 +1172,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isProxyObject(JSC::BytecodeGen > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsProxyObject(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsProxyObject(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isRegExpObject(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1181,7 +1181,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isRegExpObject(JSC::BytecodeGe > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsRegExpObject(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsRegExpObject(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isObject(BytecodeGenerator& generator, RegisterID* dst) >@@ -1190,7 +1190,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isObject(BytecodeGenerator& ge > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsObject(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsObject(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isDerivedArray(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1199,7 +1199,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isDerivedArray(JSC::BytecodeGe > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsDerivedArray(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsDerivedArray(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isMap(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1208,7 +1208,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isMap(JSC::BytecodeGenerator& > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsMap(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsMap(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isSet(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1217,7 +1217,7 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_isSet(JSC::BytecodeGenerator& > RefPtr<RegisterID> src = generator.emitNode(node); > ASSERT(!node->m_next); > >- return generator.moveToDestinationIfNeeded(dst, generator.emitIsSet(generator.tempDestination(dst), src.get())); >+ return generator.emitMove(dst, generator.emitIsSet(generator.tempDestination(dst), src.get())); > } > > RegisterID* BytecodeIntrinsicNode::emit_intrinsic_newArrayWithSize(JSC::BytecodeGenerator& generator, JSC::RegisterID* dst) >@@ -1353,7 +1353,7 @@ RegisterID* CallFunctionCallDotNode::emitBytecode(BytecodeGenerator& generator, > CallArguments callArguments(generator, m_args); > generator.emitMove(callArguments.thisRegister(), base.get()); > generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd(), DebuggableCall::Yes); >- generator.moveToDestinationIfNeeded(dst, returnValue.get()); >+ generator.emitMove(dst, returnValue.get()); > return returnValue.get(); > } > >@@ -1433,7 +1433,7 @@ RegisterID* ApplyFunctionCallDotNode::emitBytecode(BytecodeGenerator& generator, > CallArguments callArguments(generator, m_args); > generator.emitMove(callArguments.thisRegister(), base.get()); > generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd(), DebuggableCall::Yes); >- generator.moveToDestinationIfNeeded(dst, returnValue.get()); >+ generator.emitMove(dst, returnValue.get()); > return returnValue.get(); > } > >@@ -1535,7 +1535,7 @@ static RegisterID* emitPostIncOrDec(BytecodeGenerator& generator, RegisterID* ds > return generator.emitToNumber(generator.finalDestination(dst), srcDst); > RefPtr<RegisterID> tmp = generator.emitToNumber(generator.tempDestination(dst), srcDst); > emitIncOrDec(generator, srcDst, oper); >- return generator.moveToDestinationIfNeeded(dst, tmp.get()); >+ return generator.emitMove(dst, tmp.get()); > } > > RegisterID* PostfixNode::emitResolve(BytecodeGenerator& generator, RegisterID* dst) >@@ -1607,7 +1607,7 @@ RegisterID* PostfixNode::emitBracket(BytecodeGenerator& generator, RegisterID* d > else > generator.emitPutByVal(base.get(), property.get(), value.get()); > generator.emitProfileType(value.get(), divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, oldValue); >+ return generator.emitMove(dst, oldValue); > } > > RegisterID* PostfixNode::emitDot(BytecodeGenerator& generator, RegisterID* dst) >@@ -1638,7 +1638,7 @@ RegisterID* PostfixNode::emitDot(BytecodeGenerator& generator, RegisterID* dst) > else > generator.emitPutById(base.get(), ident, value.get()); > generator.emitProfileType(value.get(), divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, oldValue); >+ return generator.emitMove(dst, oldValue); > } > > RegisterID* PostfixNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) >@@ -1774,11 +1774,11 @@ RegisterID* PrefixNode::emitResolve(BytecodeGenerator& generator, RegisterID* ds > emitIncOrDec(generator, tempDst.get(), m_operator); > generator.emitMove(localReg.get(), tempDst.get()); > generator.emitProfileType(localReg.get(), var, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, tempDst.get()); >+ return generator.emitMove(dst, tempDst.get()); > } > generator.invalidateForInContextForLocal(local); > emitIncOrDec(generator, localReg.get(), m_operator); >- return generator.moveToDestinationIfNeeded(dst, localReg.get()); >+ return generator.emitMove(dst, localReg.get()); > } > > generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); >@@ -1796,7 +1796,7 @@ RegisterID* PrefixNode::emitResolve(BytecodeGenerator& generator, RegisterID* ds > generator.emitPutToScope(scope.get(), var, value.get(), ThrowIfNotFound, InitializationMode::NotInitialization); > generator.emitProfileType(value.get(), var, divotStart(), divotEnd()); > } >- return generator.moveToDestinationIfNeeded(dst, value.get()); >+ return generator.emitMove(dst, value.get()); > } > > RegisterID* PrefixNode::emitBracket(BytecodeGenerator& generator, RegisterID* dst) >@@ -1825,7 +1825,7 @@ RegisterID* PrefixNode::emitBracket(BytecodeGenerator& generator, RegisterID* ds > else > generator.emitPutByVal(base.get(), property.get(), value); > generator.emitProfileType(value, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, propDst.get()); >+ return generator.emitMove(dst, propDst.get()); > } > > RegisterID* PrefixNode::emitDot(BytecodeGenerator& generator, RegisterID* dst) >@@ -1853,7 +1853,7 @@ RegisterID* PrefixNode::emitDot(BytecodeGenerator& generator, RegisterID* dst) > else > generator.emitPutById(base.get(), ident, value); > generator.emitProfileType(value, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, propDst.get()); >+ return generator.emitMove(dst, propDst.get()); > } > > RegisterID* PrefixNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) >@@ -2315,7 +2315,7 @@ RegisterID* LogicalOpNode::emitBytecode(BytecodeGenerator& generator, RegisterID > generator.emitNodeInTailPosition(temp.get(), m_expr2); > generator.emitLabel(target.get()); > >- return generator.moveToDestinationIfNeeded(dst, temp.get()); >+ return generator.emitMove(dst, temp.get()); > } > > void LogicalOpNode::emitBytecodeInConditionContext(BytecodeGenerator& generator, Label& trueTarget, Label& falseTarget, FallThroughMode fallThroughMode) >@@ -2442,13 +2442,13 @@ RegisterID* ReadModifyResolveNode::emitBytecode(BytecodeGenerator& generator, Re > generator.emitMove(local, result.get()); > generator.invalidateForInContextForLocal(local); > generator.emitProfileType(local, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, result.get()); >+ return generator.emitMove(dst, result.get()); > } > > RegisterID* result = emitReadModifyAssignment(generator, local, local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); > generator.invalidateForInContextForLocal(local); > generator.emitProfileType(result, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, result); >+ return generator.emitMove(dst, result); > } > > generator.emitExpressionInfo(newDivot, divotStart(), newDivot); >@@ -2505,12 +2505,12 @@ RegisterID* AssignResolveNode::emitBytecode(BytecodeGenerator& generator, Regist > generator.emitMove(local, tempDst.get()); > generator.emitProfileType(local, var, divotStart(), divotEnd()); > generator.invalidateForInContextForLocal(local); >- result = generator.moveToDestinationIfNeeded(dst, tempDst.get()); >+ result = generator.emitMove(dst, tempDst.get()); > } else { > RegisterID* right = generator.emitNode(local, m_right); > generator.emitProfileType(right, var, divotStart(), divotEnd()); > generator.invalidateForInContextForLocal(local); >- result = generator.moveToDestinationIfNeeded(dst, right); >+ result = generator.emitMove(dst, right); > } > > if (m_assignmentContext == AssignmentContext::DeclarationStatement || m_assignmentContext == AssignmentContext::ConstDeclarationStatement) >@@ -2552,14 +2552,14 @@ RegisterID* AssignDotNode::emitBytecode(BytecodeGenerator& generator, RegisterID > RefPtr<RegisterID> value = generator.destinationForAssignResult(dst); > RefPtr<RegisterID> result = generator.emitNode(value.get(), m_right); > generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); >- RefPtr<RegisterID> forwardResult = (dst == generator.ignoredResult()) ? result.get() : generator.moveToDestinationIfNeeded(generator.tempDestination(result.get()), result.get()); >+ RefPtr<RegisterID> forwardResult = (dst == generator.ignoredResult()) ? result.get() : generator.emitMove(generator.tempDestination(result.get()), result.get()); > if (m_base->isSuperNode()) { > RefPtr<RegisterID> thisValue = generator.ensureThis(); > generator.emitPutById(base.get(), thisValue.get(), m_ident, forwardResult.get()); > } else > generator.emitPutById(base.get(), m_ident, forwardResult.get()); > generator.emitProfileType(forwardResult.get(), divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, forwardResult.get()); >+ return generator.emitMove(dst, forwardResult.get()); > } > > // ------------------------------ ReadModifyDotNode ----------------------------------- >@@ -2605,7 +2605,7 @@ RegisterID* AssignBracketNode::emitBytecode(BytecodeGenerator& generator, Regist > RefPtr<RegisterID> result = generator.emitNode(value.get(), m_right); > > generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); >- RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result.get() : generator.moveToDestinationIfNeeded(generator.tempDestination(result.get()), result.get()); >+ RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result.get() : generator.emitMove(generator.tempDestination(result.get()), result.get()); > > if (isNonIndexStringElement(*m_subscript)) { > if (m_base->isSuperNode()) { >@@ -2622,7 +2622,7 @@ RegisterID* AssignBracketNode::emitBytecode(BytecodeGenerator& generator, Regist > } > > generator.emitProfileType(forwardResult, divotStart(), divotEnd()); >- return generator.moveToDestinationIfNeeded(dst, forwardResult); >+ return generator.emitMove(dst, forwardResult); > } > > // ------------------------------ ReadModifyBracketNode ----------------------------------- >@@ -3828,7 +3828,7 @@ void FunctionNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) > // load and call @asyncFunctionResume > auto var = generator.variable(generator.propertyNames().builtinNames().asyncFunctionResumePrivateName()); > RefPtr<RegisterID> scope = generator.newTemporary(); >- generator.moveToDestinationIfNeeded(scope.get(), generator.emitResolveScope(scope.get(), var)); >+ generator.emitMove(scope.get(), generator.emitResolveScope(scope.get(), var)); > RefPtr<RegisterID> asyncFunctionResume = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, ThrowIfNotFound); > > CallArguments args(generator, nullptr, 4); >@@ -4059,7 +4059,7 @@ RegisterID* ClassExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID > generator.popLexicalScope(this); > } > >- return generator.moveToDestinationIfNeeded(dst, constructor.get()); >+ return generator.emitMove(dst, constructor.get()); > } > > // ------------------------------ ImportDeclarationNode ----------------------- >@@ -4107,7 +4107,7 @@ RegisterID* DestructuringAssignmentNode::emitBytecode(BytecodeGenerator& generat > RefPtr<RegisterID> initializer = generator.tempDestination(dst); > generator.emitNode(initializer.get(), m_initializer); > m_bindings->bindValue(generator, initializer.get()); >- return generator.moveToDestinationIfNeeded(dst, initializer.get()); >+ return generator.emitMove(dst, initializer.get()); > } > > static void assignDefaultValueIfUndefined(BytecodeGenerator& generator, RegisterID* maybeUndefined, ExpressionNode* defaultValue) >@@ -4242,7 +4242,7 @@ RegisterID* ArrayPatternNode::emitDirectBinding(BytecodeGenerator& generator, Re > m_targetPatterns[i].pattern->bindValue(generator, registers[i].get()); > } > if (resultRegister) >- return generator.moveToDestinationIfNeeded(dst, resultRegister.get()); >+ return generator.emitMove(dst, resultRegister.get()); > return generator.emitLoad(generator.finalDestination(dst), jsUndefined()); > } > >@@ -4307,7 +4307,7 @@ void ObjectPatternNode::bindValue(BytecodeGenerator& generator, RegisterID* rhs) > auto var = generator.variable(generator.propertyNames().builtinNames().SetPrivateName()); > > RefPtr<RegisterID> scope = generator.newTemporary(); >- generator.moveToDestinationIfNeeded(scope.get(), generator.emitResolveScope(scope.get(), var)); >+ generator.emitMove(scope.get(), generator.emitResolveScope(scope.get(), var)); > RefPtr<RegisterID> setConstructor = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, ThrowIfNotFound); > > CallArguments args(generator, nullptr, 0); >@@ -4359,7 +4359,7 @@ void ObjectPatternNode::bindValue(BytecodeGenerator& generator, RegisterID* rhs) > auto var = generator.variable(generator.propertyNames().builtinNames().copyDataPropertiesPrivateName()); > > RefPtr<RegisterID> scope = generator.newTemporary(); >- generator.moveToDestinationIfNeeded(scope.get(), generator.emitResolveScope(scope.get(), var)); >+ generator.emitMove(scope.get(), generator.emitResolveScope(scope.get(), var)); > RefPtr<RegisterID> copyDataProperties = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, ThrowIfNotFound); > > CallArguments args(generator, nullptr, 3); >@@ -4448,7 +4448,7 @@ void AssignmentElementNode::bindValue(BytecodeGenerator& generator, RegisterID* > generator.emitReadOnlyExceptionIfNeeded(var); > else { > generator.invalidateForInContextForLocal(local); >- generator.moveToDestinationIfNeeded(local, value); >+ generator.emitMove(local, value); > generator.emitProfileType(local, divotStart(), divotEnd()); > } > return; >@@ -4536,7 +4536,7 @@ RegisterID* ObjectSpreadExpressionNode::emitBytecode(BytecodeGenerator& generato > auto var = generator.variable(generator.propertyNames().builtinNames().copyDataPropertiesNoExclusionsPrivateName()); > > RefPtr<RegisterID> scope = generator.newTemporary(); >- generator.moveToDestinationIfNeeded(scope.get(), generator.emitResolveScope(scope.get(), var)); >+ generator.emitMove(scope.get(), generator.emitResolveScope(scope.get(), var)); > RefPtr<RegisterID> copyDataProperties = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, ThrowIfNotFound); > > CallArguments args(generator, nullptr, 2);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186123
:
341637
|
341641
|
341642
|
341711