Diagnostic 15164: vectorization support: number of FP down converts: double precision to single precision <val>

Cause:

This diagnostic message is emitted here because the function sin() takes argument of type double and returns result of type double. The program feeds arguments of type float to sin() and stores the result in another float variable. This specific diagnostic message intimates the user that there was a implicit conversion of double to float to store the result of sin() function in a float variable. Below is an example for this scenario:

Example:

void foo(float *a, float *b){
  int i;
#pragma simd
  for (i=0; i<32; i++){
    a[i] += sin(b[i] + 1.0);
  }
}


$ icc conv.c -vec-report6
conv.c(5): (col. 13) remark: vectorization support: reference b has unaligned access
conv.c(5): (col. 5) remark: vectorization support: reference a has unaligned access
conv.c(5): (col. 5) remark: vectorization support: reference a has unaligned access
conv.c(5): (col. 5) remark: vectorization support: unaligned access used inside loop body
conv.c(5): (col. 13) remark: vectorization support: number of FP up converts: single precision to double precision 1
conv.c(5): (col. 5) remark: vectorization support: number of FP up converts: single precision to double precision 1
conv.c(5): (col. 5) remark: vectorization support: number of FP down converts: double precision to single precision 1
conv.c(4): (col. 8) remark: SIMD LOOP WAS VECTORIZED

Resolution:

This diagnostic message won't appear if we use sinf() instead of sin() since there is no conversion of float to double required when using sinf() function.

For more complete information about compiler optimizations, see our Optimization Notice.