mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-02 04:27:12 +02:00
The callee and this-value preservation copies only matter while later argument expressions are still being evaluated. For zero-argument calls there is nothing left to clobber them, so we can keep the original operand and let the interpreter load it directly. This removes the hot Mov arg0->reg pattern from zero-argument local calls and reduces register pressure.
51 lines
1.1 KiB
Plaintext
51 lines
1.1 KiB
Plaintext
$b4733eed invalid-lhs-assignment-no-dead-code.js:1:1
|
|
Registers: 10
|
|
Blocks: 4
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] GetLexicalEnvironment dst:reg4
|
|
[ 8] Jump target:block3
|
|
|
|
block1:
|
|
[ 10] Catch dst:reg5
|
|
[ 18] SetLexicalEnvironment environment:reg4
|
|
[ 20] Mov2 dst1:reg6, src1:Undefined, dst2:reg7, src2:reg6
|
|
|
|
block2:
|
|
[ 38] End value:reg6
|
|
|
|
block3:
|
|
[ 40] Mov dst:reg5, src:Undefined
|
|
[ 50] GetGlobal dst:reg8, `f`
|
|
[ 68] NewFunction dst:reg9, shared_function_data_index:0
|
|
[ 80] Call dst:reg6, callee:reg8, this_value:Undefined, f, arguments:[reg9]
|
|
[ a8] Mov2 dst1:reg5, src1:reg6, dst2:reg6, src2:reg5
|
|
[ c0] End value:reg6
|
|
|
|
Exception handlers:
|
|
[ 40 .. c8] => handler block1
|
|
|
|
|
|
f$36570247 invalid-lhs-assignment-no-dead-code.js:5:6
|
|
Registers: 6
|
|
Blocks: 1
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] Call dst:reg5, callee:arg0, this_value:Undefined, x
|
|
[ 20] NewReferenceError dst:reg5, Invalid left-hand side in assignment
|
|
[ 30] Throw src:reg5
|
|
|
|
|
|
$811c9dc5
|
|
Registers: 5
|
|
Blocks: 1
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] End value:Undefined
|