While going through "Intel C++ Optimizing Applications" document (304968-022US), Pg#156-157 on InterProcedural Optimizations section, I see lots of optionsbeing called internally when using"-ipo"for multi-file optimizations using ICC-v11.0 moreover the document simply says use IPO as calling through compiler driver for multi-file as "$icpc -ipo -o hello hello.cc hello-1.cc hello-2.cc", the ICC does all jobs related with IPO internally for you, assuming it does really.
The IPO options listed are -
routine key-attribute propagation
partial dead call elimination
symbol table data promotion
common block variable coalescing
dead function elimination
unreferenced variable removal
whole program analysis
array dimension padding
common block splitting
stack frame alignment
structure splitting and field reordering
formal parameter alignment analysis
C++ class hierarchy analysis
indirect call conversion
Themulti-file may not have a sinerio to use all above listed IPO options, does ICC gives flexibity of selecting the options (couldbe the needed one as OFF/ON)innovatively as per design of section of code/API within multi-file IPO optimization techniques for better peak performance with IPO?
It could be thatCompiler in the first shot/pass would be collecting the summary of techniques of IPO needed to performed for the multi-file procedure or routines,is thecompiler being bothered heavily by generating such summary reports in first pass of multi-file and thanin second pass allowed to perform IPO, why not have theflexibity of IPO options to help developers in selecting the needed IPO option(s) to tune applications for higher performance?