I haven't gotten a chance to take a look at your code, but the disassemble function will show the LLVM assembly code for a function applied to a specific type signature. For example:
julia> disassemble(+,(Int,Int))
define %jl_value_t* @"+1023"(%jl_value_t*, %jl_value_t**, i32) {
%3 = load %jl_value_t** %1, align 8, !dbg !8757
%4 = getelementptr inbounds %jl_value_t* %3, i64 0, i32 0, !dbg !8757
%5 = getelementptr %jl_value_t** %4, i64 1, !dbg !8757
%6 = bitcast %jl_value_t** %5 to i64*, !dbg !8757
%7 = load i64* %6, align 8, !dbg !8757
%8 = getelementptr %jl_value_t** %1, i64 1, !dbg !8757
%9 = load %jl_value_t** %8, align 8, !dbg !8757
%10 = getelementptr inbounds %jl_value_t* %9, i64 0, i32 0, !dbg !8757
%11 = getelementptr %jl_value_t** %10, i64 1, !dbg !8757
%12 = bitcast %jl_value_t** %11 to i64*, !dbg !8757
%13 = load i64* %12, align 8, !dbg !8757
%14 = add i64 %13, %7, !dbg !8764
%15 = call %jl_value_t* @jl_box_int64(i64 %14), !dbg !8764
ret %jl_value_t* %15, !dbg !8764
As you can see, LLVM assembly code is pretty verbose – a lot of this produces no actual machine code in the end, but you can see somewhat what's happening.