Hello,

i am trying to vectorize a simple matrix multiplication in llvm;

here is my code;

#include <stdio.h>

#define N 1000

// This function multiplies A and B, and stores

// the result in C

void multiply(int A[N], int B[N], int C[N])

{

int i, j, k;

for (i = 0; i < N; i++)

{

for (j = 0; j < N; j++)

{

C[i][j] = 0;

for (k = 0; k < N; k++)

C[i][j] += A[i][k]*B[k][j];

}

}

}

here are the commands;

clang -S -emit-llvm mat.c -march=knl -O3 -mllvm -disable-llvm-optzns -o mat.ll

opt -S -O3 mat.ll -o mat_o3.ll

llc -x86-asm-syntax=intel mat_o3.ll -o mat_intel.s

with this command i got the below error

opt -S -O3 -force-vector-width=16 mat.ll -o mat_o3.ll

remark: :0:0: loop not vectorized: value that could not be identified as reduction is used outside the loop

it is unable to vectorize the matrix multiplication and in .ll and .s files i see the scalar instructions.

Why is that so? What is my mistake?? Kindly correct me.

Looking forward to your reply

Thank You