• jameslahm's avatar
    [interpreter] Optimize strict equal boolean · 62632c08
    jameslahm authored
    For strict equal boolean literal like "a===true"
    or "a===false", we could generate TestReferenceEqual
    rather than TestStrictEqual. And in `execution_result()->IsTest()`
    case, we could directly emit JumpIfTrue/JumpIfFalse.
    
    E.g.
    ```
    a === true
    ```
    Generated Bytecode From:
    ```
    LdaGlobal
    Star1
    LdaTrue
    TestEqualStrict
    ```
    To:
    ```
    LdaGlobal
    Star1
    LdaTrue
    TestReferenceEqual
    ```
    
    E.g.
    ```
    if (a === true)
    ```
    Generated Bytecode From:
    ```
    LdaGlobal
    Star1
    LdaTrue
    TestEqualStrict
    JumpIfFalse
    ```
    To
    ```
    LdaGlobal
    JumpIfTrue
    Jump
    ```
    
    
    Bug: v8:6403
    Change-Id: Ieaca147acd2d523ac0d2466e7861afb2d29a1310
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3568923Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Commit-Queue: 王澳 <wangao.james@bytedance.com>
    Cr-Commit-Position: refs/heads/main@{#79935}
    62632c08
bytecode-graph-builder.cc 175 KB