Dennis was one-up on Digitek in having a self-maintaining compiler. Thus, when he implemented an optimization, the source would grow, but the compiler binary might even shrink thanks to self-application.
Another somewhat non-intuitive aspect of optimizing compilers is that simply adding optimizations can cause an increase in compilation speed by reducing the amount of IL in the program being compiled. Less IL due to optimization means less time spent in later phases of the compilation process.
Regarding native compilers for small machines, IBM had compilers for Fortran, COBOL, and PL/I that ran in 32K on System/360 and produced tolerably good code (yes, one could do better with handwritten assembler). And they generated real code, no threaded code cop-out. And we're talking full PL/I here, not the subset that ANSI later standardized. The compilers were table-driven as much as possible, heavily overlaid, and used three scratch files on disk (split-cylinder allocated to minimize seek time).
-Paul W.