JuliaLang/julia

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

開放

#54,395 建立於 2024年5月7日

 (0 則留言) (2 個反應) (0 位負責人)Julia (5,773 個分叉)batch import
compiler:codegencompiler:llvmhelp wanted

倉庫指標

星標
 (48,709 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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.

貢獻者指南