Cause:
This diagnostic is emitted by Intel(R) C++ Compiler 14.0 and below. This diagnostic message is emitted when the function modifies the ebx/rbx register. Vectorization requires aligned stack frame: 16 bytes for XMM, 32 bytes for YMM and 64 bytes for ZMM. When EBX/RBX register is used in inline ASM, the necessary stack frame alignment may become unenforceable and hence vectorization attempts will stop.
Examples:
void foo(int *A, int *B, int n){ int i; __asm { push rbx mov ebx, eax } for (i=0;i<n;i++){ B[i] += A[i]; } __asm { pop rbx } }
$ icpc -c -vec-report2 test58.cc -fasm-blocks -xAVX
test58.cc(1): (col. 32) remark: routine skipped: no vectorization candidates