Revision 77355569c884f4c67599ea852ca6a2aaeb400032 authored by pchintalapudi on 15 July 2023, 15:36:26 UTC, committed by GitHub on 15 July 2023, 15:36:26 UTC
This makes it easier to correlate LLVM IR with the originating source code by including both argument name and argument type in the LLVM argument variable. <details> <summary>Example 1</summary> ```julia julia> function f(a, b, c, d, g...) e = a + b + c + d f = does_not_exist(e) + e f end f (generic function with 1 method) julia> @code_llvm f(0,0,0,0,0) ``` ```llvm ; @ REPL[1]:1 within `f` define nonnull {}* @julia_f_141(i64 signext %"a::Int64", i64 signext %"b::Int64", i64 signext %"c::Int64", i64 signext %"d::Int64", i64 signext %"g[0]::Int64") #0 { top: %0 = alloca [2 x {}*], align 8 %gcframe3 = alloca [4 x {}*], align 16 %gcframe3.sub = getelementptr inbounds [4 x {}*], [4 x {}*]* %gcframe3, i64 0, i64 0 %1 = bitcast [4 x {}*]* %gcframe3 to i8* call void @llvm.memset.p0i8.i64(i8* align 16 %1, i8 0, i64 32, i1 true) %thread_ptr = call i8* asm "movq %fs:0, $0", "=r"() #7 %tls_ppgcstack = getelementptr i8, i8* %thread_ptr, i64 -8 %2 = bitcast i8* %tls_ppgcstack to {}**** %tls_pgcstack = load {}***, {}**** %2, align 8 ; @ REPL[1]:3 within `f` %3 = bitcast [4 x {}*]* %gcframe3 to i64* store i64 8, i64* %3, align 16 %4 = getelementptr inbounds [4 x {}*], [4 x {}*]* %gcframe3, i64 0, i64 1 %5 = bitcast {}** %4 to {}*** %6 = load {}**, {}*** %tls_pgcstack, align 8 store {}** %6, {}*** %5, align 8 %7 = bitcast {}*** %tls_pgcstack to {}*** store {}** %gcframe3.sub, {}*** %7, align 8 %Main.does_not_exist.cached = load atomic {}*, {}** @0 unordered, align 8 %iscached.not = icmp eq {}* %Main.does_not_exist.cached, null br i1 %iscached.not, label %notfound, label %found notfound: ; preds = %top %Main.does_not_exist.found = call {}* @ijl_get_binding_or_error({}* nonnull inttoptr (i64 139831437630272 to {}*), {}* nonnull inttoptr (i64 139831600565400 to {}*)) store atomic {}* %Main.does_not_exist.found, {}** @0 release, align 8 br label %found found: ; preds = %notfound, %top %Main.does_not_exist = phi {}* [ %Main.does_not_exist.cached, %top ], [ %Main.does_not_exist.found, %notfound ] %8 = bitcast {}* %Main.does_not_exist to {}** %does_not_exist.checked = load atomic {}*, {}** %8 unordered, align 8 %.not = icmp eq {}* %does_not_exist.checked, null br i1 %.not, label %err, label %ok err: ; preds = %found call void @ijl_undefined_var_error({}* inttoptr (i64 139831600565400 to {}*)) unreachable ok: ; preds = %found %.sub = getelementptr inbounds [2 x {}*], [2 x {}*]* %0, i64 0, i64 0 ; @ REPL[1]:2 within `f` ; ┌ @ operators.jl:587 within `+` @ int.jl:87 %9 = add i64 %"b::Int64", %"a::Int64" %10 = add i64 %9, %"c::Int64" ; │ @ operators.jl:587 within `+` ; │┌ @ operators.jl:544 within `afoldl` ; ││┌ @ int.jl:87 within `+` %11 = add i64 %10, %"d::Int64" %12 = getelementptr inbounds [4 x {}*], [4 x {}*]* %gcframe3, i64 0, i64 3 store {}* %does_not_exist.checked, {}** %12, align 8 ; └└└ ; @ REPL[1]:3 within `f` %13 = call nonnull {}* @ijl_box_int64(i64 signext %11) %14 = getelementptr inbounds [4 x {}*], [4 x {}*]* %gcframe3, i64 0, i64 2 store {}* %13, {}** %14, align 16 store {}* %13, {}** %.sub, align 8 %15 = call nonnull {}* @ijl_apply_generic({}* nonnull %does_not_exist.checked, {}** nonnull %.sub, i32 1) store {}* %15, {}** %12, align 8 %16 = call nonnull {}* @ijl_box_int64(i64 signext %11) store {}* %16, {}** %14, align 16 store {}* %15, {}** %.sub, align 8 %17 = getelementptr inbounds [2 x {}*], [2 x {}*]* %0, i64 0, i64 1 store {}* %16, {}** %17, align 8 %18 = call nonnull {}* @ijl_apply_generic({}* inttoptr (i64 139831370516384 to {}*), {}** nonnull %.sub, i32 2) %19 = load {}*, {}** %4, align 8 %20 = bitcast {}*** %tls_pgcstack to {}** store {}* %19, {}** %20, align 8 ; @ REPL[1]:4 within `f` ret {}* %18 } ``` </details> <details> <summary>Example 2</summary> ```julia julia> function g(a, b, c, d; kwarg=0) a + b + c + d + kwarg end g (generic function with 1 method) julia> @code_llvm g(0,0,0,0,kwarg=0) ``` ```llvm ; @ REPL[3]:1 within `g` define i64 @julia_g_160([1 x i64]* nocapture noundef nonnull readonly align 8 dereferenceable(8) %"#1::NamedTuple", i64 signext %"a::Int64", i64 signext %"b::Int64", i64 signext %"c::Int64", i64 signext %"d::Int64") #0 { top: %0 = getelementptr inbounds [1 x i64], [1 x i64]* %"#1::NamedTuple", i64 0, i64 0 ; ┌ @ REPL[3]:2 within `#g#1` ; │┌ @ operators.jl:587 within `+` @ int.jl:87 %1 = add i64 %"b::Int64", %"a::Int64" %2 = add i64 %1, %"c::Int64" ; ││ @ operators.jl:587 within `+` ; ││┌ @ operators.jl:544 within `afoldl` ; │││┌ @ int.jl:87 within `+` %3 = add i64 %2, %"d::Int64" ; │││└ ; │││ @ operators.jl:545 within `afoldl` ; │││┌ @ int.jl:87 within `+` %unbox = load i64, i64* %0, align 8 %4 = add i64 %3, %unbox ; └└└└ ret i64 %4 } ``` </details>
File | Mode | Size |
---|---|---|
checksums | ||
patches | ||
tools | ||
valgrind | ||
.gitignore | -rw-r--r-- | 26 bytes |
JuliaSyntax.mk | -rw-r--r-- | 673 bytes |
JuliaSyntax.version | -rw-r--r-- | 244 bytes |
Makefile | -rw-r--r-- | 6.0 KB |
blastrampoline.mk | -rw-r--r-- | 2.1 KB |
blastrampoline.version | -rw-r--r-- | 196 bytes |
clang.version | -rw-r--r-- | 123 bytes |
csl.mk | -rw-r--r-- | 4.6 KB |
csl.version | -rw-r--r-- | 57 bytes |
curl.mk | -rw-r--r-- | 3.4 KB |
curl.version | -rw-r--r-- | 95 bytes |
dsfmt.mk | -rw-r--r-- | 2.2 KB |
dsfmt.version | -rw-r--r-- | 76 bytes |
gfortblas.alias | -rw-r--r-- | 706 bytes |
gfortblas.c | -rw-r--r-- | 4.4 KB |
gmp.mk | -rw-r--r-- | 3.3 KB |
gmp.version | -rw-r--r-- | 70 bytes |
ittapi.mk | -rw-r--r-- | 1.6 KB |
ittapi.version | -rw-r--r-- | 91 bytes |
libgit2.mk | -rw-r--r-- | 3.7 KB |
libgit2.version | -rw-r--r-- | 429 bytes |
libssh2.mk | -rw-r--r-- | 2.9 KB |
libssh2.version | -rw-r--r-- | 167 bytes |
libsuitesparse.mk | -rw-r--r-- | 3.8 KB |
libsuitesparse.version | -rw-r--r-- | 202 bytes |
libtracyclient.mk | -rw-r--r-- | 3.4 KB |
libtracyclient.version | -rw-r--r-- | 227 bytes |
libuv.mk | -rw-r--r-- | 2.4 KB |
libuv.version | -rw-r--r-- | 154 bytes |
libwhich.mk | -rw-r--r-- | 1.2 KB |
libwhich.version | -rw-r--r-- | 78 bytes |
lld.version | -rw-r--r-- | 60 bytes |
llvm-options.mk | -rw-r--r-- | 564 bytes |
llvm-tools.version | -rw-r--r-- | 182 bytes |
llvm-ver.make | -rw-r--r-- | 664 bytes |
llvm.mk | -rw-r--r-- | 11.8 KB |
llvm.version | -rw-r--r-- | 919 bytes |
llvmunwind.version | -rw-r--r-- | 95 bytes |
mbedtls.mk | -rw-r--r-- | 3.4 KB |
mbedtls.version | -rw-r--r-- | 83 bytes |
mpfr.mk | -rw-r--r-- | 2.4 KB |
mpfr.version | -rw-r--r-- | 73 bytes |
nghttp2.mk | -rw-r--r-- | 2.0 KB |
nghttp2.version | -rw-r--r-- | 102 bytes |
objconv.mk | -rw-r--r-- | 1.0 KB |
objconv.version | -rw-r--r-- | 264 bytes |
openblas.mk | -rw-r--r-- | 8.3 KB |
openblas.version | -rw-r--r-- | 227 bytes |
openlibm.mk | -rw-r--r-- | 1.3 KB |
openlibm.version | -rw-r--r-- | 163 bytes |
p7zip.mk | -rw-r--r-- | 1.6 KB |
p7zip.version | -rw-r--r-- | 76 bytes |
patchelf.mk | -rw-r--r-- | 2.2 KB |
patchelf.version | -rw-r--r-- | 112 bytes |
pcre.mk | -rw-r--r-- | 2.2 KB |
pcre.version | -rw-r--r-- | 74 bytes |
sanitizers.mk | -rw-r--r-- | 1009 bytes |
unwind.mk | -rw-r--r-- | 7.5 KB |
unwind.version | -rw-r--r-- | 104 bytes |
utf8proc.mk | -rw-r--r-- | 1.5 KB |
utf8proc.version | -rw-r--r-- | 78 bytes |
zlib.mk | -rw-r--r-- | 1.4 KB |
zlib.version | -rw-r--r-- | 164 bytes |
Computing file changes ...