Subject: publishing
From: Craig Chambers (chambers@cs.washington.edu)
Date: Sat Aug 18 2001 - 18:00:56 PDT
I'm publishing my current system. This includes a major revamp of the
Whirlwind IR, to eliminate the fake deref hack, and replace it with a
more conservative approach to aggregate data structures. All copying
operations, e.g. assignment and initialization, now require scalar
values, so that the problems with the semantics of assignment of
aggregates doing a copy go away. Record, array, and union dereference
operations now take and return pointers. The lhs of an assignment is
either a variable or a dereference expression (a store through a
pointer); there are no more explicit LValue expressions to complicate
things. There are no more alloc_spaces and the like.
I greatly expanded Keunwoo's test suite, and used it to get my code
working. The basic features of WIL pretty much work, except OO
features like GFs, methods, and GF applications, classes and
inheritance, exceptions, unions (which haven't been tried), and
record, array, and union constructor expressions (which require some
more thought to define their proper semantics), and once declarations
(which I haven't gotten to yet). I also need to change top-level
initial declarations to be compiled into a different function than
top-level regular declarations and expressions.
The Java towers benchmark now compiles, except that it doesn't link
properly because once declarations currently cause link-time duplicate
declaration errors.
This is all a far piece better than before. Before too long, I think
we'll actually have a compiler that compiles.
There are too many changes and small bug fixes and misc improvements
to list. But below I highlight some details, mainly for people who
hack on Whirlwind and who need to know about conventions that have
changed:
*) I've revised and expanded the ir.txt file with more explicit
descriptions of rep checking, scoping rules, evaluation rules, and
other constraints.
*) I put in a lot of work to get rep checking to be much more
rigorous. I also merged rep-computing and rep-checking into a single
implementation.
*) I changed Whirlwind's NullNodes used in replacement graphs to
BorderNodes. NullNodes should now never appear in a graph. There is
a single NullNode instance that can be used as a temporary placeholder
or indicator of "no node".
I'm pretty unhappy with the various operations for building
replacement graphs. I'm thinking that, now that border nodes are
explicit and distinct for each edge, we can simplify the
graph-building operations to just talk about predecessor (cfg & dfg)
nodes, not edges, for each incoming "port". It also would be nice to
infer the rep information for nodes in replacement graphs, based on
the reps of the border nodes; it's a real hassle to have to compute &
set it explicitly.
*) I made some small clean-ups to the builder & cfg/dfg graph
manipulation interfaces.
*) I made non-iterative traversals not iterate. Previously, they
would visit loop head merge nodes multiple times, as back edge
analysis values changed.
*) I added an option, verify_each_transformation, that at level 1
verifies each replacement graph before a transformation, and at level
2 verifies the graph after each transformation.
*) I revised the const_prop_msgs option. The other optimization
passes should be revised similarly.
*) I removed some inaccurate comments and questions, and put in some
accurate ones.
I think the source code size is actually smaller now after this publish!
-- Craig
_______________________________________________
Cecil mailing list
Cecil@cs.washington.edu
http://majordomo.cs.washington.edu/mailman/listinfo/cecil
This archive was generated by hypermail 2b25 : Sat Aug 18 2001 - 18:01:04 PDT