By the way, I've been wondering about your original motivation for printing only a final checksum,
Basically two reasons.First, we wanted to give the compiler maximum freedom to mess with the program without being constrained by the optimization-squashing restrictions of an external function call.
Second, we wanted to keep things simple for the test harness by letting it deal with a single integer as the program output.
For testcase minimization purposes the checksum is less than ideal. Note however that you can give a Csmith program a "1" for its first command line argument, causing it to print all globals at the end, in addition to checksumming them. Also, there's a Csmith flag which causes it to just emit a bunch of printfs instead of the checksum stuff.
I've seen you mention it on your blog before, but I've never looked at it. I would assume that your long-term goal is to incorporate a reducer directly into Csmith, though, rather than improving that standalone reducer.
In fact Xuejun has built a fairly aggressive reducer into Csmith based on exactly the ideas you mention. The problem is that it adds a fair amount of complexity into an already complex program and also it ties the reducer to a specific Csmith version.
Also, sometime we want to reduce a program not emitted by Csmith at all. So we're pursuing both approaches. John