various minor revisions
authorNorman Ramsey <nr@cs.tufts.edu>
Thu, 10 Jun 2010 01:40:43 +0000 (21:40 -0400)
committerNorman Ramsey <nr@cs.tufts.edu>
Thu, 10 Jun 2010 01:40:43 +0000 (21:40 -0400)
paper/.gitignore
paper/dfopt.tex
paper/mkfile
paper/xsource
src/Compiler/Hoopl/Dataflow.hs
src/Compiler/Hoopl/Util.hs

index e2c9520..b59c943 100644 (file)
@@ -18,6 +18,7 @@ timestamp.tex
 comb1.tex
 iterf.tex
 pairf.tex
+dg.tex
 cprop.tex
 hoopl.tex
 hoopl.ps
index 8564fa7..1ec4f95 100644 (file)
@@ -2416,7 +2416,7 @@ The inner @block@ function exemplifies this style:
   block (BLast   n)  = node n
   block (BCat b1 b2) = block b1 `cat` block b2
 \end{code}
-The implementation of @graph@ is similar but has many more cases.
+The implementation of @graph@ is similar but has more cases.
 
 
 
@@ -2513,9 +2513,8 @@ node n f
                 f'    = fwdEntryFact n f
             in  arfGraph pass' (maybeEntry n) g f' }
 \end{smallfuzzcode}
-\simon{Need types for @toDg@ and friends, and explanation.}
-This code is more complicated
-but still brief.  \simon{More complicated than what?}
+This code is more complicated than the code for @node@ or @graph@, but
+it is still short.
 %
 Functions @`frewrite@, @`ftransfer@, @`toBlock@,
 @`maybeEntry@, and @`fwdEntryFact@ are overloaded based on the
@@ -2526,7 +2525,10 @@ rewriting function from the @FwdPass@,
 and we apply it to the node~@n@ 
 and the  incoming fact~@f@.  
 
-\simon{Shall we describe @withFuel@ in section on fuel?}
+\simon{Shall we describe @withFuel@ in section on fuel?
+NR: sounds like extra work for the reader---I'd rather do it lazily,
+on demand\ldots
+}
 The resulting monadic @Maybe@ is passed to @withFuel@, which 
 accounts for fuel:
 \begin{code}
@@ -2542,8 +2544,8 @@ In the @Nothing@ case, no rewrite takes place: fuel is
 exhausted, or the rewrite function
 didn't want a rewrite.
 We~return the single-node
-graph @(toDg f (toBlock n))@, decorated with its incoming fact.
-We~also apply the transfer function @(ftransfer pass)
+graph @toDg f (toBlock n)@, decorated with its incoming fact.
+We~also apply the transfer function @ftransfer pass
 to the incoming fact to produce the outgoing fact.
 
 In the @Just@ case, we receive a replacement
index 54b6a67..d0bcb05 100644 (file)
@@ -29,7 +29,7 @@ tag:VQ: $TGT.tex
        echo git tag $tag
        git tag $tag
 
-dfopt.dvi: dfopt.bbl code.sty timestamp.tex dfoptdu.tex cprop.tex comb1.tex iterf.tex pairf.tex
+dfopt.dvi: dfopt.bbl code.sty timestamp.tex dfoptdu.tex cprop.tex comb1.tex iterf.tex pairf.tex dg.tex
 
 $TGT.pdf: $TGT.dvi
        dvips -Ppdf -o"|ps2pdf - $target" -pp 1-$LASTPAGE $prereq
@@ -69,3 +69,6 @@ HOOPL=../src/Compiler/Hoopl
 
 comb1.tex iterf.tex pairf.tex:D: ./xsource $HOOPL/Combinators.hs
        lua $prereq
+
+dg.tex:D: ./xsource $HOOPL/Dataflow.hs
+       lua $prereq
index d70c005..c10f671 100755 (executable)
@@ -9,6 +9,7 @@ local function add_modified_line(lines, l)
   end
   l = l:gsub('^(%s*),( fact_bot)', '%1{%2')
 --  l = l:gsub('^(%s*, fact_join = .*)$', '%1 }')
+  l = l:gsub('%s*%-%-%s%^.*$', '')
   return table.insert(lines, l)
 end
 
index 44d826b..ae83471 100644 (file)
@@ -15,7 +15,8 @@ import Data.Maybe
 
 import Compiler.Hoopl.Collections
 import Compiler.Hoopl.Fuel
-import Compiler.Hoopl.Graph
+import Compiler.Hoopl.Graph hiding (Graph) -- hiding so we can redefine
+                                           -- and include definition in paper
 import qualified Compiler.Hoopl.GraphUtil as U
 import Compiler.Hoopl.Label
 import Compiler.Hoopl.Util
@@ -544,8 +545,12 @@ we'll propagate (x=4) to L4, and nuke the otherwise-good rewriting of L4.
 --          TOTALLY internal to Hoopl; each block is decorated with a fact
 -----------------------------------------------------------------------------
 
+-- @ start dg.tex
+type Graph = Graph' Block
 type DG     f n e x = Graph'   (DBlock f) n e x
 data DBlock f n e x = DBlock f (Block n e x) -- ^ block decorated with fact
+toDg :: NonLocal n => f -> Block n e x -> DG f n e x
+-- @ end dg.tex
 instance NonLocal n => NonLocal (DBlock f n) where
   entryLabel (DBlock _ b) = entryLabel b
   successors (DBlock _ b) = successors b
@@ -554,7 +559,6 @@ instance NonLocal n => NonLocal (DBlock f n) where
 
 dgnil  :: DG f n O O
 dgnilC :: DG f n C C
-toDg   :: NonLocal n => f -> Block n e x -> DG f n e x
 dgCat  :: NonLocal n => DG f n e a -> DG f n a x -> DG f n e x
 
 ---- observers
index b69d3cb..64c5ff9 100644 (file)
@@ -30,7 +30,7 @@ gUnitCC :: NonLocal (block n) => block n C C -> Graph' block n C C
 gUnitOO b = GUnit b
 gUnitOC b = GMany (JustO b) emptyBody  NothingO
 gUnitCO b = GMany NothingO  emptyBody (JustO b)
-gUnitCC b = GMany NothingO  (addBlock b emptyBody) NothingO
+gUnitCC b = GMany NothingO  (addBlock b emptyBody) NothingO
 
 
 catGraphNodeOO ::            Graph n e O -> n O O -> Graph n e O