diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2020-04-15 13:04:21 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2020-04-15 13:04:21 +0100 |
commit | 61a623f93a0c4e13acaaea7b468685c2edada818 (patch) | |
tree | f5985dd56e691bf72970a3dad49c40680fd939d1 /llvm-passes | |
parent | 0b934e30417a767063625494ecf135c9d6006f71 (diff) | |
download | haskell-wip/T17760-runRW.tar.gz |
Work in progress on runRW#wip/T17760-runRW
This is a proof of concept, in progress. It treats
runRW# (\s. e)
specially in three ways
* In the simplifier, we transform
K[ runRW# rr ty (\s. body) ]
--> runRW rr' ty' (\s. K[ body ])
where K is a context
* In Lint, join points are allowed to occur inside the continuation.
join j x = rhs
in runRW# (\s. case ... of
A -> j 1
B -> ...
C -> J 2)
Very much as they can occur in other join points.
* In OccurAnal, we infer join points using the same rule
We get much beter optimisation as a result.
Still not finished. E.g. Float out may take
runST# (\s. e)
and float that lambda out. But really we want to keep
that lambda in runST#'s argument, otherwise things that
were join point might stop being so.
But it's a start
Diffstat (limited to 'llvm-passes')
0 files changed, 0 insertions, 0 deletions