summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabor Greif <ggreif@gmail.com>2017-07-30 11:22:28 (GMT)
committerGabor Greif <ggreif@gmail.com>2017-07-30 13:48:34 (GMT)
commit16589a6ee13cc9816f7d6b78880af3bbae10e6f2 (patch)
tree5ee9db4e10308d37d21814b7fba99cad9268da08
parentfd301b69096415f7bb01f95c2ea2d22f12d4991c (diff)
downloadghc-16589a6ee13cc9816f7d6b78880af3bbae10e6f2.zip
ghc-16589a6ee13cc9816f7d6b78880af3bbae10e6f2.tar.gz
ghc-16589a6ee13cc9816f7d6b78880af3bbae10e6f2.tar.bz2
WIP: debugging
-rw-r--r--compiler/simplStg/StgCse.hs10
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/simplStg/StgCse.hs b/compiler/simplStg/StgCse.hs
index ee89137..c4dabb3 100644
--- a/compiler/simplStg/StgCse.hs
+++ b/compiler/simplStg/StgCse.hs
@@ -113,7 +113,7 @@ newtype ConAppMap a = CAM { un_cam :: DNameEnv (ListMap StgArgMap a) }
newtype LaxDataCon = Lax DataCon
instance NamedThing LaxDataCon where
- getName (Lax dc) | isVanillaDataCon dc && not hasStrict && not unpacked = mkFCallName uniq "" -- FIXME: is there a better way?
+ getName (Lax dc) | False && isVanillaDataCon dc && not hasStrict && not unpacked = mkFCallName uniq "" -- FIXME: is there a better way?
where uniq = mkUniqueGrimily . negate $ dataConTag dc * 1048576 + length (dataConOrigArgTys dc) -- FIXME
hasStrict = any (\case HsLazy -> False; _ -> True) (dataConImplBangs dc)
unpacked = isUnboxedTupleCon dc || isUnboxedSumCon dc
@@ -123,12 +123,16 @@ instance NamedThing LaxDataCon where
instance TrieMap ConAppMap where
type Key ConAppMap = (LaxDataCon, [StgArg])
emptyTM = CAM emptyTM
+ lookupTM (dataCon, args) | traceLookup dataCon = undefined
lookupTM (dataCon, args) = un_cam >.> lkDNamed dataCon >=> lookupTM args
alterTM (dataCon, args) f m =
m { un_cam = un_cam m |> xtDNamed dataCon |>> alterTM args f }
foldTM k = un_cam >.> foldTM (foldTM k)
mapTM f = un_cam >.> mapTM (mapTM f) >.> CAM
+traceLookup (Lax dc) = pprTrace "lookupTM" (ppr dc) False
+{-# NOINLINE traceLookup #-}
+
-----------------
-- The CSE Env --
-----------------
@@ -197,7 +201,9 @@ envLookup dataCon args env = lookupTM (dataCon, args') (ce_conAppMap env)
addDataCon :: OutId -> LaxDataCon -> [OutStgArg] -> CseEnv -> CseEnv
-- do not bother with nullary data constructors, they are static anyways
-addDataCon _ _ [] env = env
+addDataCon bndr dataCon [] env = env { ce_conAppMap = new_env }
+ where new_env = alterTM (dataCon, []) (\case Nothing -> pure bndr; p -> p) (ce_conAppMap env)
+--addDataCon _ _ [] env = env
addDataCon bndr dataCon args env = env { ce_conAppMap = new_env }
where
new_env = insertTM (dataCon, args) bndr (ce_conAppMap env)