With MDK Version 4.72A 3 passes are done with crossmodule optimization enabled:
Build target 'STM32F100V8' Clean started - Project: 'STM32_VL_2xCPU' deleting intermediate output files for target 'STM32F100V8' compiling system_stm32f10x.c... compiling core_cm3.c... ..... ..... compiling stm32f10x_crc.c... linking... Program Size: Code=22928 RO-data=1580 RW-data=144 ZI-data=2440 ".\RVMDK\STM32_VL_DUAL\STM32_VL_DUAL.axf" - 0 Errors, 0 Warning(s).
*** Performing Cross-Module-Optimization: compiling system_stm32f10x.c... ..... ..... compiling stm32f10x_crc.c... linking... Program Size: Code=16268 RO-data=1620 RW-data=144 ZI-data=2440 >>>> unnecessary third round, not seen in MDK Version 4.70 compiling system_stm32f10x.c... compiling core_cm3.c... ..... ..... compiling stm32f10x_crc.c... linking... Program Size: Code=16268 RO-data=1620 RW-data=144 ZI-data=2440
everything is ok, it just seems an extra waste of time.