diff options
| author | Luke Maurer <maurerl@cs.uoregon.edu> | 2017-02-01 11:56:01 -0500 |
|---|---|---|
| committer | David Feuer <David.Feuer@gmail.com> | 2017-02-01 13:44:52 -0500 |
| commit | 8d5cf8bf584fd4849917c29d82dcf46ee75dd035 (patch) | |
| tree | 9d1b012562fd7ec1d1089b7d87e061884ba71f1c /compiler/utils/UniqFM.hs | |
| parent | 4fa439e3ee2822f893bd364a6cbfe410a0c1e29f (diff) | |
| download | haskell-8d5cf8bf584fd4849917c29d82dcf46ee75dd035.tar.gz | |
Join points
This major patch implements Join Points, as described in
https://ghc.haskell.org/trac/ghc/wiki/SequentCore. You have
to read that page, and especially the paper it links to, to
understand what's going on; but it is very cool.
It's Luke Maurer's work, but done in close collaboration with Simon PJ.
This Phab is a squash-merge of wip/join-points branch of
http://github.com/lukemaurer/ghc. There are many, many interdependent
changes.
Reviewers: goldfire, mpickering, bgamari, simonmar, dfeuer, austin
Subscribers: simonpj, dfeuer, mpickering, Mikolaj, thomie
Differential Revision: https://phabricator.haskell.org/D2853
Diffstat (limited to 'compiler/utils/UniqFM.hs')
| -rw-r--r-- | compiler/utils/UniqFM.hs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/utils/UniqFM.hs b/compiler/utils/UniqFM.hs index 38d94342ad..49ceb89d90 100644 --- a/compiler/utils/UniqFM.hs +++ b/compiler/utils/UniqFM.hs @@ -49,6 +49,7 @@ module UniqFM ( plusUFM, plusUFM_C, plusUFM_CD, + plusMaybeUFM_C, plusUFMList, minusUFM, intersectUFM, @@ -217,6 +218,15 @@ plusUFM_CD f (UFM xm) dx (UFM ym) dy (M.map (\y -> dx `f` y)) xm ym +plusMaybeUFM_C :: (elt -> elt -> Maybe elt) + -> UniqFM elt -> UniqFM elt -> UniqFM elt +plusMaybeUFM_C f (UFM xm) (UFM ym) + = UFM $ M.mergeWithKey + (\_ x y -> x `f` y) + id + id + xm ym + plusUFMList :: [UniqFM elt] -> UniqFM elt plusUFMList = foldl' plusUFM emptyUFM |
