Skip to content

Deforestation (tracking issue) #304

@ychenfo

Description

@ychenfo

TODO

  • Lumberhack mk 4 PR

    • Duplication of definitions
    • Check for regressions induced by label-sharing; it any, add a Config flag to tweak createLabelsForDuplicatedBranches in hkmc2/shared/src/main/scala/hkmc2/semantics/ucs/Normalization.scala
    • Transform explicit returns into implicit ones in the top-level blocks
    • Constrain public fields against no-change strategy
  • Transform more places

    • Class methods
    • Record field initializers
    • Also, fuse records?
  • Apply Lumberhack to compiled files

    • Support customizable list of "see-through" modules such as NofibPrelude: use syntax @seethrough import "..."
  • Float out lambda binders

    • Benchmark nofib test suite
  • Deal with side effects

Missing Implementation

  • restParam
  • multiple parameter lists
  • Deforestation related to functions and values inside classes/modules
  • Match blocks with non-Value.Ref scrutinees (like Match(Select(…), …)))
    I put this as a missing implementation here because I am not sure how to handle selections inside branches related to non-Value.Ref scrutinees — but maybe this is not strictly a “missing implementation” because it seems that although the definition of Match says that the scrut can be a Path, the scrut currently always seems to be compiled to a Value.Ref.

More todos

  • Merging of duplicated consumers
    • After fusion, some duplicated consumers may have identical bodies, they can be merged
    • Before fusion, duplication of consumers may lead to loss of fusion opportunities
  • Reification of recursive strategies

Ad-hoc things to generalize

  • Remove the special-casing of the "force" and "lazy" and use annotations instead
  • Don't special-case NofibPreluse – instead, allow listing a set of file to optimize with

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions