Subject: Re: Publishing
From: Craig Chambers (chambers@cs.washington.edu)
Date: Fri Jan 19 2001 - 11:44:03 PST
Great!
-- Craig
Sorin Lerner wrote:
> 
> I am publishing my changes to whirlwind (the most significant stuff
> is at the top, and it gets less significant/more specific going down
> the list):
> 
> *) Added several analyses, which are on by default for optimizing
>    compiles. Each analysis has an option to turn it on or off, and an
>    option to spill its guts out to the screen when running.
> 
>       - constant propagation (optimizations/constant-prop.cecil):
>         replaces value nodes in the DFG that are determined to produce a
>         constant value.
> 
>       - unused value elimination, aka dead assignment elimination
>         (optimizations/unused-value-elim.cecil): removes value nodes
>         in the DFG that are not used anymore.
> 
>       - unreachable code elimination, aka dead code elimination
>         (optimizations/unreachable-code-elim.cecil): removes nodes in
>         the CFG that are not reachable, and replaces those nodes with
>         TopDefNode in the DFG.
> 
>       - phi node elimination (optimizations/phi-elim.cecil): Removes
>         phi nodes that have all of their incoming edges originating
>         from the same node.
> 
> *) Added a generic binary lattice (optimizations/lattice.cecil), which
>    is used for unused value elim and unreachable code elim.
> 
> *) Added an abstract object WindIRGraphSlice, to be used as the base
>    for slices that are graphs (ir/graph/graph-slice.cecil). The CFG,
>    DFG, CDFG and AST slices now inherit from WindIRGraphSlice.
>    WindIRGraphSlice has incoming/outgoing edges, and roots. The roots
>    of a graph slice are a set of nodes having the property that
>    starting a traversal with this set guarantees that all nodes will
>    be visited. The WindIRGraphSlice also provides a default
>    implementation of replace_node_with_graph.
> 
> *) Added the remove_succ_edge and remove_pred_edge signatures. These
>    methods just remove the given edge from the succ/pred list of a
>    node, and do any other processing that this entails (for example
>    removing a control merge node predecessor requires removing the
>    corresponding dataflow merge predecessor).
> 
> *) Changed the implementation of transformations so the method
>    begin_transform(@WindIR) is called on each slice before a set of
>    transformations is applied, and end_transform(@WindIR) is called
>    after. The default version of these methods don't do
>    anything. However, the WindIRGraphSlice versions are used to do pre
>    and post-processing of the graph.
> 
> *) Changed the CFG, DFG and CDFG topological numbering code so that
>    incoming and outgoing edges are numbered correctly, regardless of
>    whether or not they are reached by node traversal (eg: some
>    incoming/outgoing edges have null nodes as both src and dst, and
>    thus are not reached by node traversal)
> 
> *) CFGs now have roots again, a property inherited from
>    WindIRGraphSlice. The top level CFG (ie: not a replacement CFG), as
>    before, has one unique incoming edge. The dest of this incoming
>    edge is the only reachable root of the CFG. All other roots are
>    unreachable, but necessary as part of the root set in order to visit
>    them.
> 
> *) Added a merge_node_map field to the DFG. This field stores, for
>    each control merge node, the set of corresponding dataflow merge
>    nodes. It is used to remove the phi node predecessors corresponding
>    to a removed CFG merge node predecessor. DFG transformations
>    automatically update this map.
> 
> *) Changed the CFG construction code so that the predecessor of the
>    root is correctly set to the CFG incoming edge.
> 
> *) Changed the CDFG construction code so that the CDFG contains all
>    the incoming/outgoing edges of the CFG and the DFG. Also changed
>    the call into the analysis framework for the lower analysis to
>    include information for the incoming edges of the CDFG.
> 
> *) Changed verify_graph so that it handles incoming/outgoing edges
>    properly.
This archive was generated by hypermail 2b25 : Fri Jan 19 2001 - 11:44:07 PST