1) LIS.cond2s contains some suggestions about trivial improvements which would improve the quality of the code by a fair bit. 2) LIS.csieve is a disassembly of the sieve benchmark run through NORCROFTs C compiler - which does a dataflow analysis to see if it can keep variables in registers throughout a procedure. The code for the identical version of the sieve in Imp is in LIS.sieve - NORCROFT's code wins hands-down, although the Imp code could be improved by simple live/dead analysis at a local level, with delayed storing of variables and moving invariants out of short loops. 3) After observing the quality of the NorCroft C, I put the conditional-test file through it (after translating to C) - it produced almost exactly the code I generated by hand...