Skip to content

Commit

Permalink
[JSC] Do not emit jsUndefined constant
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=270662
rdar://124234204

Reviewed by Keith Miller.

We observed massive unnecessary mov due to this.

* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::PropertyListNode::emitBytecode):
* Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):

Canonical link: https://commits.webkit.org/275813@main
  • Loading branch information
Constellation committed Mar 8, 2024
1 parent ce0c253 commit 3bc33cf
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 10 deletions.
12 changes: 4 additions & 8 deletions Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -811,21 +811,17 @@ RegisterID* PropertyListNode::emitBytecode(BytecodeGenerator& generator, Registe
ASSERT(pair.second->m_type & PropertyNode::Setter);
setterReg = generator.emitNode(pair.second->m_assign);
secondReg = setterReg.get();
} else {
setterReg = generator.newTemporary();
generator.emitLoad(setterReg.get(), jsUndefined());
}
} else
setterReg = generator.emitLoad(nullptr, jsUndefined());
} else {
ASSERT(node->m_type & PropertyNode::Setter);
setterReg = value;
if (pair.second) {
ASSERT(pair.second->m_type & PropertyNode::Getter);
getterReg = generator.emitNode(pair.second->m_assign);
secondReg = getterReg.get();
} else {
getterReg = generator.newTemporary();
generator.emitLoad(getterReg.get(), jsUndefined());
}
} else
getterReg = generator.emitLoad(nullptr, jsUndefined());
}

ASSERT(!pair.second || needsSuperBinding == pair.second->needsSuperBinding());
Expand Down
4 changes: 2 additions & 2 deletions Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1628,8 +1628,8 @@ LLINT_SLOW_PATH_DECL(slow_path_put_getter_setter_by_id)
ASSERT(getNonConstantOperand(callFrame, bytecode.m_base).isObject());
JSObject* baseObject = asObject(getNonConstantOperand(callFrame, bytecode.m_base));

JSValue getter = getNonConstantOperand(callFrame, bytecode.m_getter);
JSValue setter = getNonConstantOperand(callFrame, bytecode.m_setter);
JSValue getter = getOperand(callFrame, bytecode.m_getter);
JSValue setter = getOperand(callFrame, bytecode.m_setter);
ASSERT(getter.isObject() || setter.isObject());
GetterSetter* accessor = GetterSetter::create(vm, globalObject, getter, setter);

Expand Down

0 comments on commit 3bc33cf

Please sign in to comment.