Cause:
This diagnostic is emitted by Intel(R) C++ Compiler 15.0 and above. This example uses User implemented vector variant of the function. Traditionally the vector variant of the user defined function is created by the compiler using __attribute__((vector)) with relevant clauses. Here the developer can provide target certain processors by providing the intrinsics implementation which targets those processor architecture. In this example, we create a vector variant of the scalar function MyMax() and target the vector variant for core i7 processor SSE4.2 architecture.
Examples:
#include <immintrin.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define NN 1021 __declspec(noinline) float MyMax(float* a, float b) { return *a + b; } __declspec(vector_variant(implements(MyMax(float* a, float b)), vectorlength(4), processor(core_i7_sse4_2), mask)) __m128 MyMaxVec(__m128i v_a1, __m128i v_a2, __m128 v_b) { return _mm_add_ps(_mm_cvtepi32_ps(v_a1), v_b); }$ icpc test54.cc -c -qopt-report2 -qopt-report-phase=vec -qopt-report-file=stderr -xAVX
error #15511: Not enough parameters of vector variant '_Z8MyMaxVec7__m128iS_6__m128' of function '_Z5MyMaxPff' at position 3.
The correct prototype is: '__m128 _Z8MyMaxVec7__m128iS_6__m128(__m128i v0_0, __m128i v0_1, __m128 v1_0, __m128 m0_0)'.
compilation aborted for test54.cc (code 1)Resolution:
Using __m128 data type instead will resolve this error and the vector variant of the function is generated.