Re: Publishing


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