Encode type-/layout- vs. region-based alias info separately in LLVM IR
#54,395 opened on May 7, 2024
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.