JuliaPerf / MCAnalyzer.jl

A set of tools for machine code analyzing of Julia code
Other
46 stars 9 forks source link

Optlevel switching doesn't work #2

Closed vchuravy closed 6 years ago

vchuravy commented 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

vchuravy commented 6 years ago

fixed by https://github.com/JuliaLang/julia/pull/24587