Skip to content

[dart2js] Identify required powerset bits #49312

Open

Description

@fishythefish

The current scaffolding for the powerset domain defines a few bits:

  • true/false/null/other
  • interceptor/not interceptor/null interceptor

We may need to confirm that these bits are still useful and in a usable state. We also need to determine what other bits the powerset domain should support and sort them by priority.

Activity

  1. added
    type-taskA well-defined stand-alone task
    area-web-jsIssues related to JavaScript support for Dart Web, including DDC, dart2js, and JS interop.
    on Jun 22, 2022
  2. rakudrama commented on Jun 22, 2022

    @rakudrama
    Member

    For each optimization, the value space can be partitioned into values that allow an optimization, and some sister bits that cover the cases where the optimization does not apply.

    We have two hierarchies of 'fake' types so that the type-masks can be used to make distinctions within a natural type. These are will be better expressed as powerset subdomains.

    JSArray has fake subclasses to model the varieties of list - each subclass permits some optimization - e.g. fixed-length lists have a .length that can be hoisted.
    The powerset domain would include other JSIndexables, including some @Native classes like NodeList.

    JSInt has a similar set of partioning subclasses.
    JSUInt31 targets bit-operation optimizations.
    In addition to small non-negative integers, it would be useful to model -0.0 since the absence of -0.0 from otherwise non-negative values allows lowering to %.

    I would take on the JSInt-subclass-replacement domain later than some others since the transfer functions are harder to write.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-web-jsIssues related to JavaScript support for Dart Web, including DDC, dart2js, and JS interop.type-taskA well-defined stand-alone taskweb-dart2js

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions