Closed vchuravy closed 6 years ago
function padd(a, b, x, y) c = a + b z = x+y return c, z end julia> IACA.optlevel[] 2 julia> IACA.code_llvm(padd, (Float64, Float64, Float64, Float64)) define void @julia_padd_62729([2 x double] addrspace(11)* noalias nocapture sret, double, double, double, double) !dbg !5 { top: %5 = fadd double %1, %2, !dbg !7 %6 = fadd double %3, %4, !dbg !8 %.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(11)* %0, i64 0, i64 0, !dbg !9 store double %5, double addrspace(11)* %.sroa.0.0..sroa_idx, align 8, !dbg !9 %.sroa.2.0..sroa_idx1 = getelementptr inbounds [2 x double], [2 x double] addrspace(11)* %0, i64 0, i64 1, !dbg !9 store double %6, double addrspace(11)* %.sroa.2.0..sroa_idx1, align 8, !dbg !9 ret void, !dbg !9 } julia> IACA.optlevel[] = 3 3 julia> IACA.code_llvm(padd, (Float64, Float64, Float64, Float64)) define void @julia_padd_62751([2 x double] addrspace(11)* noalias nocapture sret, double, double, double, double) !dbg !5 { top: %5 = fadd double %1, %2, !dbg !7 %6 = fadd double %3, %4, !dbg !8 %.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(11)* %0, i64 0, i64 0, !dbg !9 store double %5, double addrspace(11)* %.sroa.0.0..sroa_idx, align 8, !dbg !9 %.sroa.2.0..sroa_idx1 = getelementptr inbounds [2 x double], [2 x double] addrspace(11)* %0, i64 0, i64 1, !dbg !9 store double %6, double addrspace(11)* %.sroa.2.0..sroa_idx1, align 8, !dbg !9 ret void, !dbg !9 }
restarting Julia with -O3 will make the above use the SLP vectorizer
-O3
fixed by https://github.com/JuliaLang/julia/pull/24587
restarting Julia with
-O3
will make the above use the SLP vectorizer