a502c7242f93439999993af0483f5a027ee43335
根因:MLIR 把具名结构体内联为完整字段体(`!llvm.struct<"名", (i32, !llvm.ptr, …)>`),
单个类型文本可达数百字节,远长于 LLVM 形态的 `%"名"` 引用(十几字节);而 builders
仍按旧的短类型尺寸分配(128/256),指令行里的类型被截断 → 畸形 MLIR。
实测:alloca 行类型被 128 字节缓冲截断,mlir-opt 报
"unbalanced '(' character in pretty dialect name"。
- __types.vp:新增截断溢出标志 _MlirTypeTrunc(_strappend/_MlirAppendN 写入
被截断时置位),TypePrint / MlirTypeText 渲染后检查并 MlirFail —— 任何截断
都不再静默产出畸形 MLIR
- __builder.vp:新增 _TY_TEXT_CAP(512)/_LINE_CAP(2560),全部指令行缓冲(alloca
/ret/load/store/各类 cast/gep/icmp/fcmp/select/atomicrmw/cmpxchg/va_arg/switch
/case/inline_asm…)改为 _LINE_CAP;build_call / build_call_indirect 的实参表
与行缓冲按实参个数与实际长度动态分配(原固定 1024/2048 会在两个以上结构体
实参时静默截断)
- __values.vp:ValuePrint 的类型缓冲 256 → 512
Description
GVSDS(TM) Viper SE Runtime Environment and Library (VRTE)
15 MiB
0 Stars
1 Watchers
0 Forks
Languages
C++
76.8%
C
22%
CMake
1.2%