Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Do all things necessary to compile parallel allocations to a single region.
In the sequential semantics, (letloc-after x) can only run after x is written to the store. In the parallel version, we relax this requirement. Every letloc-after leads to creation of a new region, and we later tie things together with pointers.
let x = spawn (foo [l1]) letloc l2 = after x let y = foo [l2] _ = sync
will be transformed to:
let x = spawn (foo [l1]) letregion r3 letloc l3 = start r3 let y = foo [l3] _ = sync letloc l2 = after x tie l2 l3
Need a better name for this pass.