From 31b0f79ed26b2785d8ea13456c8058ea74e26ab4 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 29 Sep 2026 15:48:06 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"fix(includes):=20llvmlite/mlirlite/to?= =?UTF-8?q?rch=20=E7=9A=84=E5=88=86=E9=85=8D=E5=99=A8=E5=BD=A2=E5=8F=82?= =?UTF-8?q?=E6=94=BE=E5=AE=BD=E5=88=B0=E5=9F=BA=E7=B1=BB=20MemManager"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 9b1399b62772961e3fa773428eb72446c2b38ed3. --- llvmlite/__builder.vp | 90 +++++++++++++++++++++--------------------- llvmlite/__function.vp | 30 +++++++------- llvmlite/__init__.vp | 24 +++++------ llvmlite/__module.vp | 32 +++++++-------- llvmlite/__types.vp | 54 ++++++++++++------------- llvmlite/__values.vp | 14 +++---- llvmlite/__verify.vp | 12 +++--- mlirlite/__builder.vp | 88 ++++++++++++++++++++--------------------- mlirlite/__function.vp | 34 ++++++++-------- mlirlite/__init__.vp | 24 +++++------ mlirlite/__module.vp | 36 ++++++++--------- mlirlite/__types.vp | 74 +++++++++++++++++----------------- mlirlite/__values.vp | 14 +++---- mlirlite/__verify.vp | 12 +++--- torch/__init__.vp | 6 +-- 15 files changed, 272 insertions(+), 272 deletions(-) diff --git a/llvmlite/__builder.vp b/llvmlite/__builder.vp index a606e68..776a2d7 100644 --- a/llvmlite/__builder.vp +++ b/llvmlite/__builder.vp @@ -29,7 +29,7 @@ from .__function import Function, BasicBlock, block_append_text, block_set_termi # (方法以实例方法实现,无虚表;文件末尾的同名顶层函数为一行委托)。 # ============================================================ novirtual class IRBuilder: - Pool: memhub.MemManager* # 内存池 + Pool: memhub.MemBuddy* # 内存池 Func: rawptr[Function] # 所属函数 CurBlock: rawptr[BasicBlock] # 当前插入点 Counter: int # SSA 名计数器 @@ -40,7 +40,7 @@ novirtual class IRBuilder: # ============================================================ def _alloc_ssa_name(self) -> str: """分配一个 SSA 名字符串 "%N" 并递增计数器""" - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool buf: str = pool.alloc(16) if buf is None: return None viperlib.snprintf(buf, 16, "%%%d", self.Counter) @@ -54,7 +54,7 @@ novirtual class IRBuilder: 注意:复杂结构体类型(如 13 方法的虚表 {i8*,i8*,...})可能超过 64 字节, 必须使用足够大的缓冲区,否则 '}' 会被截断导致 IR 语法错误。 """ - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool buf: str = pool.alloc(512) if buf is None: return None buf[0] = '\0' @@ -113,7 +113,7 @@ novirtual class IRBuilder: lhs: rawptr[Value], rhs: rawptr[Value]) -> rawptr[Value]: """二元运算通用实现""" if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) line: str = pool.alloc(256) @@ -161,7 +161,7 @@ novirtual class IRBuilder: 因此本函数不设默认参数;需要显式对齐请用 build_alloca_aligned。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) line: str = pool.alloc(128) @@ -186,7 +186,7 @@ novirtual class IRBuilder: align 不设默认值(TPC 并行编译时 include 默认参数不预注册),调用方必须显式传入。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) line: str = pool.alloc(128) @@ -210,7 +210,7 @@ novirtual class IRBuilder: 导致的支配性违规(Instruction does not dominate all uses)。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool func: rawptr[Function] = self.Func if func is None or func.Blocks is None: return self.build_alloca(ty) @@ -248,7 +248,7 @@ novirtual class IRBuilder: 优化器提升/合并重复访问的场景使用。 """ if self is None or ptr is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -270,7 +270,7 @@ novirtual class IRBuilder: 限定符(`store volatile i32 %v, i32* %p`)。 """ if self is None or val is None or ptr is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool val_ty_s: str = self._type_str(val.Ty) ptr_ty_s: str = self._type_str(ptr.Ty) line: str = pool.alloc(256) @@ -399,7 +399,7 @@ novirtual class IRBuilder: def build_fneg(self, val: rawptr[Value]) -> rawptr[Value]: """%N = fneg """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(val.Ty) line: str = pool.alloc(128) @@ -419,7 +419,7 @@ novirtual class IRBuilder: 返回类型为 i1 的 SSA 值 """ if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) pred_s: str = _icmp_pred_str(pred) @@ -443,7 +443,7 @@ novirtual class IRBuilder: 返回类型为 i1 的 SSA 值 """ if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) pred_s: str = _fcmp_pred_str(pred) @@ -466,7 +466,7 @@ novirtual class IRBuilder: def build_br(self, target: rawptr[BasicBlock]): """br label %""" if self is None or target is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(64) if line is None: return viperlib.snprintf(line, 64, "br label %%%s", target.Name) @@ -478,7 +478,7 @@ novirtual class IRBuilder: then_blk: rawptr[BasicBlock], else_blk: rawptr[BasicBlock]): """br i1 , label %, label %""" if self is None or cond is None or then_blk is None or else_blk is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(128) if line is None: return viperlib.snprintf(line, 128, "br i1 %s, label %%%s, label %%%s", @@ -490,7 +490,7 @@ novirtual class IRBuilder: def build_ret(self, val: rawptr[Value]): """ret """ if self is None or val is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool ty_s: str = self._type_str(val.Ty) line: str = pool.alloc(128) if line is None: return @@ -502,7 +502,7 @@ novirtual class IRBuilder: def build_ret_void(self): """ret void""" if self is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(16) if line is None: return string.strcpy(line, "ret void") @@ -524,7 +524,7 @@ novirtual class IRBuilder: is_variadic=1 时发射函数类型签名(如 i32 (i8*, ...) @printf)。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool # 判断返回类型是否为 void is_void: int = 0 @@ -609,7 +609,7 @@ novirtual class IRBuilder: 间接调用:callee_val 是函数指针 SSA 值。 """ if self is None or callee_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool is_void: int = 0 match ret_ty: @@ -662,7 +662,7 @@ novirtual class IRBuilder: """%N = bitcast to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -680,7 +680,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = sext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -695,7 +695,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = trunc to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -710,7 +710,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = zext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -725,7 +725,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = ptrtoint to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -740,7 +740,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = inttoptr to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -758,7 +758,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fpext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -773,7 +773,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptrunc to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -788,7 +788,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptosi to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -803,7 +803,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = sitofp to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -818,7 +818,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptoui to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -833,7 +833,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = uitofp to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -857,7 +857,7 @@ novirtual class IRBuilder: # 直接 GEP 会导致 llc 编译失败 if _is_ptr_type(ptr.Ty) == 0: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() elem_ty_s: str = self._type_str(elem_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -887,7 +887,7 @@ novirtual class IRBuilder: 结果类型是 elem_ty* """ if self is None or ptr is None or idx is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() array_ty_s: str = self._type_str(array_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -917,7 +917,7 @@ novirtual class IRBuilder: 结果类型是 field_ty* """ if self is None or ptr is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() struct_ty_s: str = self._type_str(struct_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -952,7 +952,7 @@ novirtual class IRBuilder: incoming_head 是 PhiIncoming 链表头,count 是入边数量。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) @@ -998,7 +998,7 @@ novirtual class IRBuilder: cases_head: rawptr[SwitchCase], case_count: int): """switch , label % [, label % ...]""" if self is None or val is None or default_blk is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool ty_s: str = self._type_str(val.Ty) # 构建主体: switch , label %default @@ -1039,7 +1039,7 @@ novirtual class IRBuilder: true_val: rawptr[Value], false_val: rawptr[Value]) -> rawptr[Value]: """%N = select i1 , , """ if self is None or cond is None or true_val is None or false_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(true_val.Ty) line: str = pool.alloc(256) @@ -1056,7 +1056,7 @@ novirtual class IRBuilder: def build_unreachable(self): """unreachable""" if self is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(16) if line is None: return string.strcpy(line, "unreachable") @@ -1072,7 +1072,7 @@ novirtual class IRBuilder: order: int) -> rawptr[Value]: """%N = atomicrmw , """ if self is None or ptr is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ptr_ty_s: str = self._type_str(ptr.Ty) val_ty_s: str = self._type_str(val.Ty) @@ -1094,7 +1094,7 @@ novirtual class IRBuilder: 返回 {, i1} 类型的 SSA 值(简化为返回 i64 表示的值对) """ if self is None or ptr is None or cmp_val is None or new_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ptr_ty_s: str = self._type_str(ptr.Ty) cmp_ty_s: str = self._type_str(cmp_val.Ty) @@ -1120,7 +1120,7 @@ novirtual class IRBuilder: """%N = va_arg , """ if self is None or va_list_ptr is None or arg_ty is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() va_list_ty_s: str = self._type_str(va_list_ptr.Ty) arg_ty_s: str = self._type_str(arg_ty) @@ -1145,7 +1145,7 @@ novirtual class IRBuilder: 简化的内联汇编调用,无参数版本。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool # 判断返回类型是否为 void is_void: int = 0 @@ -1190,7 +1190,7 @@ novirtual class IRBuilder: # IRBuilder 硬编码大小: Pool(8) + Func(8) + CurBlock(8) + Counter(4) + pad(4) + DbgLoc(8) = 40 字节 BUILDER_SIZE: t.CDefine = 40 -def new_builder(pool: memhub.MemManager*, func: rawptr[Function]) -> rawptr[IRBuilder]: +def new_builder(pool: memhub.MemBuddy*, func: rawptr[Function]) -> rawptr[IRBuilder]: """创建 IRBuilder,关联到函数 func""" ptr: rawptr[IRBuilder] = pool.alloc(BUILDER_SIZE) if ptr is None: return None @@ -1244,7 +1244,7 @@ def _emit(builder: rawptr[IRBuilder], text: str): # whole text (after the final ']'), never on an inner line; a trailing # newline has the suffix inserted before it. # ============================================================ -def _append_dbg_suffix(pool: memhub.MemManager*, text: str, loc: str) -> str: +def _append_dbg_suffix(pool: memhub.MemBuddy*, text: str, loc: str) -> str: """Return text + " , !dbg !N" (suffix after the last line for multi-line text)""" if text is None or loc is None: return text @@ -1741,7 +1741,7 @@ novirtual class PhiIncoming(GSListNode[PhiIncoming]): # PhiIncoming 硬编码大小: Next(8) + Val(8) + Block(8) = 24 字节 PHIINC_SIZE: t.CDefine = 24 -def new_phi_incoming(pool: memhub.MemManager*, +def new_phi_incoming(pool: memhub.MemBuddy*, val: rawptr[Value], block: rawptr[BasicBlock]) -> rawptr[PhiIncoming]: ptr: rawptr[PhiIncoming] = pool.alloc(PHIINC_SIZE) if ptr is None: return None @@ -1776,7 +1776,7 @@ novirtual class SwitchCase(GSListNode[SwitchCase]): # SwitchCase 硬编码大小: Next(8) + CaseVal(8) + Block(8) = 24 字节 SWCASE_SIZE: t.CDefine = 24 -def new_switch_case(pool: memhub.MemManager*, +def new_switch_case(pool: memhub.MemBuddy*, case_val: rawptr[Value], block: rawptr[BasicBlock]) -> rawptr[SwitchCase]: ptr: rawptr[SwitchCase] = pool.alloc(SWCASE_SIZE) if ptr is None: return None diff --git a/llvmlite/__function.vp b/llvmlite/__function.vp index 66ae1e4..0495ea8 100644 --- a/llvmlite/__function.vp +++ b/llvmlite/__function.vp @@ -94,7 +94,7 @@ novirtual class Function(GSListNode[Function]): # Line 硬编码大小: Next(8) + Buf(8) + Len(8) = 24 字节 LINE_SIZE: t.CDefine = 24 -def new_line(pool: memhub.MemManager*, text: str) -> rawptr[Line]: +def new_line(pool: memhub.MemBuddy*, text: str) -> rawptr[Line]: """创建一个指令行,复制 text 到新分配的缓冲区""" ptr: rawptr[Line] = pool.alloc(LINE_SIZE) if ptr is None: return None @@ -109,7 +109,7 @@ def new_line(pool: memhub.MemManager*, text: str) -> rawptr[Line]: return ptr -def _new_gslist(pool: memhub.MemManager*, list_size: sizet) -> t.CPtr: +def _new_gslist(pool: memhub.MemBuddy*, list_size: sizet) -> t.CPtr: """从 pool 分配并零初始化一个 GSList 容器(Head/Tail/Count 全零)""" gsl: t.CPtr = pool.alloc(list_size) if gsl is None: return None @@ -120,7 +120,7 @@ def _new_gslist(pool: memhub.MemManager*, list_size: sizet) -> t.CPtr: # BasicBlock 硬编码大小: Next(8) + Name(8) + Lines(8) + IsTerminated(4) = 32 字节 BLOCK_SIZE: t.CDefine = 32 -def new_basic_block(pool: memhub.MemManager*, name: str) -> rawptr[BasicBlock]: +def new_basic_block(pool: memhub.MemBuddy*, name: str) -> rawptr[BasicBlock]: """创建一个基本块""" ptr: rawptr[BasicBlock] = pool.alloc(BLOCK_SIZE) if ptr is None: return None @@ -134,7 +134,7 @@ def new_basic_block(pool: memhub.MemManager*, name: str) -> rawptr[BasicBlock]: # Param 硬编码大小: Next(8) + Ty(8) + Name(8) + Attrs(8) = 32 字节 PARAM_SIZE: t.CDefine = 32 -def new_param(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def new_param(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Param]: """创建一个函数参数""" ptr: rawptr[Param] = pool.alloc(PARAM_SIZE) @@ -149,7 +149,7 @@ def new_param(pool: memhub.MemManager*, ty: rawptr[LLVMType], # Function 硬编码大小: Next(8) + Name(8) + RetTy(8) + Params(8) + Blocks(8) + IsDeclared(4) + IsVarArg(4) + Attrs(8) + AttrGroup(8) + AttrGroupId(8) + NameLen(8) + DbgRef(8) = 88 字节 FUNC_SIZE: t.CDefine = 88 -def new_function(pool: memhub.MemManager*, name: str, +def new_function(pool: memhub.MemBuddy*, name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建一个函数""" ptr: rawptr[Function] = pool.alloc(FUNC_SIZE) @@ -260,7 +260,7 @@ def block_get_terminated(block: rawptr[BasicBlock]) -> int: return block.IsTerminated -def block_append_text(pool: memhub.MemManager*, block: rawptr[BasicBlock], +def block_append_text(pool: memhub.MemBuddy*, block: rawptr[BasicBlock], text: str): """创建指令行并追加到基本块""" if block is None or text is None: return @@ -269,7 +269,7 @@ def block_append_text(pool: memhub.MemManager*, block: rawptr[BasicBlock], block_append_line(block, line) -def block_insert_text_before_terminator(pool: memhub.MemManager*, +def block_insert_text_before_terminator(pool: memhub.MemBuddy*, block: rawptr[BasicBlock], text: str): """创建指令行并插入到基本块终止指令之前 @@ -527,7 +527,7 @@ def _assign_new_numbers(text: str, def _replace_ssa_numbers(text: str, - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, map_arr: str, max_n: int) -> str: """构建新文本,将 %N 替换为映射后的新编号 @@ -587,7 +587,7 @@ def _replace_ssa_numbers(text: str, return new_buf -def RenumberSSA(func: rawptr[Function], pool: memhub.MemManager*): +def RenumberSSA(func: rawptr[Function], pool: memhub.MemBuddy*): """重编号函数内所有数字 SSA 名,确保按文本输出顺序单调递增 在 FunctionPrint 序列化函数体之前调用。 @@ -699,7 +699,7 @@ def _peep_is_startwith(s: str, pfx: str) -> int: return 1 if string.strncmp(s, pfx, pl) == 0 else 0 -def _peep_replace_token(pool: memhub.MemManager*, +def _peep_replace_token(pool: memhub.MemBuddy*, line_buf: str, tok: str, repl: str, tlen: sizet, rlen: sizet) -> str: """将 line_buf 中独立记号 % 替换为 repl,返回新缓冲(无变化返回原指针) @@ -791,7 +791,7 @@ def _peep_last_ref_eq(sb: str, a_name: str, nl: sizet) -> int: return 0 -def _peep_alloc_name(eb: str, pool: memhub.MemManager*) -> str: +def _peep_alloc_name(eb: str, pool: memhub.MemBuddy*) -> str: """从 '%name = alloca ...' 提取 name(不含 %),失败返回 None""" if eb is None or eb[0] != '%': return None @@ -835,7 +835,7 @@ def _peep_is_alloc_of(eb: str, a_name: str, nl: sizet) -> int: return 0 -def _peephole_opt(func: rawptr[Function], pool: memhub.MemManager*): +def _peephole_opt(func: rawptr[Function], pool: memhub.MemBuddy*): """文本层本地窥孔:T1 ret zeroinitializer;T2 入口槽 store→load 转发""" if func is None or func.Blocks is None or pool is None: return @@ -1040,7 +1040,7 @@ def _peephole_opt(func: rawptr[Function], pool: memhub.MemManager*): _peep_noop_bitcast(func, pool) -def _peep_noop_bitcast(func: rawptr[Function], pool: memhub.MemManager*): +def _peep_noop_bitcast(func: rawptr[Function], pool: memhub.MemBuddy*): """T3: 消除 no-op bitcast(bitcast %x to ,两侧类型相同)。 生成端(虚调用/联合位宽转换)会产生同类型恒等 bitcast(如 @@ -1128,7 +1128,7 @@ def _peep_noop_bitcast(func: rawptr[Function], pool: memhub.MemManager*): # } # ============================================================ def FunctionPrint(buf: str, size: sizet, - func: rawptr[Function], pool: memhub.MemManager*): + func: rawptr[Function], pool: memhub.MemBuddy*): """将函数 func 序列化为 IR 文本写入 buf""" if func is None or buf is None or size == 0: return @@ -1286,7 +1286,7 @@ def FunctionPrint(buf: str, size: sizet, def _append_attr_group_def(buf: str, size: sizet, - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, func: rawptr[Function]): """输出字符串属性组定义: attributes #N = { "section"="..." }""" if func is None or func.AttrGroup is None or func.AttrGroupId <= 0: diff --git a/llvmlite/__init__.vp b/llvmlite/__init__.vp index e51000d..c8c145d 100644 --- a/llvmlite/__init__.vp +++ b/llvmlite/__init__.vp @@ -83,7 +83,7 @@ from .__verify import ( # ============================================================ # 便捷工厂: 字符串复制 # ============================================================ -def _str_dup(pool: memhub.MemManager*, src: str) -> str: +def _str_dup(pool: memhub.MemBuddy*, src: str) -> str: """从 pool 分配并复制一个 C 字符串""" if src is None: return None slen: sizet = string.strlen(src) @@ -96,7 +96,7 @@ def _str_dup(pool: memhub.MemManager*, src: str) -> str: # ============================================================ # 便捷工厂: 创建带名称的基本块 # ============================================================ -def create_block(pool: memhub.MemManager*, func: rawptr[Function], +def create_block(pool: memhub.MemBuddy*, func: rawptr[Function], name: str) -> rawptr[BasicBlock]: """创建基本块并添加到函数""" # 块名与函数参数值名冲突防护:LLVM 中块标签 "entry:" 即值 %entry, @@ -138,7 +138,7 @@ def create_block(pool: memhub.MemManager*, func: rawptr[Function], # ============================================================ # 便捷工厂: 创建整数常量值 # ============================================================ -def const_int(pool: memhub.MemManager*, bits: int, +def const_int(pool: memhub.MemBuddy*, bits: int, val: int64) -> rawptr[Value]: """创建整数常量值(自动创建类型 + 名字文本) @@ -167,12 +167,12 @@ def const_int(pool: memhub.MemManager*, bits: int, return ConstInt(pool, ty, val, name) -def const_int32(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: +def const_int32(pool: memhub.MemBuddy*, val: int64) -> rawptr[Value]: """便捷: 创建 i32 整数常量""" return const_int(pool, 32, val) -def const_int64(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: +def const_int64(pool: memhub.MemBuddy*, val: int64) -> rawptr[Value]: """便捷: 创建 i64 整数常量""" return const_int(pool, 64, val) @@ -180,7 +180,7 @@ def const_int64(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: # ============================================================ # 便捷工厂: 创建函数并添加到模块 # ============================================================ -def create_function(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_function(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建函数并添加到模块""" name_dup: str = _str_dup(pool, name) @@ -190,7 +190,7 @@ def create_function(pool: memhub.MemManager*, mod: rawptr[LLVMModule], return func -def add_param(pool: memhub.MemManager*, func: rawptr[Function], +def add_param(pool: memhub.MemBuddy*, func: rawptr[Function], ty: rawptr[LLVMType], name: str) -> rawptr[Param]: """创建参数并添加到函数""" name_dup: str = _str_dup(pool, name) @@ -203,7 +203,7 @@ def add_param(pool: memhub.MemManager*, func: rawptr[Function], # ============================================================ # 便捷工厂: 创建函数声明(declare) # ============================================================ -def create_declare(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_declare(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建函数声明(declare,无函数体)并添加到模块 @@ -224,7 +224,7 @@ def create_declare(pool: memhub.MemManager*, mod: rawptr[LLVMModule], # 生成 LLVM IR: # @.str = private unnamed_addr constant [N x i8] c"contents\00" # ============================================================ -def create_global_string(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_global_string(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, text: str) -> rawptr[GlobalVariable]: """创建字符串常量全局变量并添加到模块 @@ -312,7 +312,7 @@ def create_global_string(pool: memhub.MemManager*, mod: rawptr[LLVMModule], # ============================================================ # 便捷工厂: 创建带初始化值的整数全局变量 # ============================================================ -def create_global_int(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_global_int(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, bits: int, val: int64) -> rawptr[GlobalVariable]: """创建整数全局变量并添加到模块 @@ -351,9 +351,9 @@ def create_global_int(pool: memhub.MemManager*, mod: rawptr[LLVMModule], @t.NoVTable class LLVMModuleCore: """模块/函数/值创建核心,封装 pool 避免每次创建都传 pool""" - Pool: memhub.MemManager* + Pool: memhub.MemBuddy* - def __init__(self, pool: memhub.MemManager*): + def __init__(self, pool: memhub.MemBuddy*): self.Pool = pool # ---- 模块操作 ---- diff --git a/llvmlite/__module.vp b/llvmlite/__module.vp index ffe300e..d0863af 100644 --- a/llvmlite/__module.vp +++ b/llvmlite/__module.vp @@ -131,7 +131,7 @@ class LLVMModule: self.DataLayout = layout # ---- DI debug metadata ---- - def add_di_node(self, pool: memhub.MemManager*, text: str) -> int: + def add_di_node(self, pool: memhub.MemBuddy*, text: str) -> int: """Append a DI metadata node; return its !N id (0-based, unique), -1 on failure. text is the node body incl. !M references built from earlier ids. @@ -158,7 +158,7 @@ class LLVMModule: self.DIMetaCount += 1 return node_id - def add_named_metadata(self, pool: memhub.MemManager*, name: str, refs: str): + def add_named_metadata(self, pool: memhub.MemBuddy*, name: str, refs: str): """Register named metadata "! = !{ }"; merge into an existing entry with the same name (refs is the brace body, e.g. "!3").""" if self is None or pool is None or name is None: @@ -209,7 +209,7 @@ class LLVMModule: self.DINamedCount += 1 # ---- 命名结构体类型管理 ---- - def add_named_type(self, pool: memhub.MemManager*, ty: rawptr[LLVMType]): + def add_named_type(self, pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): """将命名结构体类型添加到模块(用于输出 %"name" = type { ... } 定义行) 非命名结构体(Name 为 None 或非 Struct 类型)会被忽略。 @@ -293,7 +293,7 @@ class LLVMModule: cur = cur.Next return 0 - def ensure_opaque_for_type(self, pool: memhub.MemManager*, + def ensure_opaque_for_type(self, pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): """为类型中的跨模块结构体引用添加 opaque 声明 @@ -304,7 +304,7 @@ class LLVMModule: # ---- 打印 ---- def PrintModule(self, buf: str, size: sizet, - pool: memhub.MemManager*, mode: int): + pool: memhub.MemBuddy*, mode: int): """将模块序列化为 .ll 文本写入 buf""" if self is None or buf is None or size == 0: return @@ -514,7 +514,7 @@ class LLVMModule: # ============================================================ # 工厂函数 # ============================================================ -def new_module(pool: memhub.MemManager*, name: str) -> rawptr[LLVMModule]: +def new_module(pool: memhub.MemBuddy*, name: str) -> rawptr[LLVMModule]: """创建一个模块""" # 硬编码 144 字节:18 字段 * 8 字节(无 vtable,@t.NoVTable) ptr: rawptr[LLVMModule] = pool.alloc(144) @@ -553,7 +553,7 @@ DI_NODE_SIZE: t.CDefine = 16 # DINamedMeta hardcoded size: Next(8) + Name(8) + Refs(8) = 24 bytes DI_NAMED_SIZE: t.CDefine = 24 -def new_global_variable(pool: memhub.MemManager*, +def new_global_variable(pool: memhub.MemBuddy*, name: str, ty: rawptr[LLVMType]) -> rawptr[GlobalVariable]: """创建一个全局变量""" ptr: rawptr[GlobalVariable] = pool.alloc(GV_SIZE) @@ -599,13 +599,13 @@ def module_set_datalayout(mod: rawptr[LLVMModule], layout: str): # ============================================================ # DI debug metadata # ============================================================ -def module_add_di_node(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_add_di_node(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, text: str) -> int: """Append a DI metadata node; return its !N id (-1 on failure)""" return mod.add_di_node(pool, text) -def module_add_named_metadata(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_add_named_metadata(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, name: str, refs: str): """Register named metadata "! = !{ }" """ mod.add_named_metadata(pool, name, refs) @@ -649,12 +649,12 @@ def _is_opaque_struct(ty: rawptr[LLVMType]) -> int: return 0 -def module_add_named_type(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_add_named_type(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): mod.add_named_type(pool, ty) -def module_set_named_type_packed(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_set_named_type_packed(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, ty: rawptr[LLVMType], is_packed: int): """按名称设置命名结构体的 packed 标记(输出 %"name" = type <{...}>)。 @@ -692,7 +692,7 @@ def _is_type_defined_in_module(mod: rawptr[LLVMModule], name: str) -> int: return mod._is_type_defined_in_module(name) -def _scan_type_for_cross_module_refs(pool: memhub.MemManager*, +def _scan_type_for_cross_module_refs(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], ty: rawptr[LLVMType], depth: int = 0): @@ -757,7 +757,7 @@ def _scan_type_for_cross_module_refs(pool: memhub.MemManager*, def module_ensure_opaque_for_type(mod: rawptr[LLVMModule], - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): mod.ensure_opaque_for_type(pool, ty) @@ -810,7 +810,7 @@ IR_DUMP_CHAIN_LIMIT: t.CDefine = 100000 # mode: OUTPUT_FULL=完整, OUTPUT_STUB=仅声明, OUTPUT_TEXT=仅代码 # ============================================================ def LLVMModulePrint(buf: str, size: sizet, - mod: rawptr[LLVMModule], pool: memhub.MemManager*, + mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, mode: int): mod.PrintModule(buf, size, pool, mode) @@ -819,7 +819,7 @@ def LLVMModulePrint(buf: str, size: sizet, # 全局变量打印 # ============================================================ def _print_global(buf: str, size: sizet, - gv: rawptr[GlobalVariable], pool: memhub.MemManager*): + gv: rawptr[GlobalVariable], pool: memhub.MemBuddy*): """打印单个全局变量: @ = [linkage] [unnamed_addr] [constant] """ if gv is None: return @@ -883,7 +883,7 @@ def _print_global(buf: str, size: sizet, # _print_global_stub - 打印全局变量的声明形式(external global,无初值) # ============================================================ def _print_global_stub(buf: str, size: sizet, - gv: rawptr[GlobalVariable], pool: memhub.MemManager*): + gv: rawptr[GlobalVariable], pool: memhub.MemBuddy*): """打印全局变量声明: @ = external global """ if gv is None: return diff --git a/llvmlite/__types.vp b/llvmlite/__types.vp index 6117cbd..f22e75c 100644 --- a/llvmlite/__types.vp +++ b/llvmlite/__types.vp @@ -87,7 +87,7 @@ def _TypeSizeGuard() -> sizet: return sz -def _new_type(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def _new_type(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """从 mpool 分配一个零初始化的 LLVMType""" sz_nt: sizet = _TypeSizeGuard() ptr: rawptr[LLVMType] = pool.alloc(sz_nt) @@ -98,42 +98,42 @@ def _new_type(pool: memhub.MemManager*) -> rawptr[LLVMType]: # ============================================================ # 类型工厂函数 # ============================================================ -def Int1(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int1(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(1)) return ptr -def Int8(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int8(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(8)) return ptr -def Int16(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int16(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(16)) return ptr -def Int32(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int32(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(32)) return ptr -def Int64(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int64(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(64)) return ptr -def Ptr(pool: memhub.MemManager*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType]: +def Ptr(pool: memhub.MemBuddy*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType]: """创建指针类型 Ptr(pointee) LLVM IR 中 **不允许 void* 指针**("pointers to void are invalid"), @@ -158,7 +158,7 @@ def Ptr(pool: memhub.MemManager*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType] return ptr -def Func(pool: memhub.MemManager*, ret: rawptr[LLVMType], +def Func(pool: memhub.MemBuddy*, ret: rawptr[LLVMType], params: rawptr[ParamNode], count: int) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -166,14 +166,14 @@ def Func(pool: memhub.MemManager*, ret: rawptr[LLVMType], return ptr -def Void(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Void(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Void()) return ptr -def Array(pool: memhub.MemManager*, elem_ty: rawptr[LLVMType], +def Array(pool: memhub.MemBuddy*, elem_ty: rawptr[LLVMType], count: int) -> rawptr[LLVMType]: """创建数组类型 [count x elem_ty]""" ptr: rawptr[LLVMType] = _new_type(pool) @@ -182,7 +182,7 @@ def Array(pool: memhub.MemManager*, elem_ty: rawptr[LLVMType], return ptr -def Struct(pool: memhub.MemManager*, fields: rawptr[ParamNode], +def Struct(pool: memhub.MemBuddy*, fields: rawptr[ParamNode], fcount: int, name: str) -> rawptr[LLVMType]: """创建结构体类型 {ty1, ty2, ...} @@ -196,7 +196,7 @@ def Struct(pool: memhub.MemManager*, fields: rawptr[ParamNode], return ptr -def Half(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Half(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建半精度浮点类型 half (16-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -204,7 +204,7 @@ def Half(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Float(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Float(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建单精度浮点类型 float (32-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -212,7 +212,7 @@ def Float(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Double(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Double(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建双精度浮点类型 double (64-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -220,7 +220,7 @@ def Double(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def FP128(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def FP128(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建四精度浮点类型 fp128 (128-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -228,7 +228,7 @@ def FP128(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Label(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Label(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建标签类型 label""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -242,7 +242,7 @@ def Label(pool: memhub.MemManager*) -> rawptr[LLVMType]: # ParamNode 硬编码大小: Next(8) + Ty(8) = 16 字节 PNODE_SIZE: t.CDefine = 16 -def new_param_node(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[ParamNode]: +def new_param_node(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[ParamNode]: """创建一个参数节点,Ty 设为给定类型指针""" ptr: rawptr[ParamNode] = pool.alloc(PNODE_SIZE) if ptr is None: return None @@ -311,9 +311,9 @@ def paramnode_set_next(node: rawptr[ParamNode], nxt: rawptr[ParamNode]): @t.NoVTable class LLVMTypeCore: """类型创建核心,封装 pool 避免每次创建类型都传 pool""" - Pool: memhub.MemManager* + Pool: memhub.MemBuddy* - def __init__(self, pool: memhub.MemManager*): + def __init__(self, pool: memhub.MemBuddy*): self.Pool = pool def Int1(self) -> rawptr[LLVMType]: @@ -392,7 +392,7 @@ class LLVMTypeCore: # pool 用于复杂类型(Array/Struct/Func)递归打印子类型时分配临时缓冲区。 # ============================================================ def TypePrint(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*): + ty: rawptr[LLVMType], pool: memhub.MemBuddy*): """将类型 ty 序列化为 IR 文本写入 buf(容量 size) pool 用于递归打印子类型时分配临时缓冲区。 @@ -406,7 +406,7 @@ def TypePrint(buf: str, size: sizet, TYPEPRINT_MAX_DEPTH: t.CDefine = 100 def _TypePrintDepth(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*, + ty: rawptr[LLVMType], pool: memhub.MemBuddy*, depth: int): """带递归深度上限的 TypePrint 内部实现""" if ty is None or buf is None or size == 0: @@ -551,7 +551,7 @@ def _strappend(dst: str, dst_size: sizet, src: str): # 供 TypePrint(匿名结构体)和 PrintStructDefinition(命名结构体定义行)复用 # ============================================================ def _print_struct_body(buf: str, size: sizet, - fields: rawptr[ParamNode], pool: memhub.MemManager*, + fields: rawptr[ParamNode], pool: memhub.MemBuddy*, depth: int = 0, packed: int = 0): """打印 {ty1, ty2, ...} 到 buf(追加模式,不覆盖已有内容) @@ -600,7 +600,7 @@ def _print_struct_body(buf: str, size: sizet, # 供 LLVMModulePrint 在全局变量/函数之前输出类型定义 # ============================================================ def PrintStructDefinition(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*, + ty: rawptr[LLVMType], pool: memhub.MemBuddy*, packed: int = 0): """打印命名结构体类型定义行 %"name" = type { ty1, ty2, ... } @@ -681,13 +681,13 @@ def get_struct_fcount(ty: rawptr[LLVMType]) -> int: # ============================================================ DEEPCOPY_MAX_DEPTH: t.CDefine = 64 -def DeepCopyType(pool: memhub.MemManager*, +def DeepCopyType(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[LLVMType]: """深拷贝 LLVMType 到 stdlib 区(深度限制防自引用递归),失败返回 None""" return _DeepCopyDepth(pool, ty, 0) -def _DeepCopyDepth(pool: memhub.MemManager*, +def _DeepCopyDepth(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], depth: int) -> rawptr[LLVMType]: """带深度上限的深拷贝实现 @@ -750,7 +750,7 @@ def _DeepCopyDepth(pool: memhub.MemManager*, return new_ty -def _DeepCopyParamChain(pool: memhub.MemManager*, +def _DeepCopyParamChain(pool: memhub.MemBuddy*, head: rawptr[ParamNode], depth: int) -> rawptr[ParamNode]: """深拷贝 ParamNode 链表到 stdlib""" if head is None: @@ -778,7 +778,7 @@ def _DeepCopyParamChain(pool: memhub.MemManager*, return first -def _DeepCopyStr(pool: memhub.MemManager*, s: str) -> str: +def _DeepCopyStr(pool: memhub.MemBuddy*, s: str) -> str: """深拷贝字符串到 stdlib""" if s is None: return None diff --git a/llvmlite/__values.vp b/llvmlite/__values.vp index 47871e6..4206429 100644 --- a/llvmlite/__values.vp +++ b/llvmlite/__values.vp @@ -32,7 +32,7 @@ class Value(GSListNode[Value]): # Value 硬编码大小: Next(8) + Ty(8) + Name(8) + IsConst(4) + IntVal(8) + FloatVal(8) = 48 字节 VALUE_SIZE: t.CDefine = 48 -def new_value(pool: memhub.MemManager*) -> rawptr[Value]: +def new_value(pool: memhub.MemBuddy*) -> rawptr[Value]: """从 mpool 分配一个零初始化的 Value""" ptr: rawptr[Value] = pool.alloc(VALUE_SIZE) if ptr: @@ -40,7 +40,7 @@ def new_value(pool: memhub.MemManager*) -> rawptr[Value]: return ptr -def ConstInt(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstInt(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], val: int64, name: str) -> rawptr[Value]: """创建整数常量值 @@ -58,7 +58,7 @@ def ConstInt(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def ConstNull(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstNull(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Value]: """创建 null 指针常量""" v: rawptr[Value] = new_value(pool) @@ -70,7 +70,7 @@ def ConstNull(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def ConstZero(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[Value]: +def ConstZero(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[Value]: """创建 zeroinitializer 常量(零初始化聚合类型:结构体/数组)""" v: rawptr[Value] = new_value(pool) if v is None: return None @@ -81,7 +81,7 @@ def ConstZero(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[Value]: return v -def ConstFloat(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstFloat(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], val: t.CDouble) -> rawptr[Value]: """创建浮点常量值 @@ -118,7 +118,7 @@ def ConstFloat(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def SSAValue(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def SSAValue(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Value]: """创建 SSA 临时值 @@ -143,7 +143,7 @@ def SSAValue(pool: memhub.MemManager*, ty: rawptr[LLVMType], # SSAValue(i32, "%0") -> "i32 %0" # ============================================================ def ValuePrint(buf: str, size: sizet, - val: rawptr[Value], pool: memhub.MemManager*): + val: rawptr[Value], pool: memhub.MemBuddy*): """将值 val 序列化为 IR 文本写入 buf 格式: diff --git a/llvmlite/__verify.vp b/llvmlite/__verify.vp index 011de19..cf6bbc4 100644 --- a/llvmlite/__verify.vp +++ b/llvmlite/__verify.vp @@ -50,7 +50,7 @@ class VerifyResult: # ============================================================ # 辅助函数 # ============================================================ -def _new_verify_result(pool: memhub.MemManager*, +def _new_verify_result(pool: memhub.MemBuddy*, buf_size: sizet) -> rawptr[VerifyResult]: """创建验证结果对象""" ptr: rawptr[VerifyResult] = pool.alloc(VerifyResult.__sizeof__()) @@ -122,7 +122,7 @@ def _append_cstr(dst: str, dst_size: sizet, src: str): # ============================================================ # SSA 名表操作 # ============================================================ -def _new_name_table(pool: memhub.MemManager*) -> rawptr[GSList[NameEntry]]: +def _new_name_table(pool: memhub.MemBuddy*) -> rawptr[GSList[NameEntry]]: """创建空名表""" gsl: rawptr[GSList[NameEntry]] = pool.alloc(24) # GSList: Head+Tail+Count if gsl is None: return None @@ -134,7 +134,7 @@ def _new_name_table(pool: memhub.MemManager*) -> rawptr[GSList[NameEntry]]: NENTRY_SIZE: t.CDefine = 16 def _name_table_add(table: rawptr[GSList[NameEntry]], - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, name: str) -> int: """添加名到表。返回 1=重复, 0=成功添加""" if table is None or name is None: return 0 @@ -177,7 +177,7 @@ def _is_char_name(ch: char) -> int: return 0 -def _extract_def_name(pool: memhub.MemManager*, +def _extract_def_name(pool: memhub.MemBuddy*, text: str) -> str: """从定义行提取被定义的 SSA 名。 @@ -292,7 +292,7 @@ def _str_matches_at(text: str, start: int, length: int, # ============================================================ # 主验证函数 # ============================================================ -def verify_function(pool: memhub.MemManager*, +def verify_function(pool: memhub.MemBuddy*, func: rawptr[Function], result: rawptr[VerifyResult]) -> int: """验证函数的 SSA 正确性。 @@ -415,7 +415,7 @@ def verify_function(pool: memhub.MemManager*, return result.ErrorCount -def verify_module(pool: memhub.MemManager*, mod: rawptr[LLVMModule], result: rawptr[VerifyResult]) -> int: +def verify_module(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], result: rawptr[VerifyResult]) -> int: """验证模块中所有函数的 SSA 正确性。 返回: 错误总数 diff --git a/mlirlite/__builder.vp b/mlirlite/__builder.vp index 45ba8fc..98624c2 100644 --- a/mlirlite/__builder.vp +++ b/mlirlite/__builder.vp @@ -29,7 +29,7 @@ from .__function import Function, BasicBlock, block_append_text, block_set_termi # (方法以实例方法实现,无虚表;文件末尾的同名顶层函数为一行委托)。 # ============================================================ novirtual class IRBuilder: - Pool: memhub.MemManager* # 内存池 + Pool: memhub.MemBuddy* # 内存池 Func: rawptr[Function] # 所属函数 CurBlock: rawptr[BasicBlock] # 当前插入点 Counter: int # SSA 名计数器 @@ -39,7 +39,7 @@ novirtual class IRBuilder: # ============================================================ def _alloc_ssa_name(self) -> str: """分配一个 SSA 名字符串 "%N" 并递增计数器""" - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool buf: str = pool.alloc(16) if buf is None: return None viperlib.snprintf(buf, 16, "%%%d", self.Counter) @@ -53,7 +53,7 @@ novirtual class IRBuilder: 注意:复杂结构体类型(如 13 方法的虚表 !llvm.struct<(...)>)可能超过 64 字节,必须使用足够大的缓冲区,否则 '>' 会被截断导致语法错误。 """ - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool buf: str = pool.alloc(512) if buf is None: return None buf[0] = '\0' @@ -90,7 +90,7 @@ novirtual class IRBuilder: lhs: rawptr[Value], rhs: rawptr[Value]) -> rawptr[Value]: """二元运算通用实现""" if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) line: str = pool.alloc(256) @@ -138,7 +138,7 @@ novirtual class IRBuilder: 因此本函数不设默认参数;需要显式对齐请用 build_alloca_aligned。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) line: str = pool.alloc(128) @@ -163,7 +163,7 @@ novirtual class IRBuilder: align 不设默认值(TPC 并行编译时 include 默认参数不预注册),调用方必须显式传入。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) line: str = pool.alloc(128) @@ -187,7 +187,7 @@ novirtual class IRBuilder: 导致的支配性违规(Instruction does not dominate all uses)。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool func: rawptr[Function] = self.Func if func is None or func.Blocks is None: return self.build_alloca(ty) @@ -225,7 +225,7 @@ novirtual class IRBuilder: 优化器提升/合并重复访问的场景使用。 """ if self is None or ptr is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -247,7 +247,7 @@ novirtual class IRBuilder: 限定符(`store volatile i32 %v, i32* %p`)。 """ if self is None or val is None or ptr is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool val_ty_s: str = self._type_str(val.Ty) ptr_ty_s: str = self._type_str(ptr.Ty) line: str = pool.alloc(256) @@ -376,7 +376,7 @@ novirtual class IRBuilder: def build_fneg(self, val: rawptr[Value]) -> rawptr[Value]: """%N = fneg """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(val.Ty) line: str = pool.alloc(128) @@ -396,7 +396,7 @@ novirtual class IRBuilder: 返回类型为 i1 的 SSA 值 """ if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) pred_s: str = _icmp_pred_str(pred) @@ -420,7 +420,7 @@ novirtual class IRBuilder: 返回类型为 i1 的 SSA 值 """ if self is None or lhs is None or rhs is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(lhs.Ty) pred_s: str = _fcmp_pred_str(pred) @@ -443,7 +443,7 @@ novirtual class IRBuilder: def build_br(self, target: rawptr[BasicBlock]): """br label %""" if self is None or target is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(64) if line is None: return viperlib.snprintf(line, 64, "br label %%%s", target.Name) @@ -455,7 +455,7 @@ novirtual class IRBuilder: then_blk: rawptr[BasicBlock], else_blk: rawptr[BasicBlock]): """br i1 , label %, label %""" if self is None or cond is None or then_blk is None or else_blk is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(128) if line is None: return viperlib.snprintf(line, 128, "br i1 %s, label %%%s, label %%%s", @@ -467,7 +467,7 @@ novirtual class IRBuilder: def build_ret(self, val: rawptr[Value]): """ret """ if self is None or val is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool ty_s: str = self._type_str(val.Ty) line: str = pool.alloc(128) if line is None: return @@ -479,7 +479,7 @@ novirtual class IRBuilder: def build_ret_void(self): """ret void""" if self is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(16) if line is None: return string.strcpy(line, "ret void") @@ -501,7 +501,7 @@ novirtual class IRBuilder: is_variadic=1 时发射函数类型签名(如 i32 (i8*, ...) @printf)。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool # 判断返回类型是否为 void is_void: int = 0 @@ -586,7 +586,7 @@ novirtual class IRBuilder: 间接调用:callee_val 是函数指针 SSA 值。 """ if self is None or callee_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool is_void: int = 0 match ret_ty: @@ -639,7 +639,7 @@ novirtual class IRBuilder: """%N = bitcast to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -657,7 +657,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = sext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -672,7 +672,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = trunc to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -687,7 +687,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = zext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -702,7 +702,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = ptrtoint to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -717,7 +717,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = inttoptr to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -735,7 +735,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fpext to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -750,7 +750,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptrunc to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -765,7 +765,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptosi to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -780,7 +780,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = sitofp to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -795,7 +795,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = fptoui to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -810,7 +810,7 @@ novirtual class IRBuilder: to_ty: rawptr[LLVMType]) -> rawptr[Value]: """%N = uitofp to """ if self is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() from_ty_s: str = self._type_str(val.Ty) to_ty_s: str = self._type_str(to_ty) @@ -834,7 +834,7 @@ novirtual class IRBuilder: # 直接 GEP 会导致 llc 编译失败 if _is_ptr_type(ptr.Ty) == 0: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() elem_ty_s: str = self._type_str(elem_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -864,7 +864,7 @@ novirtual class IRBuilder: 结果类型是 elem_ty* """ if self is None or ptr is None or idx is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() array_ty_s: str = self._type_str(array_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -894,7 +894,7 @@ novirtual class IRBuilder: 结果类型是 field_ty* """ if self is None or ptr is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() struct_ty_s: str = self._type_str(struct_ty) ptr_ty_s: str = self._type_str(ptr.Ty) @@ -929,7 +929,7 @@ novirtual class IRBuilder: incoming_head 是 PhiIncoming 链表头,count 是入边数量。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(ty) @@ -975,7 +975,7 @@ novirtual class IRBuilder: cases_head: rawptr[SwitchCase], case_count: int): """switch , label % [, label % ...]""" if self is None or val is None or default_blk is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool ty_s: str = self._type_str(val.Ty) # 构建主体: switch , label %default @@ -1016,7 +1016,7 @@ novirtual class IRBuilder: true_val: rawptr[Value], false_val: rawptr[Value]) -> rawptr[Value]: """%N = select i1 , , """ if self is None or cond is None or true_val is None or false_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ty_s: str = self._type_str(true_val.Ty) line: str = pool.alloc(256) @@ -1033,7 +1033,7 @@ novirtual class IRBuilder: def build_unreachable(self): """unreachable""" if self is None: return - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool line: str = pool.alloc(16) if line is None: return string.strcpy(line, "unreachable") @@ -1049,7 +1049,7 @@ novirtual class IRBuilder: order: int) -> rawptr[Value]: """%N = atomicrmw , """ if self is None or ptr is None or val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ptr_ty_s: str = self._type_str(ptr.Ty) val_ty_s: str = self._type_str(val.Ty) @@ -1071,7 +1071,7 @@ novirtual class IRBuilder: 返回 {, i1} 类型的 SSA 值(简化为返回 i64 表示的值对) """ if self is None or ptr is None or cmp_val is None or new_val is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() ptr_ty_s: str = self._type_str(ptr.Ty) cmp_ty_s: str = self._type_str(cmp_val.Ty) @@ -1097,7 +1097,7 @@ novirtual class IRBuilder: """%N = va_arg , """ if self is None or va_list_ptr is None or arg_ty is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool name: str = self._alloc_ssa_name() va_list_ty_s: str = self._type_str(va_list_ptr.Ty) arg_ty_s: str = self._type_str(arg_ty) @@ -1122,7 +1122,7 @@ novirtual class IRBuilder: 简化的内联汇编调用,无参数版本。 """ if self is None: return None - pool: memhub.MemManager* = self.Pool + pool: memhub.MemBuddy* = self.Pool # 判断返回类型是否为 void is_void: int = 0 @@ -1167,7 +1167,7 @@ novirtual class IRBuilder: # IRBuilder 硬编码大小: Pool(8) + Func(8) + CurBlock(8) + Counter(4) = 32 字节 BUILDER_SIZE: t.CDefine = 32 -def new_builder(pool: memhub.MemManager*, func: rawptr[Function]) -> rawptr[IRBuilder]: +def new_builder(pool: memhub.MemBuddy*, func: rawptr[Function]) -> rawptr[IRBuilder]: """创建 IRBuilder,关联到函数 func""" ptr: rawptr[IRBuilder] = pool.alloc(BUILDER_SIZE) if ptr is None: return None @@ -1677,7 +1677,7 @@ novirtual class PhiIncoming(GSListNode[PhiIncoming]): # PhiIncoming 硬编码大小: Next(8) + Val(8) + Block(8) = 24 字节 PHIINC_SIZE: t.CDefine = 24 -def new_phi_incoming(pool: memhub.MemManager*, +def new_phi_incoming(pool: memhub.MemBuddy*, val: rawptr[Value], block: rawptr[BasicBlock]) -> rawptr[PhiIncoming]: ptr: rawptr[PhiIncoming] = pool.alloc(PHIINC_SIZE) if ptr is None: return None @@ -1712,7 +1712,7 @@ novirtual class SwitchCase(GSListNode[SwitchCase]): # SwitchCase 硬编码大小: Next(8) + CaseVal(8) + Block(8) = 24 字节 SWCASE_SIZE: t.CDefine = 24 -def new_switch_case(pool: memhub.MemManager*, +def new_switch_case(pool: memhub.MemBuddy*, case_val: rawptr[Value], block: rawptr[BasicBlock]) -> rawptr[SwitchCase]: ptr: rawptr[SwitchCase] = pool.alloc(SWCASE_SIZE) if ptr is None: return None diff --git a/mlirlite/__function.vp b/mlirlite/__function.vp index d8b8ed2..fbdc471 100644 --- a/mlirlite/__function.vp +++ b/mlirlite/__function.vp @@ -96,7 +96,7 @@ novirtual class Function(GSListNode[Function]): # Line 硬编码大小: Next(8) + Buf(8) + Len(8) = 24 字节 LINE_SIZE: t.CDefine = 24 -def new_line(pool: memhub.MemManager*, text: str) -> rawptr[Line]: +def new_line(pool: memhub.MemBuddy*, text: str) -> rawptr[Line]: """创建一个指令行,复制 text 到新分配的缓冲区""" ptr: rawptr[Line] = pool.alloc(LINE_SIZE) if ptr is None: return None @@ -111,7 +111,7 @@ def new_line(pool: memhub.MemManager*, text: str) -> rawptr[Line]: return ptr -def _new_gslist(pool: memhub.MemManager*, list_size: sizet) -> t.CPtr: +def _new_gslist(pool: memhub.MemBuddy*, list_size: sizet) -> t.CPtr: """从 pool 分配并零初始化一个 GSList 容器(Head/Tail/Count 全零)""" gsl: t.CPtr = pool.alloc(list_size) if gsl is None: return None @@ -122,7 +122,7 @@ def _new_gslist(pool: memhub.MemManager*, list_size: sizet) -> t.CPtr: # BasicBlock 硬编码大小: Next(8) + Name(8) + Lines(8) + IsTerminated(4) = 32 字节 BLOCK_SIZE: t.CDefine = 32 -def new_basic_block(pool: memhub.MemManager*, name: str) -> rawptr[BasicBlock]: +def new_basic_block(pool: memhub.MemBuddy*, name: str) -> rawptr[BasicBlock]: """创建一个基本块""" ptr: rawptr[BasicBlock] = pool.alloc(BLOCK_SIZE) if ptr is None: return None @@ -136,7 +136,7 @@ def new_basic_block(pool: memhub.MemManager*, name: str) -> rawptr[BasicBlock]: # Param 硬编码大小: Next(8) + Ty(8) + Name(8) + Attrs(8) = 32 字节 PARAM_SIZE: t.CDefine = 32 -def new_param(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def new_param(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Param]: """创建一个函数参数""" ptr: rawptr[Param] = pool.alloc(PARAM_SIZE) @@ -151,7 +151,7 @@ def new_param(pool: memhub.MemManager*, ty: rawptr[LLVMType], # Function 硬编码大小: Next(8) + Name(8) + RetTy(8) + Params(8) + Blocks(8) + IsDeclared(4) + IsVarArg(4) + Attrs(8) + AttrGroup(8) + AttrGroupId(8) + NameLen(8) = 80 字节 FUNC_SIZE: t.CDefine = 80 -def new_function(pool: memhub.MemManager*, name: str, +def new_function(pool: memhub.MemBuddy*, name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建一个函数""" ptr: rawptr[Function] = pool.alloc(FUNC_SIZE) @@ -261,7 +261,7 @@ def block_get_terminated(block: rawptr[BasicBlock]) -> int: return block.IsTerminated -def block_append_text(pool: memhub.MemManager*, block: rawptr[BasicBlock], +def block_append_text(pool: memhub.MemBuddy*, block: rawptr[BasicBlock], text: str): """创建指令行并追加到基本块""" if block is None or text is None: return @@ -270,7 +270,7 @@ def block_append_text(pool: memhub.MemManager*, block: rawptr[BasicBlock], block_append_line(block, line) -def block_insert_text_before_terminator(pool: memhub.MemManager*, +def block_insert_text_before_terminator(pool: memhub.MemBuddy*, block: rawptr[BasicBlock], text: str): """创建指令行并插入到基本块终止指令之前 @@ -539,7 +539,7 @@ def _assign_new_numbers(text: str, def _replace_ssa_numbers(text: str, - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, map_arr: str, max_n: int) -> str: """构建新文本,将 %N 替换为映射后的新编号 @@ -599,7 +599,7 @@ def _replace_ssa_numbers(text: str, return new_buf -def RenumberSSA(func: rawptr[Function], pool: memhub.MemManager*): +def RenumberSSA(func: rawptr[Function], pool: memhub.MemBuddy*): """重编号函数内所有数字 SSA 名,确保按文本输出顺序单调递增 在 FunctionPrint 序列化函数体之前调用。 @@ -711,7 +711,7 @@ def _peep_is_startwith(s: str, pfx: str) -> int: return 1 if string.strncmp(s, pfx, pl) == 0 else 0 -def _peep_replace_token(pool: memhub.MemManager*, +def _peep_replace_token(pool: memhub.MemBuddy*, line_buf: str, tok: str, repl: str, tlen: sizet, rlen: sizet) -> str: """将 line_buf 中独立记号 % 替换为 repl,返回新缓冲(无变化返回原指针) @@ -803,7 +803,7 @@ def _peep_last_ref_eq(sb: str, a_name: str, nl: sizet) -> int: return 0 -def _peep_alloc_name(eb: str, pool: memhub.MemManager*) -> str: +def _peep_alloc_name(eb: str, pool: memhub.MemBuddy*) -> str: """从 '%name = alloca ...' 提取 name(不含 %),失败返回 None""" if eb is None or eb[0] != '%': return None @@ -847,7 +847,7 @@ def _peep_is_alloc_of(eb: str, a_name: str, nl: sizet) -> int: return 0 -def _peephole_opt(func: rawptr[Function], pool: memhub.MemManager*): +def _peephole_opt(func: rawptr[Function], pool: memhub.MemBuddy*): """文本层本地窥孔:T1 ret zeroinitializer;T2 入口槽 store→load 转发""" if func is None or func.Blocks is None or pool is None: return @@ -1052,7 +1052,7 @@ def _peephole_opt(func: rawptr[Function], pool: memhub.MemManager*): _peep_noop_bitcast(func, pool) -def _peep_noop_bitcast(func: rawptr[Function], pool: memhub.MemManager*): +def _peep_noop_bitcast(func: rawptr[Function], pool: memhub.MemBuddy*): """T3: 消除 no-op bitcast(bitcast %x to ,两侧类型相同)。 生成端(虚调用/联合位宽转换)会产生同类型恒等 bitcast(如 @@ -1150,7 +1150,7 @@ MLIR_ALIAS_CAP: t.CDefine = 512 # 渲染阶段:1=扫描(登记) 2=发射(写文本) _MLIR_Pass: int = 0 -_MLIR_Pool: memhub.MemManager* = None +_MLIR_Pool: memhub.MemBuddy* = None _MLIR_Func: rawptr[Function] = None _MLIR_SrcBlk: rawptr[BasicBlock] = None @@ -1213,7 +1213,7 @@ def _mlir_dup(s: str) -> str: return b -def _MlirTablesInit(pool: memhub.MemManager*): +def _MlirTablesInit(pool: memhub.MemBuddy*): """初始化两个表和解析用 scratch 缓冲""" global _MLIR_Pool, _MLIR_Pass, _MLIR_ConstTy, _MLIR_ConstVal, _MLIR_ConstName, _MLIR_ConstCount, _MLIR_AliasFrom, _MLIR_AliasTo, _MLIR_AliasCount, _SC_Op, _SC_Tb, _SC_Ty, _SC_Ty2, _SC_V1, _SC_V2, _SC_V3, _SC_Callee, _SC_Args, _SC_ArgTs, _SC_IdxV, _SC_IdxT, _SC_Mt, _SC_Tmp, _SC_Tmp2, _SC_P1, _SC_P2, _SC_B1, _SC_B2, _SC_Buf if pool is None: @@ -3129,7 +3129,7 @@ def _MlirRenderLine(text: str, out: str, outsz: sizet): # 函数签名与函数体 # ============================================================ def _MlirFuncSig(buf: str, size: sizet, - func: rawptr[Function], pool: memhub.MemManager*): + func: rawptr[Function], pool: memhub.MemBuddy*): """llvm.func @name(%a: i32, %b: i32) -> i32(void 返回省略 -> ty)""" _append_cstr(buf, size, "llvm.func @") if func.Name is not None: @@ -3187,7 +3187,7 @@ def _MlirFuncSig(buf: str, size: sizet, def FunctionPrint(buf: str, size: sizet, - func: rawptr[Function], pool: memhub.MemManager*): + func: rawptr[Function], pool: memhub.MemBuddy*): """将函数 func 序列化为 MLIR(llvm 方言) 文本**追加**写入 buf 注意:与 llvmlite 版一致,本函数为追加写(供模块打印连续拼接多个函数), diff --git a/mlirlite/__init__.vp b/mlirlite/__init__.vp index 6bd6089..8a88bbe 100644 --- a/mlirlite/__init__.vp +++ b/mlirlite/__init__.vp @@ -91,7 +91,7 @@ from .__verify import ( # ============================================================ # 便捷工厂: 字符串复制 # ============================================================ -def _str_dup(pool: memhub.MemManager*, src: str) -> str: +def _str_dup(pool: memhub.MemBuddy*, src: str) -> str: """从 pool 分配并复制一个 C 字符串""" if src is None: return None slen: sizet = string.strlen(src) @@ -104,7 +104,7 @@ def _str_dup(pool: memhub.MemManager*, src: str) -> str: # ============================================================ # 便捷工厂: 创建带名称的基本块 # ============================================================ -def create_block(pool: memhub.MemManager*, func: rawptr[Function], +def create_block(pool: memhub.MemBuddy*, func: rawptr[Function], name: str) -> rawptr[BasicBlock]: """创建基本块并添加到函数""" # 块名与函数参数值名冲突防护:LLVM 中块标签 "entry:" 即值 %entry, @@ -146,7 +146,7 @@ def create_block(pool: memhub.MemManager*, func: rawptr[Function], # ============================================================ # 便捷工厂: 创建整数常量值 # ============================================================ -def const_int(pool: memhub.MemManager*, bits: int, +def const_int(pool: memhub.MemBuddy*, bits: int, val: int64) -> rawptr[Value]: """创建整数常量值(自动创建类型 + 名字文本) @@ -175,12 +175,12 @@ def const_int(pool: memhub.MemManager*, bits: int, return ConstInt(pool, ty, val, name) -def const_int32(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: +def const_int32(pool: memhub.MemBuddy*, val: int64) -> rawptr[Value]: """便捷: 创建 i32 整数常量""" return const_int(pool, 32, val) -def const_int64(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: +def const_int64(pool: memhub.MemBuddy*, val: int64) -> rawptr[Value]: """便捷: 创建 i64 整数常量""" return const_int(pool, 64, val) @@ -188,7 +188,7 @@ def const_int64(pool: memhub.MemManager*, val: int64) -> rawptr[Value]: # ============================================================ # 便捷工厂: 创建函数并添加到模块 # ============================================================ -def create_function(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_function(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建函数并添加到模块""" name_dup: str = _str_dup(pool, name) @@ -198,7 +198,7 @@ def create_function(pool: memhub.MemManager*, mod: rawptr[LLVMModule], return func -def add_param(pool: memhub.MemManager*, func: rawptr[Function], +def add_param(pool: memhub.MemBuddy*, func: rawptr[Function], ty: rawptr[LLVMType], name: str) -> rawptr[Param]: """创建参数并添加到函数""" name_dup: str = _str_dup(pool, name) @@ -211,7 +211,7 @@ def add_param(pool: memhub.MemManager*, func: rawptr[Function], # ============================================================ # 便捷工厂: 创建函数声明(declare) # ============================================================ -def create_declare(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_declare(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, ret_ty: rawptr[LLVMType]) -> rawptr[Function]: """创建函数声明(declare,无函数体)并添加到模块 @@ -233,7 +233,7 @@ def create_declare(pool: memhub.MemManager*, mod: rawptr[LLVMModule], # (c"contents\00"),MLIR 渲染阶段(__module.vp/_MlirGlobalInit) # 再转成 MLIR attribute 形态 "contents"。 # ============================================================ -def create_global_string(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_global_string(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, text: str) -> rawptr[GlobalVariable]: """创建字符串常量全局变量并添加到模块 @@ -321,7 +321,7 @@ def create_global_string(pool: memhub.MemManager*, mod: rawptr[LLVMModule], # ============================================================ # 便捷工厂: 创建带初始化值的整数全局变量 # ============================================================ -def create_global_int(pool: memhub.MemManager*, mod: rawptr[LLVMModule], +def create_global_int(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], name: str, bits: int, val: int64) -> rawptr[GlobalVariable]: """创建整数全局变量并添加到模块 @@ -360,9 +360,9 @@ def create_global_int(pool: memhub.MemManager*, mod: rawptr[LLVMModule], @t.NoVTable class LLVMModuleCore: """模块/函数/值创建核心,封装 pool 避免每次创建都传 pool""" - Pool: memhub.MemManager* + Pool: memhub.MemBuddy* - def __init__(self, pool: memhub.MemManager*): + def __init__(self, pool: memhub.MemBuddy*): self.Pool = pool # ---- 模块操作 ---- diff --git a/mlirlite/__module.vp b/mlirlite/__module.vp index cf33411..0cde7b8 100644 --- a/mlirlite/__module.vp +++ b/mlirlite/__module.vp @@ -112,7 +112,7 @@ class LLVMModule: self.DataLayout = layout # ---- 命名结构体类型管理 ---- - def add_named_type(self, pool: memhub.MemManager*, ty: rawptr[LLVMType]): + def add_named_type(self, pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): """登记命名结构体类型到模块(MLIR 侧仅保留模型,不产生输出) 非命名结构体(Name 为 None 或非 Struct 类型)会被忽略。 @@ -199,7 +199,7 @@ class LLVMModule: cur = cur.Next return 0 - def ensure_opaque_for_type(self, pool: memhub.MemManager*, + def ensure_opaque_for_type(self, pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): """为类型中的跨模块结构体引用添加 opaque 声明 @@ -210,7 +210,7 @@ class LLVMModule: # ---- 打印 ---- def PrintModule(self, buf: str, size: sizet, - pool: memhub.MemManager*, mode: int): + pool: memhub.MemBuddy*, mode: int): """将模块序列化为 MLIR(llvm 方言) 文本写入 buf 输出骨架: module { <全局> <函数> } @@ -308,7 +308,7 @@ class LLVMModule: # 同时把节点的 packed 标记(NamedTypeNode.IsPacked,设置点唯一: # module_set_named_type_packed)与类型一并登记,供渲染侧按名字回查。 # ============================================================ -def _MlirPublishNamedTypes(mod: rawptr[LLVMModule], pool: memhub.MemManager*): +def _MlirPublishNamedTypes(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*): """按 NamedTypeHead 重建命名结构体登记表(打印期查表用,含 packed 标记) 先数一遍真实链表长度(不依赖 NamedTypeCount 字段),再按该数量精确分配槽位、 @@ -347,7 +347,7 @@ def _MlirPublishNamedTypes(mod: rawptr[LLVMModule], pool: memhub.MemManager*): # ============================================================ # 工厂函数 # ============================================================ -def new_module(pool: memhub.MemManager*, name: str) -> rawptr[LLVMModule]: +def new_module(pool: memhub.MemBuddy*, name: str) -> rawptr[LLVMModule]: """创建一个模块""" # 硬编码 96 字节:12 字段 * 8 字节(无 vtable,@t.NoVTable) ptr: rawptr[LLVMModule] = pool.alloc(96) @@ -374,7 +374,7 @@ GV_SIZE: t.CDefine = 72 # NamedTypeNode 硬编码大小: Next(8) + Ty(8) + IsPacked(8) = 24 字节 NAMED_TYPE_NODE_SIZE: t.CDefine = 24 -def new_global_variable(pool: memhub.MemManager*, +def new_global_variable(pool: memhub.MemBuddy*, name: str, ty: rawptr[LLVMType]) -> rawptr[GlobalVariable]: """创建一个全局变量""" ptr: rawptr[GlobalVariable] = pool.alloc(GV_SIZE) @@ -455,12 +455,12 @@ def _is_opaque_struct(ty: rawptr[LLVMType]) -> int: return 0 -def module_add_named_type(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_add_named_type(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): mod.add_named_type(pool, ty) -def module_set_named_type_packed(mod: rawptr[LLVMModule], pool: memhub.MemManager*, +def module_set_named_type_packed(mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, ty: rawptr[LLVMType], is_packed: int): """按名称设置命名结构体的 packed 标记(MLIR 输出 !llvm.struct<"name", packed (…)>)。 @@ -501,7 +501,7 @@ def _is_type_defined_in_module(mod: rawptr[LLVMModule], name: str) -> int: return mod._is_type_defined_in_module(name) -def _scan_type_for_cross_module_refs(pool: memhub.MemManager*, +def _scan_type_for_cross_module_refs(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], ty: rawptr[LLVMType], depth: int = 0): @@ -566,7 +566,7 @@ def _scan_type_for_cross_module_refs(pool: memhub.MemManager*, def module_ensure_opaque_for_type(mod: rawptr[LLVMModule], - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, ty: rawptr[LLVMType]): mod.ensure_opaque_for_type(pool, ty) @@ -619,7 +619,7 @@ IR_DUMP_CHAIN_LIMIT: t.CDefine = 100000 # mode: OUTPUT_FULL=完整, OUTPUT_STUB=仅声明, OUTPUT_TEXT=仅代码 # ============================================================ def LLVMModulePrint(buf: str, size: sizet, - mod: rawptr[LLVMModule], pool: memhub.MemManager*, + mod: rawptr[LLVMModule], pool: memhub.MemBuddy*, mode: int): mod.PrintModule(buf, size, pool, mode) @@ -641,7 +641,7 @@ def LLVMModulePrint(buf: str, size: sizet, # 两条路径都覆盖不到的形态一律 MlirFail **响亮报错**,绝不静默输出错误 MLIR。 # ============================================================ def _MlirGlobalLine(buf: str, size: sizet, - pool: memhub.MemManager*, gv: rawptr[GlobalVariable], + pool: memhub.MemBuddy*, gv: rawptr[GlobalVariable], stub: int): """渲染一条 llvm.mlir.global(stub=1 时输出 external 声明形态)""" if gv is None: @@ -730,7 +730,7 @@ def _MlirGlobalLine(buf: str, size: sizet, def _MlirGlobalInit(buf: str, size: sizet, - pool: memhub.MemManager*, gv: rawptr[GlobalVariable]): + pool: memhub.MemBuddy*, gv: rawptr[GlobalVariable]): """渲染全局初值(MLIR attribute 文本)""" x: str = gv.Initializer if x is None: @@ -778,7 +778,7 @@ def _MlirGlobalInit(buf: str, size: sizet, MlirFail("MLIR 渲染: 全局初值形态 v1 不支持(属性路径与 initializer region 均未覆盖)") -def _MlirCStringToMlir(buf: str, size: sizet, src: str, pool: memhub.MemManager*): +def _MlirCStringToMlir(buf: str, size: sizet, src: str, pool: memhub.MemBuddy*): """c"hello\\00" → "hello\\00"(仅去掉 'c' 前缀,转义内容原样保留) ⚠ 实测 mlir-opt 22.1.8:`llvm.mlir.global` 的字符串属性**长度必须等于** @@ -794,7 +794,7 @@ def _MlirCStringToMlir(buf: str, size: sizet, src: str, pool: memhub.MemManager* def _MlirArrayDenseAt(buf: str, size: sizet, src: str, - pool: memhub.MemManager*) -> str: + pool: memhub.MemBuddy*) -> str: """LLVM 数组字面量 → MLIR dense 内容(嵌套递归),返回新游标""" if src is None or src[0] != '[': MlirFail("MLIR 渲染: 全局数组初值形态 v1 不支持") @@ -878,7 +878,7 @@ _MlirGvInsBuf: str = None # insertvalue 链缓冲 _MlirGvTopType: str = None # 顶层聚合 MLIR 类型文本 _MlirGvLast: str = None # 当前节点的 SSA 名 _MlirGvPrev: str = None # insertvalue 链前一结果 SSA 名 -_MlirGvPool: memhub.MemManager* = None +_MlirGvPool: memhub.MemBuddy* = None _MlirGvLeafSeq: int = 0 _MlirGvInsSeq: int = 0 @@ -937,7 +937,7 @@ def _MlirGvHasSymOrStruct(x: str) -> int: def _MlirGlobalInitRegion(buf: str, size: sizet, - pool: memhub.MemManager*, gv: rawptr[GlobalVariable]): + pool: memhub.MemBuddy*, gv: rawptr[GlobalVariable]): """渲染 initializer region 的体(2 空格缩进的行序列,不含最外层大括号) 每行都带 '\\n';调用方在末尾补 '}',模块层再统一缩进 2 空格。 @@ -1366,7 +1366,7 @@ def _MlirGvInsertLeaf(path: str): def _MlirAppendIndented(dst: str, dst_size: sizet, src: str, - indent: int, pool: memhub.MemManager*): + indent: int, pool: memhub.MemBuddy*): """把 src 的每一行前加 indent 个空格后追加到 dst(模块成员缩进)""" if dst is None or src is None: return diff --git a/mlirlite/__types.vp b/mlirlite/__types.vp index 71a377d..30a5c61 100644 --- a/mlirlite/__types.vp +++ b/mlirlite/__types.vp @@ -88,7 +88,7 @@ def _TypeSizeGuard() -> sizet: return sz -def _new_type(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def _new_type(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """从 mpool 分配一个零初始化的 LLVMType""" sz_nt: sizet = _TypeSizeGuard() ptr: rawptr[LLVMType] = pool.alloc(sz_nt) @@ -100,42 +100,42 @@ def _new_type(pool: memhub.MemManager*) -> rawptr[LLVMType]: # ============================================================ # 类型工厂函数 # ============================================================ -def Int1(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int1(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(1)) return ptr -def Int8(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int8(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(8)) return ptr -def Int16(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int16(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(16)) return ptr -def Int32(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int32(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(32)) return ptr -def Int64(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Int64(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Int(64)) return ptr -def Ptr(pool: memhub.MemManager*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType]: +def Ptr(pool: memhub.MemBuddy*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType]: """创建指针类型 Ptr(pointee) LLVM IR 中 **不允许 void* 指针**("pointers to void are invalid"), @@ -160,7 +160,7 @@ def Ptr(pool: memhub.MemManager*, pointee: rawptr[LLVMType]) -> rawptr[LLVMType] return ptr -def Func(pool: memhub.MemManager*, ret: rawptr[LLVMType], +def Func(pool: memhub.MemBuddy*, ret: rawptr[LLVMType], params: rawptr[ParamNode], count: int) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -168,14 +168,14 @@ def Func(pool: memhub.MemManager*, ret: rawptr[LLVMType], return ptr -def Void(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Void(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None c.DerefAs(ptr, LLVMType.Void()) return ptr -def Array(pool: memhub.MemManager*, elem_ty: rawptr[LLVMType], +def Array(pool: memhub.MemBuddy*, elem_ty: rawptr[LLVMType], count: int) -> rawptr[LLVMType]: """创建数组类型 [count x elem_ty]""" ptr: rawptr[LLVMType] = _new_type(pool) @@ -184,7 +184,7 @@ def Array(pool: memhub.MemManager*, elem_ty: rawptr[LLVMType], return ptr -def Struct(pool: memhub.MemManager*, fields: rawptr[ParamNode], +def Struct(pool: memhub.MemBuddy*, fields: rawptr[ParamNode], fcount: int, name: str) -> rawptr[LLVMType]: """创建结构体类型 {ty1, ty2, ...} @@ -198,7 +198,7 @@ def Struct(pool: memhub.MemManager*, fields: rawptr[ParamNode], return ptr -def Half(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Half(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建半精度浮点类型 half (16-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -206,7 +206,7 @@ def Half(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Float(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Float(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建单精度浮点类型 float (32-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -214,7 +214,7 @@ def Float(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Double(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Double(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建双精度浮点类型 double (64-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -222,7 +222,7 @@ def Double(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def FP128(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def FP128(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建四精度浮点类型 fp128 (128-bit)""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -230,7 +230,7 @@ def FP128(pool: memhub.MemManager*) -> rawptr[LLVMType]: return ptr -def Label(pool: memhub.MemManager*) -> rawptr[LLVMType]: +def Label(pool: memhub.MemBuddy*) -> rawptr[LLVMType]: """创建标签类型 label""" ptr: rawptr[LLVMType] = _new_type(pool) if ptr is None: return None @@ -244,7 +244,7 @@ def Label(pool: memhub.MemManager*) -> rawptr[LLVMType]: # ParamNode 硬编码大小: Next(8) + Ty(8) = 16 字节 PNODE_SIZE: t.CDefine = 16 -def new_param_node(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[ParamNode]: +def new_param_node(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[ParamNode]: """创建一个参数节点,Ty 设为给定类型指针""" ptr: rawptr[ParamNode] = pool.alloc(PNODE_SIZE) if ptr is None: return None @@ -313,9 +313,9 @@ def paramnode_set_next(node: rawptr[ParamNode], nxt: rawptr[ParamNode]): @t.NoVTable class LLVMTypeCore: """类型创建核心,封装 pool 避免每次创建类型都传 pool""" - Pool: memhub.MemManager* + Pool: memhub.MemBuddy* - def __init__(self, pool: memhub.MemManager*): + def __init__(self, pool: memhub.MemBuddy*): self.Pool = pool def Int1(self) -> rawptr[LLVMType]: @@ -467,7 +467,7 @@ def _MlirNamedSlot(idx: int) -> sizet*: return (sizet*)(t.CPtr(uint64(_MlirNamedTys) + uint64(idx * 16))) -def MlirNamedTypesBegin(pool: memhub.MemManager*, capacity: sizet): +def MlirNamedTypesBegin(pool: memhub.MemBuddy*, capacity: sizet): """按模块的具名结构体**实际数量**分配登记表并清空计数(模块打印开始时调用) 按需精确分配(TPV 真实模块里具名类型可达数千个,见 README §5.9), @@ -558,7 +558,7 @@ def _MlirNamedPackedOf(name: str) -> int: return int(slot[1]) -def _MlirFailNamed(pool: memhub.MemManager*, reason: str, name: str): +def _MlirFailNamed(pool: memhub.MemBuddy*, reason: str, name: str): """带类型名 + 当前中间文本行的响亮报错 MlirFail 是即时终止、拿不到调用栈(见 README §5.8),故把定位信息备齐: @@ -583,7 +583,7 @@ def _MlirFailNamed(pool: memhub.MemManager*, reason: str, name: str): MlirFail(buf) -def _MlirNamedCheckName(pool: memhub.MemManager*, name: str): +def _MlirNamedCheckName(pool: memhub.MemBuddy*, name: str): """校验名字可作 MLIR 字符串字面量内容(`"` / `\\` / 控制字符 ⇒ 响亮报错)""" if name is None or name[0] == '\0': MlirFail("MLIR 渲染: 命名结构体名字为空") @@ -599,7 +599,7 @@ def _MlirNamedCheckName(pool: memhub.MemManager*, name: str): def _MlirNamedStructAppend(dst: str, dstsz: sizet, name: str, fields: rawptr[ParamNode], fcount: int, packed: int, - pool: memhub.MemManager*, depth: int): + pool: memhub.MemBuddy*, depth: int): """追加 MLIR 具名结构体类型文本(追加写 dst) 非 packed: `!llvm.struct<"name", (字段…)>`; @@ -669,7 +669,7 @@ def _MlirNamedStructAppend(dst: str, dstsz: sizet, name: str, # pool 用于递归打印子类型时分配临时缓冲区。 # ============================================================ def TypePrint(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*): + ty: rawptr[LLVMType], pool: memhub.MemBuddy*): """将类型 ty 序列化为 MLIR 类型文本写入 buf(容量 size) pool 用于递归打印子类型时分配临时缓冲区。 @@ -687,7 +687,7 @@ def TypePrint(buf: str, size: sizet, # 需要转换成 MLIR 语法(!llvm.ptr、!llvm.array<4 x i32>、 # !llvm.struct<(i32, !llvm.ptr)>、!llvm.struct<(…)>)后才能写进 op 行。 # ============================================================ -def MlirTypeText(dst: str, dstsz: sizet, src: str, pool: memhub.MemManager*): +def MlirTypeText(dst: str, dstsz: sizet, src: str, pool: memhub.MemBuddy*): """把 LLVM 语法类型文本转换为 MLIR 类型文本(追加到 dst)""" if dst is None or dstsz == 0 or src is None: return @@ -764,7 +764,7 @@ def _MlirAllDigits(p: str, lt: sizet, start: sizet) -> int: return 1 -def _MlirTypeAppend(dst: str, dstsz: sizet, src: str, pool: memhub.MemManager*, +def _MlirTypeAppend(dst: str, dstsz: sizet, src: str, pool: memhub.MemBuddy*, depth: int): """LLVM 类型文本 → MLIR 类型文本(递归实现,追加写 dst)""" if dst is None or dstsz == 0 or src is None: @@ -847,7 +847,7 @@ def _MlirTypeAppend(dst: str, dstsz: sizet, src: str, pool: memhub.MemManager*, def _MlirArrayText(dst: str, dstsz: sizet, p: str, lt: sizet, - pool: memhub.MemManager*, depth: int): + pool: memhub.MemBuddy*, depth: int): """[N x elem] → !llvm.array""" inner: str = p + 1 innerlen: sizet = lt - 2 @@ -882,7 +882,7 @@ def _MlirArrayText(dst: str, dstsz: sizet, p: str, lt: sizet, def _MlirStructText(dst: str, dstsz: sizet, p: str, lt: sizet, - pool: memhub.MemManager*, depth: int): + pool: memhub.MemBuddy*, depth: int): """{f0, f1, …} → !llvm.struct<(f0, f1, …)>;空 → !llvm.struct<()>""" inner: str = p + 1 innerlen: sizet = lt - 2 @@ -924,7 +924,7 @@ def _MlirStructText(dst: str, dstsz: sizet, p: str, lt: sizet, def _MlirNamedStructText(dst: str, dstsz: sizet, p: str, lt: sizet, - pool: memhub.MemManager*, depth: int): + pool: memhub.MemBuddy*, depth: int): """命名结构体类型文本(形如 `%"name"` / `%name`)→ 使用处的内联具名形态 MLIR 无独立类型定义语法、不允许无体前向声明(实测 mlir-opt 22.1.8: @@ -999,7 +999,7 @@ def _MlirFindFuncParen(p: str, lt: sizet) -> sizet: def _MlirFuncText(dst: str, dstsz: sizet, p: str, lt: sizet, fp: sizet, - pool: memhub.MemManager*, depth: int): + pool: memhub.MemBuddy*, depth: int): """ret (p0, p1) → !llvm.func""" ret_len: sizet = fp rbuf: str = pool.alloc(ret_len + 1) @@ -1052,7 +1052,7 @@ def _MlirFuncText(dst: str, dstsz: sizet, p: str, lt: sizet, fp: sizet, TYPEPRINT_MAX_DEPTH: t.CDefine = 100 def _MlirTypePrintDepth(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*, + ty: rawptr[LLVMType], pool: memhub.MemBuddy*, depth: int): """带递归深度上限的 MLIR 类型打印内部实现(覆盖式写入 buf)""" if ty is None or buf is None or size == 0: @@ -1143,7 +1143,7 @@ def _MlirTypePrintDepth(buf: str, size: sizet, def _MlirStructFields(buf: str, size: sizet, - fields: rawptr[ParamNode], pool: memhub.MemManager*, + fields: rawptr[ParamNode], pool: memhub.MemBuddy*, depth: int): """渲染 !llvm.struct<(f0, f1, …)>(覆盖式写入 buf)""" buf[0] = '\0' @@ -1199,7 +1199,7 @@ def _strappend(dst: str, dst_size: sizet, src: str): # 调用方(LLVMModulePrint)无需为此分叉。 # ============================================================ def PrintStructDefinition(buf: str, size: sizet, - ty: rawptr[LLVMType], pool: memhub.MemManager*, + ty: rawptr[LLVMType], pool: memhub.MemBuddy*, packed: int = 0): """MLIR 侧无类型定义行:写入空串(保留 API 同形)""" if buf is None or size == 0: @@ -1263,13 +1263,13 @@ def get_struct_fcount(ty: rawptr[LLVMType]) -> int: # ============================================================ DEEPCOPY_MAX_DEPTH: t.CDefine = 64 -def DeepCopyType(pool: memhub.MemManager*, +def DeepCopyType(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[LLVMType]: """深拷贝 LLVMType 到 stdlib 区(深度限制防自引用递归),失败返回 None""" return _DeepCopyDepth(pool, ty, 0) -def _DeepCopyDepth(pool: memhub.MemManager*, +def _DeepCopyDepth(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], depth: int) -> rawptr[LLVMType]: """带深度上限的深拷贝实现 @@ -1332,7 +1332,7 @@ def _DeepCopyDepth(pool: memhub.MemManager*, return new_ty -def _DeepCopyParamChain(pool: memhub.MemManager*, +def _DeepCopyParamChain(pool: memhub.MemBuddy*, head: rawptr[ParamNode], depth: int) -> rawptr[ParamNode]: """深拷贝 ParamNode 链表到 stdlib""" if head is None: @@ -1360,7 +1360,7 @@ def _DeepCopyParamChain(pool: memhub.MemManager*, return first -def _DeepCopyStr(pool: memhub.MemManager*, s: str) -> str: +def _DeepCopyStr(pool: memhub.MemBuddy*, s: str) -> str: """深拷贝字符串到 stdlib""" if s is None: return None diff --git a/mlirlite/__values.vp b/mlirlite/__values.vp index 3e49e3e..0ef134e 100644 --- a/mlirlite/__values.vp +++ b/mlirlite/__values.vp @@ -32,7 +32,7 @@ class Value(GSListNode[Value]): # Value 硬编码大小: Next(8) + Ty(8) + Name(8) + IsConst(4) + IntVal(8) + FloatVal(8) = 48 字节 VALUE_SIZE: t.CDefine = 48 -def new_value(pool: memhub.MemManager*) -> rawptr[Value]: +def new_value(pool: memhub.MemBuddy*) -> rawptr[Value]: """从 mpool 分配一个零初始化的 Value""" ptr: rawptr[Value] = pool.alloc(VALUE_SIZE) if ptr: @@ -40,7 +40,7 @@ def new_value(pool: memhub.MemManager*) -> rawptr[Value]: return ptr -def ConstInt(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstInt(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], val: int64, name: str) -> rawptr[Value]: """创建整数常量值 @@ -58,7 +58,7 @@ def ConstInt(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def ConstNull(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstNull(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Value]: """创建 null 指针常量""" v: rawptr[Value] = new_value(pool) @@ -70,7 +70,7 @@ def ConstNull(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def ConstZero(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[Value]: +def ConstZero(pool: memhub.MemBuddy*, ty: rawptr[LLVMType]) -> rawptr[Value]: """创建 zeroinitializer 常量(零初始化聚合类型:结构体/数组)""" v: rawptr[Value] = new_value(pool) if v is None: return None @@ -81,7 +81,7 @@ def ConstZero(pool: memhub.MemManager*, ty: rawptr[LLVMType]) -> rawptr[Value]: return v -def ConstFloat(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def ConstFloat(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], val: t.CDouble) -> rawptr[Value]: """创建浮点常量值 @@ -118,7 +118,7 @@ def ConstFloat(pool: memhub.MemManager*, ty: rawptr[LLVMType], return v -def SSAValue(pool: memhub.MemManager*, ty: rawptr[LLVMType], +def SSAValue(pool: memhub.MemBuddy*, ty: rawptr[LLVMType], name: str) -> rawptr[Value]: """创建 SSA 临时值 @@ -146,7 +146,7 @@ def SSAValue(pool: memhub.MemManager*, ty: rawptr[LLVMType], # 操作数解析路径(常量必须先物化为 llvm.mlir.constant/zero/addressof op)。 # ============================================================ def ValuePrint(buf: str, size: sizet, - val: rawptr[Value], pool: memhub.MemManager*): + val: rawptr[Value], pool: memhub.MemBuddy*): """将值 val 序列化为 MLIR 文本写入 buf pool 用于复杂类型(Array/Struct/Func)递归打印时分配临时缓冲区。 diff --git a/mlirlite/__verify.vp b/mlirlite/__verify.vp index df57e26..af31793 100644 --- a/mlirlite/__verify.vp +++ b/mlirlite/__verify.vp @@ -54,7 +54,7 @@ class VerifyResult: # ============================================================ # 辅助函数 # ============================================================ -def _new_verify_result(pool: memhub.MemManager*, +def _new_verify_result(pool: memhub.MemBuddy*, buf_size: sizet) -> rawptr[VerifyResult]: """创建验证结果对象""" ptr: rawptr[VerifyResult] = pool.alloc(VerifyResult.__sizeof__()) @@ -126,7 +126,7 @@ def _append_cstr(dst: str, dst_size: sizet, src: str): # ============================================================ # SSA 名表操作 # ============================================================ -def _new_name_table(pool: memhub.MemManager*) -> rawptr[GSList[NameEntry]]: +def _new_name_table(pool: memhub.MemBuddy*) -> rawptr[GSList[NameEntry]]: """创建空名表""" gsl: rawptr[GSList[NameEntry]] = pool.alloc(24) # GSList: Head+Tail+Count if gsl is None: return None @@ -138,7 +138,7 @@ def _new_name_table(pool: memhub.MemManager*) -> rawptr[GSList[NameEntry]]: NENTRY_SIZE: t.CDefine = 16 def _name_table_add(table: rawptr[GSList[NameEntry]], - pool: memhub.MemManager*, + pool: memhub.MemBuddy*, name: str) -> int: """添加名到表。返回 1=重复, 0=成功添加""" if table is None or name is None: return 0 @@ -181,7 +181,7 @@ def _is_char_name(ch: char) -> int: return 0 -def _extract_def_name(pool: memhub.MemManager*, +def _extract_def_name(pool: memhub.MemBuddy*, text: str) -> str: """从定义行提取被定义的 SSA 名。 @@ -296,7 +296,7 @@ def _str_matches_at(text: str, start: int, length: int, # ============================================================ # 主验证函数 # ============================================================ -def verify_function(pool: memhub.MemManager*, +def verify_function(pool: memhub.MemBuddy*, func: rawptr[Function], result: rawptr[VerifyResult]) -> int: """验证函数的 SSA 正确性。 @@ -419,7 +419,7 @@ def verify_function(pool: memhub.MemManager*, return result.ErrorCount -def verify_module(pool: memhub.MemManager*, mod: rawptr[LLVMModule], result: rawptr[VerifyResult]) -> int: +def verify_module(pool: memhub.MemBuddy*, mod: rawptr[LLVMModule], result: rawptr[VerifyResult]) -> int: """验证模块中所有函数的 SSA 正确性。 返回: 错误总数 diff --git a/torch/__init__.vp b/torch/__init__.vp index 83202b3..83d6003 100644 --- a/torch/__init__.vp +++ b/torch/__init__.vp @@ -39,7 +39,7 @@ novirtual class Tensor: TENSOR_SIZE: t.CDefine = 32 -def _zeros_block(pool: memhub.MemManager*, bytes_n: sizet) -> t.CPtr: +def _zeros_block(pool: memhub.MemBuddy*, bytes_n: sizet) -> t.CPtr: """分配并清零一块内存""" p: t.CPtr = pool.alloc(bytes_n) if p is not None: @@ -47,7 +47,7 @@ def _zeros_block(pool: memhub.MemManager*, bytes_n: sizet) -> t.CPtr: return p -def zeros(pool: memhub.MemManager*, rows: sizet, +def zeros(pool: memhub.MemBuddy*, rows: sizet, cols: sizet, with_grad: int = 1) -> Tensor | t.CPtr: """torch.zeros: 创建 rows x cols 的全零 Tensor, 可选分配 Grad 缓冲""" if pool is None: @@ -67,7 +67,7 @@ def zeros(pool: memhub.MemManager*, rows: sizet, return t0 -def from_raw(pool: memhub.MemManager*, data: t.CPtr, +def from_raw(pool: memhub.MemBuddy*, data: t.CPtr, rows: sizet, cols: sizet, with_grad: int = 0) -> Tensor | t.CPtr: """torch.from_raw: 包装一块已有内存为 Tensor(不复制, 不拥有)"""