fix(mlir): 模块缩进辅助缓冲改为池可服务的最大单块 1048560(1 MiB − 16)
256 KiB 对个别大函数偏小,触发自己加的截断护栏: [MLIR-FAIL] MLIR 渲染: 输出文本超出缓冲被截断(需增大 dump_ir/FunctionPrint 的缓冲) 模块池(~2 MiB 子池)max_order=15 ⇒ 单个 buddy 块最大 1 MiB,减去 16 字节块头 ⇒ 单次 alloc 请求上限 = 1048560。取该值:既不再因 order 16 结构性失败 (1048576 会失败),又给足单函数文本(内联具名结构体使文本显著变长)。 若仍超出,截断由 FunctionPrint/LLVMModulePrint 的截断检查响亮报错。
This commit is contained in:
1 parent
1cf7186824
commit
bca0107240
1 file changed
+11
-10
+11
-10
@@ -25,8 +25,7 @@ from .__function import (
|
||||
# 持有名称 + 类型 + 初始化值 + 常量标志 + 链接类型。
|
||||
# 继承 GSListNode[GlobalVariable] 获取强类型 Next。
|
||||
# ============================================================
|
||||
@t.NoVTable
|
||||
class GlobalVariable(GSListNode[GlobalVariable]):
|
||||
novirtual class GlobalVariable(GSListNode[GlobalVariable]):
|
||||
Name: str # 全局变量名(如 ".str" / "my_global")
|
||||
Ty: rawptr[LLVMType] # 变量类型
|
||||
Initializer: rawptr # 初始化值 Value*(None = 无初始化)
|
||||
@@ -358,16 +357,18 @@ class LLVMModule:
|
||||
# (旧 64 KiB 会截断;截断现由 FunctionPrint/LLVMModulePrint 的截断检查
|
||||
# 响亮报错)。
|
||||
# 容量上限**受模块池的 buddy 上限约束**:模块池是 ~2 MiB 子池
|
||||
# (SUB_POOL_SIZE),其 max_order=15 ⇒ 单个 buddy 块 ≤ 1 MiB,且分配还要
|
||||
# 留 16 字节块头 ⇒ 单次 alloc 请求必须 ≤ 1 MiB − 16。此前取 1 MiB
|
||||
# (1048576)会被判需 order 16 而**结构性失败**([MEM] alloc 失败
|
||||
# size=1048576 needed=1048592 order=16 max_order=15)。
|
||||
# 取 256 KiB:实测最大单成员文本 ~54 KB(670 KB 模块 / 991 行最大函数,
|
||||
# 平均 ~54 B/行),余量 ~4.7×;且只需 order 14(512 KiB 块)即可满足。
|
||||
tmp_cap: sizet = 262144
|
||||
# (SUB_POOL_SIZE 2097136),其 max_order=15 ⇒ 单个 buddy 块最大
|
||||
# 32<<15 = 1 MiB;分配还要留 16 字节块头 ⇒ 单次 alloc 请求必须
|
||||
# ≤ 1 MiB − 16 = 1048560。
|
||||
# 取该上限(1048560):此前取 1048576 会被判需 order 16 而**结构性失败**
|
||||
# ([MEM] alloc 失败 size=1048576 needed=1048592 order=16 max_order=15);
|
||||
# 而取 256 KiB 又对个别大函数偏小(触发"输出文本超出缓冲被截断"护栏)。
|
||||
# 单函数文本因内联具名结构体完整字段体而显著变长,故按池可服务的最大单块给足;
|
||||
# 若仍超出,截断由 FunctionPrint/LLVMModulePrint 的截断检查响亮报错。
|
||||
tmp_cap: sizet = 1048560
|
||||
tmp: str = pool.alloc(tmp_cap)
|
||||
if tmp is None:
|
||||
MlirFail("MLIR 渲染: 模块缩进辅助缓冲分配失败(256 KiB)")
|
||||
MlirFail("MLIR 渲染: 模块缩进辅助缓冲分配失败(1048560 ≈ 1 MiB − 16 字节块头)")
|
||||
|
||||
# 全局变量(MLIR 无独立类型定义行:命名结构体类型在使用处内联,
|
||||
# 故这里不再输出 NamedTypeHead 类型定义,仅登记供类型文本回查)
|
||||
|
||||
Reference in new issue
Block a user