Closed
Description
The use of address space for gcframe allocation is nice but currently has a few issues.
-
It seems that it might disable some optimizations that is legal to do after gcframe allocation
-
It makes
code_llvm
really hard to read. Just to give a taste, this is the code_llvm forg2(Ref(1), Ref(2))
with@noinline g2(a...) = a[1][]
.%26 = call %jl_value_t addrspace(10)* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16) %27 = addrspacecast %jl_value_t addrspace(10)* %26 to %jl_value_t addrspace(11)* %28 = bitcast %jl_value_t addrspace(11)* %27 to %jl_value_t addrspace(10)* addrspace(11)* %29 = getelementptr %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %28, i64 -1 store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140059207824816 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspace(11)* %29, align 8 %30 = bitcast %jl_value_t addrspace(10)* %26 to i64 addrspace(10)* %31 = addrspacecast i64 addrspace(10)* %30 to i64 addrspace(11)* store i64 1, i64 addrspace(11)* %31, align 16 store %jl_value_t addrspace(10)* %26, %jl_value_t addrspace(10)** %15, align 8 %32 = call %jl_value_t addrspace(10)* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16) %33 = addrspacecast %jl_value_t addrspace(10)* %32 to %jl_value_t addrspace(11)* %34 = bitcast %jl_value_t addrspace(11)* %33 to %jl_value_t addrspace(10)* addrspace(11)* %35 = getelementptr %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %34, i64 -1 store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140059207824816 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)* addrspace(11)* %35, align 8 %36 = bitcast %jl_value_t addrspace(10)* %32 to i64 addrspace(10)* %37 = addrspacecast i64 addrspace(10)* %36 to i64 addrspace(11)* store i64 2, i64 addrspace(11)* %37, align 16 store %jl_value_t addrspace(10)* %32, %jl_value_t addrspace(10)** %22, align 8 store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140059206975592 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, align 8 store %jl_value_t addrspace(10)* %26, %jl_value_t addrspace(10)** %23, align 8 store %jl_value_t addrspace(10)* %32, %jl_value_t addrspace(10)** %24, align 8 %38 = call %jl_value_t addrspace(10)* @jl_invoke(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140058681133584 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, i32 3)