JuliaLang/julia

Encode type-/layout- vs. region-based alias info separately in LLVM IR

Open

#54,395 opened on May 7, 2024

View on GitHub
 (0 comments) (2 reactions) (0 assignees)Julia (48,709 stars) (5,773 forks)batch import
compiler:codegencompiler:llvmhelp wanted

Description

Currently we redundantly encode region information in both !tbaa and !alias.scope metadata for LLVM.

We'd like to separate these so that TBAA is only used to encode the layout-/type-based non-aliasing information, and !alias.scope is used just for the region-based information.

For reference, here's the existing TBAA hierarchy: https://github.com/JuliaLang/julia/blob/5f7bfc0a8374a902b723870262ffe7ddfbc44e77/src/codegen.cpp#L351-L375

The first step is probably to (1) re-factor the code to stop using ::fromTBAA. Instead, the region information should be passed around as a separate piece of aliasing-related information. Most likely that means creating a jl_aliasinfo_t much earlier, and updating jl_cgval_t to carry it instead of just TBAA metadata. Then, (2) remove tbaa_gcframe, tbaa_stack, tbaa_const, and tbaa_data from the TBAA hierarchy.

Afterwards, an excellent follow-up will be to expand the TBAA hierarchy to encode a much broader set of types into it, including ideally user-defined structs.

Contributor guide