We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
jlcall is not using gcframe anymore after #21888 . With
julia> @noinline g2(a...) = a[1][] g2 (generic function with 1 method) julia> f2() = g2(Ref(1)) f2 (generic function with 1 method)
code_llvm
define i64 @julia_f2_63184() #0 !dbg !5 { top: %0 = alloca [2 x %jl_value_t addrspace(10)*], align 8 %gcframe2 = alloca [4 x %jl_value_t addrspace(10)*], align 8 %gcframe2.sub = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %gcframe2, i64 0, i64 0 %.sub = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %0, i64 0, i64 0 %gcroot1 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %gcframe2, i64 0, i64 2 %1 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %gcframe2, i64 0, i64 1 %2 = bitcast %jl_value_t addrspace(10)** %1 to i8* call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 24, i32 8, i1 false) %ptls_i8 = call i8* asm "movq %fs:0, $0;\0Aaddq $$-10928, $0", "=r,~{dirflag},~{fpsr},~{flags}"() #2 %3 = bitcast [4 x %jl_value_t addrspace(10)*]* %gcframe2 to i64* store i64 4, i64* %3, align 8 %4 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %gcframe2, i64 0, i64 1 %5 = bitcast i8* %ptls_i8 to i64* %6 = load i64, i64* %5, align 8 %7 = bitcast %jl_value_t addrspace(10)** %4 to i64* store i64 %6, i64* %7, align 8 %8 = bitcast i8* %ptls_i8 to %jl_value_t addrspace(10)*** store %jl_value_t addrspace(10)** %gcframe2.sub, %jl_value_t addrspace(10)*** %8, align 8 %9 = call %jl_value_t addrspace(10)* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16) %10 = addrspacecast %jl_value_t addrspace(10)* %9 to %jl_value_t addrspace(11)* %11 = bitcast %jl_value_t addrspace(11)* %10 to %jl_value_t addrspace(10)* addrspace(11)* %12 = getelementptr %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %11, i64 -1 store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140124422927792 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspace(11)* %12, align 8 %13 = bitcast %jl_value_t addrspace(10)* %9 to i64 addrspace(10)* %14 = addrspacecast i64 addrspace(10)* %13 to i64 addrspace(11)* store i64 1, i64 addrspace(11)* %14, align 16 %15 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %gcframe2, i64 0, i64 3 store %jl_value_t addrspace(10)* %9, %jl_value_t addrspace(10)** %15, align 8 store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140124422078488 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, align 8 %16 = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %0, i64 0, i64 1 store %jl_value_t addrspace(10)* %9, %jl_value_t addrspace(10)** %16, align 8 %17 = call %jl_value_t addrspace(10)* @jl_invoke(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140123895890192 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, i32 2) store %jl_value_t addrspace(10)* %17, %jl_value_t addrspace(10)** %gcroot1, align 8 store %jl_value_t addrspace(10)* %17, %jl_value_t addrspace(10)** %15, align 8 %18 = bitcast %jl_value_t addrspace(10)* %17 to i64 addrspace(10)* %19 = load i64, i64 addrspace(10)* %18, align 16 %20 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %4, align 8 %21 = bitcast i8* %ptls_i8 to %jl_value_t addrspace(10)** store %jl_value_t addrspace(10)* %20, %jl_value_t addrspace(10)** %21, align 8 ret i64 %19 }
Two alloca are created for jlcall and gcframe separately.
alloca
%0 = alloca [2 x %jl_value_t addrspace(10)*], align 8 %gcframe2 = alloca [4 x %jl_value_t addrspace(10)*], align 8
This could be related to #14779 (which means that the gcframe content could change after a jlcall)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
jlcall is not using gcframe anymore after #21888 . With
code_llvm
Two
alloca
are created for jlcall and gcframe separately.This could be related to #14779 (which means that the gcframe content could change after a jlcall)
The text was updated successfully, but these errors were encountered: