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

Safe Haskell | Safe-Inferred
Language | GHC2021

Futhark.Internalise

Description

This module implements a transformation from source to core Futhark.

The source and core language is similar in spirit, but the core language is much more regular (and mostly much simpler) in order to make it easier to write program transformations.

- Language.Futhark.Syntax contains the source language definition.
- Futhark.IR.Syntax contains the core IR definition.

Specifically, internalisation generates the SOACS dialect of the core IR (Futhark.IR.SOACS). This is then initially used by the compiler middle-end. The main differences between the source and core IR are as follows:

- The core IR has no modules. These are removed in Futhark.Internalise.Defunctorise.
- The core IR has no type abbreviations. These are removed in Futhark.Internalise.ApplyTypeAbbrs.
- The core IR has little syntactic niceties. A lot of syntactic sugar is removed in Futhark.Internalise.FullNormalise.
- Lambda lifting is performed by Futhark.Internalise.LiftLambdas,
- mostly to make the job of later passes simpler.
- The core IR is monomorphic. Polymorphic functions are monomorphised in Futhark.Internalise.Monomorphise
- The core IR is first-order. Futhark.Internalise.Defunctionalise removes higher-order functions.
- The core IR is in ANF.
- The core IR does not have arrays of tuples (or tuples or records at all, really). Arrays of tuples are turned into multiple arrays. For example, a source language transposition of an array of pairs becomes a core IR that contains two transpositions of two distinct arrays. The guts of this transformation is in Futhark.Internalise.Exps.
- For the above reason, SOACs also accept multiple input arrays. The available primitive operations are also somewhat different than in the source language. See `SOAC`.

Synopsis

- internaliseProg :: (MonadFreshNames m, MonadLogger m) => FutharkConfig -> Imports -> m (Prog SOACS)

# Documentation

internaliseProg :: (MonadFreshNames m, MonadLogger m) => FutharkConfig -> Imports -> m (Prog SOACS) Source #

Convert a program in source Futhark to a program in the Futhark core language.