Intel® C++ Compiler
Support and discussions for creating C++ code that runs on platforms based on Intel® processors.
The Intel sign-in experience has changed to support enhanced security controls. If you sign in, click here for more information.

IPO is incomplete on a 64 bit build



We have a program that compiles fine under 32 bits but when we move to 64 it appears that one of the IPOs generated is incomplete and so we are not able to link.

We noticed that the ipo-1 is incomplete because of the missing IMAGE FILE HEADER.

We have a fairly complicated setup and we bootstraps the linker for technical reasons so that a few references are not available to xilink (i.e.)

ipo-2: warning #11021: unresolved _ XXXXX Referenced in libfx.lib(win32.obj)
ipo-2: warning #11022: unresolved _ XXXXX Referenced in libfx.lib(win32.obj)
ipo-2: warning #11023: unresolved _ XXXXX Referenced in libfx.lib(win32.obj)

We have always had these Intel warnings and our library links correctly without any issues (for both vs2008x32 and vs2012x32)
With vs2008x32 we are using Intel 11 and now on vs2012x32 we are using Intel 16.

On vs2012x32 we have noticed an error message below but it does link successfully without issues.

ipo-2: error #11023: Not all components required for linking are present on command line

We ignored this errors as the two IPOs generated IPOS generated optimised objects for all the objects built with the intel compiler. We assumed that the error is simply missing references but is provided by our boostrap linker and passes to the msvc linker. On the 64bit build we get the same error messages, however this time one of the IPOS doesn't have a complete IMAGE FILE HEADER.

We have also tested 64bit Intel compiler with the flag -Qipo- to disable inter-process optimisation and it works successfully.

Is there any detailed diagnostics flags we could use with ipos as we can not see any other additional warning or error messages?

Unfortunately do to the large setup of the system I am not able to generate a small example. I do not know whether the compiler is mores strict because of the missing references or whether there is some other issues that cause the IPO to be incomplete.

I am trying some other compiler flags to i.e. ipo-separate, but let me know if there is anything else that could be attempted?




0 Kudos
4 Replies

I have tried my own suggestion on using ipo-separate and my project compiles successfully and in my test I am happy to share that our library appears 25% faster with the 64bit build.

We have also found that -Qipo does not work by specifying the number of IPOs to generate. It would be nice if it were possible, to see if any changes could bring better optimisation. The xilinker simply says that -Qipo9 is not a recognised flag after two IPOs have been generated.




Hi Wai,

Have you used -ipo-separate flag and -ipo together?

From icc -help:

-ipo-separate: create one object file for every source file (overrides -ipo)





No, I have not used them together.

-Qipo-separate Gives one per object

-Qipo gives two

-Qipo4 still gives two




Although this -Qipo-separate works for us but it is very slows, adding an extra 5 hours to the compilations time.

Will be great if we can try and test -ipo options.