Skip to content

Strip address space after gcframe allocation #22414

Closed
@yuyichao

Description

@yuyichao

The use of address space for gcframe allocation is nice but currently has a few issues.

  1. It seems that it might disable some optimizations that is legal to do after gcframe allocation

  2. It makes code_llvm really hard to read. Just to give a taste, this is the code_llvm for g2(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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    compiler:codegenGeneration of LLVM IR and native code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions