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

Safe Haskell | Safe-Inferred
Language | GHC2021

Futhark.IR.Prop.Reshape

Contents

- Construction
- Execution
- Simplification
- Shape calculations

Description

Facilities for creating, inspecting, and simplifying reshape and coercion operations.

Synopsis

- shapeCoerce :: [SubExp] -> VName -> Exp rep
- reshapeOuter :: Shape -> Int -> Shape -> Shape
- reshapeInner :: Shape -> Int -> Shape -> Shape
- reshapeIndex :: IntegralExp num => [num] -> [num] -> [num] -> [num]
- flattenIndex :: IntegralExp num => [num] -> [num] -> num
- unflattenIndex :: IntegralExp num => [num] -> num -> [num]
- sliceSizes :: IntegralExp num => [num] -> [num]

# Construction

shapeCoerce :: [SubExp] -> VName -> Exp rep Source #

Construct a `Reshape` that is a `ReshapeCoerce`.

# Execution

reshapeOuter :: Shape -> Int -> Shape -> Shape Source #

`reshapeOuter newshape n oldshape` returns a `Reshape` expression that replaces the outer `n` dimensions of `oldshape` with `newshape`.

reshapeInner :: Shape -> Int -> Shape -> Shape Source #

`reshapeInner newshape n oldshape` returns a `Reshape` expression that replaces the inner `m-n` dimensions (where `m` is the rank of `oldshape`) of `src` with `newshape`.

# Simplification

# Shape calculations

reshapeIndex :: IntegralExp num => [num] -> [num] -> [num] -> [num] Source #

`reshapeIndex to_dims from_dims is` transforms the index list `is` (which is into an array of shape `from_dims`) into an index list `is'`, which is into an array of shape `to_dims`. `is` must have the same length as `from_dims`, and `is'` will have the same length as `to_dims`.

flattenIndex :: IntegralExp num => [num] -> [num] -> num Source #

`flattenIndex dims is` computes the flat index of `is` into an array with dimensions `dims`. The length of `dims` and `is` must be the same.

unflattenIndex :: IntegralExp num => [num] -> num -> [num] Source #

`unflattenIndex dims i` computes a list of indices into an array with dimension `dims` given the flat index `i`. The resulting list will have the same size as `dims`.

sliceSizes :: IntegralExp num => [num] -> [num] Source #

Given a length `n` list of dimensions `dims`, `sizeSizes dims` will compute a length `n+1` list of the size of each possible array slice. The first element of this list will be the product of `dims`, and the last element will be 1.