JuliaLang/julia

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

Ouverte

#54 395 ouverte le 7 mai 2024

 (0 commentaire) (2 réactions) (0 personne assignée)Julia (5 773 forks)batch import
compiler:codegencompiler:llvmhelp wanted

Métriques du dépôt

Stars
 (48 709 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

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.

Guide contributeur