Reza Roboubi wrote: > test.s contains a single call to mm(), instead of two distinct calls > (correctly optimized.) > > However, none of the intermediate optimization steps (such as > test.c.t93.optimized) reflects this optimization. Why? 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. Use the '-da' option to see the low-level optimization passes. You'll find them a lot harder to read than the high-level ones. ;-) Andrew.