Comparing Julia functions

You can use @code_lowered to inspect the lowered code of a function, for example:

julia> @code_lowered modify1(1, 2)
CodeInfo(
1 ─ %1 = a + b
└──      return %1
)

julia> @code_lowered modify2(1, 2)
CodeInfo(
1 ─ %1 = a + b
│   %2 = a - b
│   %3 = %1 * %2
└──      return %3
)

julia> @code_lowered modify3(1, 2)
CodeInfo(
1 ─ %1 = Main.modify1(a, b)
│   %2 = a - b
│   %3 = %1 * %2
└──      return %3
)

You can also use @code_native to inspect the actual assembly instructions:

julia> @code_native debuginfo=:none modify1(1, 2)
        .text
        pushq   %rbp
        movq    %rsp, %rbp
        leaq    (%rcx,%rdx), %rax
        popq    %rbp
        retq
        nopw    (%rax,%rax)

julia> @code_native debuginfo=:none modify2(1, 2)
        .text
        pushq   %rbp
        movq    %rsp, %rbp
        leaq    (%rdx,%rcx), %rax
        subq    %rdx, %rcx
        imulq   %rcx, %rax
        popq    %rbp
        retq
        nopw    %cs:(%rax,%rax)

julia> @code_native debuginfo=:none modify3(1, 2)
        .text
        pushq   %rbp
        movq    %rsp, %rbp
        leaq    (%rdx,%rcx), %rax
        subq    %rdx, %rcx
        imulq   %rcx, %rax
        popq    %rbp
        retq
        nopw    %cs:(%rax,%rax)
4 Likes