Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Nathan_K_3
Beginner
38 Views

ICC 13.0.1 silently generates wrong code under heavy XMM register pressure

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
38 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.

TimP
Black Belt
38 Views

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

Nathan_K_3
Beginner
38 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".   

 

Reply