Я применил l oop unroll and jam pass в clang и LLVM. Но как бы я ни старался, это не работает.
Ниже приведена команда, которую я использовал.
clang -Xclang -disable-O0-optnone -emit-llvm -S -o test.ll
opt -loop-unroll-and-jam -unroll-and-jam-count=2 -S test.ll
Ниже приведен один из проверенных мной кодов.
#define num 128
#define size 1024
void test()
{
int a[size]={0,};
int b[size]={0,};
int c[size]={0,};
int i=0;
int j=0;
int k=0;
int sum=0;
for (k = 1; k < num; k++)
for (i = 1; i < num; i++){
for (j = 1; j < num; j++)
{
a[i]=b[i]+c[j];
}
}
}
Я был бы очень признателен, если бы вы ответили, что я сделал не так, или привели примеры возможных l oop разворачивания и пробивания кода c кода.