I just merged the new pass that does partial resolution of ifdefs.
For the 196 transitive include files that come from a C++ hello world on OS X (not making this up) the unifdef pass by itself gives a 57% reduction (in 352 seconds) if we choose -D first and -U second for each CPP symbol. Reduction is only 45% for -U first (in 518 seconds). I have no idea if this generalizes but I'm going with -D first for now.
Also I'm putting the unifdef and comment removal passes right up at the front of the phase ordering on the idea that they work well for non-preprocessed code and terminate very quickly if there aren't any ifdefs / comments to remove. We can revisit this if my idea isn't right.
Description: Binary data