futhark-0.25.32: An optimising compiler for a functional, array-oriented language.

Safe Haskell | Safe-Inferred
Language | GHC2021

Futhark.Internalise.Monomorphise

Description

This monomorphization module converts a well-typed, polymorphic, module-free Futhark program into an equivalent monomorphic program.

This pass also does a few other simplifications to make the job of subsequent passes easier. Specifically, it does the following:

- Turn operator sections into explicit lambdas.
- Converts applications of intrinsic SOACs into SOAC AST nodes (Map, Reduce, etc).
- Elide functions that are not reachable from an entry point (this is a side effect of the monomorphisation algorithm, which uses the entry points as roots).
- Rewrite BinOp nodes to Apply nodes.
- Replace all size expressions by constants or variables, complex expressions replaced by variables are calculated in let binding or replaced by size parameters if in argument.

Note that these changes are unfortunately not visible in the AST representation.

Synopsis

- transformProg :: MonadFreshNames m => [ValBind] -> m [ValBind]

# Documentation

transformProg :: MonadFreshNames m => [ValBind] -> m [ValBind] Source #

Monomorphise a list of top-level value bindings.