summaryrefslogtreecommitdiff
path: root/llvm-passes
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2020-04-15 13:04:21 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2020-04-15 13:04:21 +0100
commit61a623f93a0c4e13acaaea7b468685c2edada818 (patch)
treef5985dd56e691bf72970a3dad49c40680fd939d1 /llvm-passes
parent0b934e30417a767063625494ecf135c9d6006f71 (diff)
downloadhaskell-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