Hacker News new | ask | show | jobs
by eigenspace 1876 days ago
That's because defining `a = 2` at the top level is a global constant, which can be changed at any time. Hence, the compiler can't optimize it out. If you tell the compiler it's a `const` though, it'll indeed do the optimization you were hoping for

    const a = 2
    f(n) = n * a

    julia> @code_llvm f(4)
    ;  @ REPL[2]:1 within `f'
    define i64 @julia_f_290(i64 signext %0) {
    top:
    ;  @ REPL[2]:2 within `f'
    ; ┌ @ int.jl:88 within `*'
       %1 = shl i64 %0, 1
    ; └
      ret i64 %1
    }

    julia> @code_native f(4)
            .text
    ; ┌ @ REPL[2]:2 within `f'
    ; │┌ @ int.jl:88 within `*'
            leaq    (%rdi,%rdi), %rax
    ; │└
            retq
            nopw    %cs:(%rax,%rax)
    ; └