diff --git a/llvmlite/__builder.vp b/llvmlite/__builder.vp index 776a2d7..73c20ee 100644 --- a/llvmlite/__builder.vp +++ b/llvmlite/__builder.vp @@ -1751,6 +1751,18 @@ def new_phi_incoming(pool: memhub.MemBuddy*, return ptr +def phiincoming_set_next(inc: rawptr[PhiIncoming], nxt: rawptr[PhiIncoming]): + """设置 phi 入边链表的下一个节点(跨模块访问器)。 + + PhiIncoming.Next 继承自泛型基类 GSListNode[PhiIncoming],泛型特化体不在 + 任何 .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段访问 + 会 fail-fast。本模块内执行能正确访问该字段(与 paramnode_set_next 同一约定)。 + """ + if inc is None: + return + inc.Next = nxt + + # ============================================================ # Phi 指令 # ============================================================ @@ -1786,6 +1798,18 @@ def new_switch_case(pool: memhub.MemBuddy*, return ptr +def switchcase_set_next(sc: rawptr[SwitchCase], nxt: rawptr[SwitchCase]): + """设置 switch case 链表的下一个节点(跨模块访问器)。 + + SwitchCase.Next 继承自泛型基类 GSListNode[SwitchCase],泛型特化体不在任何 + .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段访问会 + fail-fast。本模块内执行能正确访问该字段(与 paramnode_set_next 同一约定)。 + """ + if sc is None: + return + sc.Next = nxt + + # ============================================================ # Switch 指令 # ============================================================ diff --git a/llvmlite/__init__.vp b/llvmlite/__init__.vp index c8c145d..e2bdb87 100644 --- a/llvmlite/__init__.vp +++ b/llvmlite/__init__.vp @@ -39,6 +39,7 @@ from .__module import ( module_set_named_type_packed, module_set_target, module_set_datalayout, module_add_di_node, module_add_named_metadata, + globalvariable_get_next, global_set_constant, global_set_linkage, global_set_unnamed_addr, global_set_section, LLVMModulePrint, OUTPUT_FULL, OUTPUT_STUB, OUTPUT_TEXT, module_ensure_opaque_for_type, @@ -59,7 +60,8 @@ from .__builder import ( build_gep, build_gep_array, build_gep_struct, build_phi, build_switch, build_select, build_unreachable, build_atomicrmw, build_cmpxchg, build_inline_asm, build_va_arg, - PhiIncoming, new_phi_incoming, SwitchCase, new_switch_case, + PhiIncoming, new_phi_incoming, SwitchCase, new_switch_case, + phiincoming_set_next, switchcase_set_next, ICMP_EQ, ICMP_NE, ICMP_SGT, ICMP_SGE, ICMP_SLT, ICMP_SLE, ICMP_UGT, ICMP_UGE, ICMP_ULT, ICMP_ULE, FCMP_FALSE, FCMP_OEQ, FCMP_OGT, FCMP_OGE, FCMP_OLT, FCMP_OLE, diff --git a/llvmlite/__module.vp b/llvmlite/__module.vp index d0863af..7d39380 100644 --- a/llvmlite/__module.vp +++ b/llvmlite/__module.vp @@ -588,6 +588,19 @@ def module_add_global(mod: rawptr[LLVMModule], gv: rawptr[GlobalVariable]): mod.add_global(gv) +def globalvariable_get_next(gv: rawptr[GlobalVariable]) -> rawptr[GlobalVariable]: + """获取链表中的下一个全局变量(跨模块访问器)。 + + GlobalVariable.Next 继承自泛型基类 GSListNode[GlobalVariable],而泛型特化体 + 不在任何 .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段 + 访问会 fail-fast("属性 'Next' 在类 'GlobalVariable' 中找不到")。本模块内 + 执行能正确访问该字段,与 paramnode_get_next/value_get_next 同一约定。 + """ + if gv is None: + return None + return gv.Next + + def module_set_target(mod: rawptr[LLVMModule], triple: str): mod.set_target(triple) diff --git a/mlirlite/__builder.vp b/mlirlite/__builder.vp index 98624c2..973b650 100644 --- a/mlirlite/__builder.vp +++ b/mlirlite/__builder.vp @@ -1687,6 +1687,18 @@ def new_phi_incoming(pool: memhub.MemBuddy*, return ptr +def phiincoming_set_next(inc: rawptr[PhiIncoming], nxt: rawptr[PhiIncoming]): + """设置 phi 入边链表的下一个节点(跨模块访问器)。 + + PhiIncoming.Next 继承自泛型基类 GSListNode[PhiIncoming],泛型特化体不在任何 + .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段访问会 + fail-fast。本模块内执行能正确访问该字段(与 llvmlite 同形镜像同名同义)。 + """ + if inc is None: + return + inc.Next = nxt + + # ============================================================ # Phi 指令 # ============================================================ @@ -1722,6 +1734,18 @@ def new_switch_case(pool: memhub.MemBuddy*, return ptr +def switchcase_set_next(sc: rawptr[SwitchCase], nxt: rawptr[SwitchCase]): + """设置 switch case 链表的下一个节点(跨模块访问器)。 + + SwitchCase.Next 继承自泛型基类 GSListNode[SwitchCase],泛型特化体不在任何 + .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段访问会 + fail-fast。本模块内执行能正确访问该字段(与 llvmlite 同形镜像同名同义)。 + """ + if sc is None: + return + sc.Next = nxt + + # ============================================================ # Switch 指令 # ============================================================ diff --git a/mlirlite/__init__.vp b/mlirlite/__init__.vp index 8a88bbe..75d94dd 100644 --- a/mlirlite/__init__.vp +++ b/mlirlite/__init__.vp @@ -45,7 +45,8 @@ from .__function import ( ) from .__module import ( LLVMModule, GlobalVariable, NamedTypeNode, new_module, new_global_variable, - module_add_function, module_add_global, module_add_named_type, + module_add_function, module_add_global, module_add_named_type, + globalvariable_get_next, module_set_named_type_packed, module_set_target, module_set_datalayout, global_set_constant, global_set_linkage, global_set_unnamed_addr, global_set_section, @@ -67,7 +68,8 @@ from .__builder import ( build_gep, build_gep_array, build_gep_struct, build_phi, build_switch, build_select, build_unreachable, build_atomicrmw, build_cmpxchg, build_inline_asm, build_va_arg, - PhiIncoming, new_phi_incoming, SwitchCase, new_switch_case, + PhiIncoming, new_phi_incoming, SwitchCase, new_switch_case, + phiincoming_set_next, switchcase_set_next, ICMP_EQ, ICMP_NE, ICMP_SGT, ICMP_SGE, ICMP_SLT, ICMP_SLE, ICMP_UGT, ICMP_UGE, ICMP_ULT, ICMP_ULE, FCMP_FALSE, FCMP_OEQ, FCMP_OGT, FCMP_OGE, FCMP_OLT, FCMP_OLE, diff --git a/mlirlite/__module.vp b/mlirlite/__module.vp index 0cde7b8..b28205c 100644 --- a/mlirlite/__module.vp +++ b/mlirlite/__module.vp @@ -409,6 +409,18 @@ def module_add_global(mod: rawptr[LLVMModule], gv: rawptr[GlobalVariable]): mod.add_global(gv) +def globalvariable_get_next(gv: rawptr[GlobalVariable]) -> rawptr[GlobalVariable]: + """获取链表中的下一个全局变量(跨模块访问器)。 + + GlobalVariable.Next 继承自泛型基类 GSListNode[GlobalVariable],泛型特化体不在 + 任何 .vpi 中 ⇒ 导入侧 class_members 只有 __inherited_N 占位名,裸字段访问会 + fail-fast。本模块内执行能正确访问该字段(与 llvmlite 同形镜像同名同义)。 + """ + if gv is None: + return None + return gv.Next + + def module_set_target(mod: rawptr[LLVMModule], triple: str): mod.set_target(triple)