Constant-propagation figure is now extracted automatically from John's code; some...
[packages/hoopl.git] / src / Compiler / Hoopl / Debug.hs
index dc0abc4..d03320e 100644 (file)
@@ -22,11 +22,28 @@ import Compiler.Hoopl.Show
 --   2. pass 'trace' as the 1st argument to the debug combinator
 --
 --   3. pass 'const true' as the 2nd argument to the debug combinator
+--
+-- There are two kinds of debugging messages for a join,
+-- depending on whether the join is higher in the lattice than the old fact:
+--   1. If the join is higher, we show:
+--         + Join@L: f1 `join` f2 = f'
+--      where:
+--        + indicates a change
+--        L is the label where the join takes place
+--        f1 is the old fact at the label
+--        f2 is the new fact we are joining to f1
+--        f' is the result of the join
+--   2. _ Join@L: f2 <= f1
+--      where:
+--        _ indicates no change
+--        L is the label where the join takes place
+--        f1 is the old fact at the label (which remains unchanged)
+--        f2 is the new fact we joined with f1
 --------------------------------------------------------------------------------
 
 
-debugFwdJoins :: forall n f . Show f => TraceFn -> ChangePred -> FwdPass n f -> FwdPass n f
-debugBwdJoins :: forall n f . Show f => TraceFn -> ChangePred -> BwdPass n f -> BwdPass n f
+debugFwdJoins :: forall m n f . Show f => TraceFn -> ChangePred -> FwdPass m n f -> FwdPass m n f
+debugBwdJoins :: forall m n f . Show f => TraceFn -> ChangePred -> BwdPass m n f -> BwdPass m n f
 
 type TraceFn    = forall a . String -> a -> a
 type ChangePred = ChangeFlag -> Bool
@@ -41,7 +58,7 @@ debugJoins trace showPred l@(DataflowLattice {fact_extend = extend}) = l {fact_e
      if showPred c then trace output res else res
        where res@(c, f') = extend l f1 f2
              output = case c of
-                        SomeChange -> "+ Join@" ++ show l ++ ": " ++ show of1 ++ " |_| "
+                        SomeChange -> "+ Join@" ++ show l ++ ": " ++ show of1 ++ " `join` "
                                                                   ++ show nf2 ++ " = " ++ show f'
                         NoChange   -> "_ Join@" ++ show l ++ ": " ++ show nf2 ++ " <= " ++ show of1
 
@@ -53,11 +70,11 @@ type ShowN n   = forall e x . n e x ->      String
 type FPred n f = forall e x . n e x -> f        -> Bool
 type BPred n f = forall e x . n e x -> Fact x f -> Bool
 debugFwdTransfers::
-  forall n f . Show f => TraceFn -> ShowN n -> FPred n f -> FwdPass n f -> FwdPass n f
+  forall m n f . Show f => TraceFn -> ShowN n -> FPred n f -> FwdPass m n f -> FwdPass m n f
 debugFwdTransfers trace showN showPred pass = pass { fp_transfer = transfers' }
   where
-    (f, m, l) = getFTransfers $ fp_transfer pass
-    transfers' = mkFTransfer (wrap show f) (wrap show m) (wrap showFactBase l)
+    (f, m, l) = getFTransfer3 $ fp_transfer pass
+    transfers' = mkFTransfer3 (wrap show f) (wrap show m) (wrap showFactBase l)
     wrap :: forall e x . (Fact x f -> String) -> (n e x -> f -> Fact x f) -> n e x -> f -> Fact x f
     wrap showOutF ft n f = if showPred n f then trace output res else res
       where
@@ -66,11 +83,11 @@ debugFwdTransfers trace showN showPred pass = pass { fp_transfer = transfers' }
     name = fact_name (fp_lattice pass)
     
 debugBwdTransfers::
-  forall n f . Show f => TraceFn -> ShowN n -> BPred n f -> BwdPass n f -> BwdPass n f
+  forall m n f . Show f => TraceFn -> ShowN n -> BPred n f -> BwdPass m n f -> BwdPass m n f
 debugBwdTransfers trace showN showPred pass = pass { bp_transfer = transfers' }
   where
-    (f, m, l) = getBTransfers $ bp_transfer pass
-    transfers' = mkBTransfer (wrap show f) (wrap show m) (wrap showFactBase l)
+    (f, m, l) = getBTransfer3 $ bp_transfer pass
+    transfers' = mkBTransfer3 (wrap show f) (wrap show m) (wrap showFactBase l)
     wrap :: forall e x . (Fact x f -> String) -> (n e x -> Fact x f -> f) -> n e x -> Fact x f -> f
     wrap showInF ft n f = if showPred n f then trace output res else res
       where
@@ -80,7 +97,7 @@ debugBwdTransfers trace showN showPred pass = pass { bp_transfer = transfers' }
     
 
 -- debugFwdTransfers, debugFwdRewrites, debugFwdAll ::
---   forall n f . Show f => TraceFn -> ShowN n -> FwdPass n f -> FwdPass n f
+--   forall m n f . Show f => TraceFn -> ShowN n -> FwdPass m n f -> FwdPass m n f
 -- debugBwdTransfers, debugBwdRewrites, debugBwdAll ::
---   forall n f . Show f => TraceFn -> ShowN n -> BwdPass n f -> BwdPass n f
+--   forall m n f . Show f => TraceFn -> ShowN n -> BwdPass m n f -> BwdPass m n f