fix(tpv): 消除 PYI_BUF_SIZE 跨模块重复全局并去掉 --allow-multiple-definition 兜底
Phase1 与 BuildPipeline 各自把 PYI_BUF_SIZE 声明为模块级全局,模块级全局走裸名符号(类 C extern 全局语义),两模块各发一份强定义 @PYI_BUF_SIZE,llvm-link 报 symbol multiply defined 并回退到单独编译。改为编译期宏 define PYI_BUF_SIZE = 262144(与同文件 define SRC_BUF_SIZE 同口径,不产生符号),同步更新引用该符号的非 CDefine 示例注释。project.vpj 移除 -Wl,--allow-multiple-definition 兜底。验证:跨模块内联优化完成,最终链接无该 flag 成功(161.70s);TransPyV 自举产物顺序回归 77/77 全通过。
This commit is contained in:
1 parent
f2ef1bb240
commit
e79ea010b0
5 files changed
+10
-7
No files matched your search
@@ -82,7 +82,9 @@ def _ir_sibling_path(ir_path: str, suffix: str) -> str:
|
||||
define SRC_BUF_SIZE = 1048576 # 2^20 = 1MB
|
||||
|
||||
# .vpi 存根缓冲区大小(256KB,与 Phase1 一致)
|
||||
PYI_BUF_SIZE: sizet = 262144
|
||||
# 编译期常量用 define:模块级同名全局(Phase1 已有 PYI_BUF_SIZE)会各发一份
|
||||
# 强定义符号,llvm-link 报 symbol multiply defined。
|
||||
define PYI_BUF_SIZE = 262144
|
||||
|
||||
# ============================================================
|
||||
# _llc_frame_ptr_flag - llc extra flag for --traceback
|
||||
|
||||
@@ -9,7 +9,9 @@ _mbuddy: memhub.MemBuddy*
|
||||
define SRC_BUF_SIZE = 1048576
|
||||
|
||||
# vpi 缓冲区大小(256KB)
|
||||
PYI_BUF_SIZE: sizet = 262144
|
||||
# 编译期常量,用 define 而非模块级全局:模块级同名全局会在多个模块各发
|
||||
# 一份强定义符号(@PYI_BUF_SIZE),llvm-link 报 symbol multiply defined。
|
||||
define PYI_BUF_SIZE = 262144
|
||||
|
||||
# 拓扑排序相关常量
|
||||
define MAX_CLASSES = 512
|
||||
|
||||
@@ -536,8 +536,8 @@ novirtual class ExprGenAttr(ExprGenBase.ExprGenBase):
|
||||
# 此处返回 None,让上层嵌套属性访问路径处理
|
||||
if string.strcmp(nm_ma.id, "t") == 0 and string.strcmp(at.attr, "ASM_DESCR") == 0: return None
|
||||
# ALL_CAPS 模块属性但非 CDefine:先检查模块是否定义了同名全局
|
||||
# 变量(如 Phase1.PYI_BUF_SIZE: sizet = 262144 是 i64 全局、
|
||||
# 非宏,语义同 C 的 extern size_t PYI_BUF_SIZE)→ 按跨模块全局
|
||||
# 变量(如 Phase2 的 PA_DEPS_MAX_STR: sizet = 1024 是 i64 全局、
|
||||
# 非宏,语义同 C 的 extern size_t)→ 按跨模块全局
|
||||
# 引用加载。仅当全局变量也不存在时才 fail-fast(防 llc
|
||||
# "use of undefined value")。
|
||||
if self.Gen.ExprGenCdef._is_cdefine_name_pattern(at.attr) != 0:
|
||||
|
||||
@@ -110,8 +110,8 @@ novirtual class ExprGenName(ExprGenBase.ExprGenBase):
|
||||
return self.Gen.ExprGenCdef._const_int_for_cdefine(pool, cdef_val)
|
||||
|
||||
# CDefine 查找失败:from-import 的模块级全局变量(如
|
||||
# from Phase1 import PYI_BUF_SIZE;PYI_BUF_SIZE: sizet = 262144 是
|
||||
# i64 全局、非宏,语义同 C 的 extern size_t PYI_BUF_SIZE)。from-import
|
||||
# from Phase2 import PA_DEPS_MAX_STR;该名是 i64 全局、非宏,
|
||||
# 语义同 C 的 extern size_t)。from-import
|
||||
# 确认名称确实来自某模块后,按后缀匹配查找该全局并加载。
|
||||
if trans is not None and trans._from_imports is not None:
|
||||
fi_mod_raw: str = self.Gen.ImportsGen.lookup_from_import(trans._from_imports, nm_id, 0)
|
||||
|
||||
Reference in new issue
Block a user