O3都是怪物,这里分析的是CLANG怪物,示例程序遍历数组每个元素然后放大。
void foreach_scale(int arr[],int elem){
for(int i=0;i<elem;i++){
arr[i] += (elem*1024);
}
}
这里删去了用处不大的内容,只保留了关键的LLVM IR。通过分析可以看到,如果循环小于8 LLVM IR会使用vector,vector使用SIMD指令高效进行计算,如果大于8则是普通的for形式。
; Function Attrs: norecurse nounwind
define void @"