Reza Roboubi wrote: > Andrew Haley wrote: >> There are two distinct phases of optimization, one on high-level >> code and on low-level code. So -- to cut a long story short -- we first >> optimize the C, then we generate assembler, and then we optimize that. >> You're probably seeing one of the later optimizations. > > I was just interested why that is? I could think of things like > aliasing issues, but it still seems possible to do that in a single > "Universal Machine Instruction Set" pass. No, it's not. Sometimes there's redundancy that you can't see until you start using real registers in a real machine. Also, real instruction set architectures can be so bad that you have to do a lot of work to cope with their idiosyncrasies. Other things too: e.g. some machines have multiply that takes forever, some have 1-clock flash multipliers. You can't universally optimize. Andrew.