Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7956 Discussions

ICC 13.0.1 silently generates wrong code under heavy XMM register pressure

Nathan_K_3
Beginner
342 Views

ICC 13.0.1 silently generates incorrect code when using 15 specified XMM registers. 

It also fails (but loudly) when attempting to use 16 specified XMM registers.  

See attached test code and output of "objdump -d".

 

 

 

 

 

 

0 Kudos
3 Replies
Nathan_K_3
Beginner
342 Views

Forgot to mention (and can't figure out how to edit a post): gcc 4.7.2 and clang 3.2 both work correctly.

0 Kudos
TimP
Honored Contributor III
342 Views

It looks OK with the 14.0.1 intel64 compiler. With 13.1 it quits without generating that part of the object file.

0 Kudos
Nathan_K_3
Beginner
342 Views

Thanks for looking at this.  I finally upgraded to 14.0.1, and retested.   While the results have changed, I do _not_ agree that  is working.  In fact, by some measure it has gotten worse.

The previously correct 14 register case now adds an extra move at the end.  

The 15 register case repeatedly overwrites XMM15 rather than moving each register by one.

The 16 register case (-DCATASTROPHIC_ERROR) still dies with a catastrophic error.

Again, all of these work correctly in both gcc and clang:  the assembly is as desired, and the 16 register case does not crash.  Attached are objdump -d outputs for "{icc,gcc,clang} -msse -O2 -Wall -c icc_register_pressure_bug.c -o bug.o".   

 

0 Kudos
Reply