feat(tpc): 新增 --func-hotspot 函数热点统计,Ctrl+C 时落盘

启用后为每个函数定义生成 internal i64 计数器并在入口递增;各模块 Ctrl+C 处理器以追加方式写最终文件(含 main 的模块启动时清空一次),经 llvm.global_ctors 自注册;未传参数时零影响。
This commit is contained in:
TermiNexus committed 2026-09-13 17:50:01 +08:00
1 parent 355811d64e
commit 5680592f37
7 files changed
+339 -14

No files matched your search

+11
View File
@@ -332,6 +332,14 @@ class TransPyC:
else:
error('--datalayout requires an argument')
sys.exit(1)
elif sys.argv[I] == '--func-hotspot':
# 函数热点统计:为每个函数定义配 u64 计数器,Ctrl+C 时写入指定文件
if I + 1 < len(sys.argv):
self.Args['FuncHotspot'] = sys.argv[I + 1]
I += 2
else:
error('--func-hotspot requires an argument')
sys.exit(1)
else:
error(f'Unknown argument {sys.argv[I]}')
sys.exit(1)
@@ -596,6 +604,9 @@ class TransPyC:
# 有命令行参数,使用 ParseArgs 方法解析
self.ParseArgs()
# 函数热点统计(--func-hotspot):绑定到翻译器;未传时为 None(零影响)
self.translator.FuncHotspotFile = self.Args.get('FuncHotspot')
# 检查是否有预处理符号文件的请求
if 'PreSym' in self.Args:
PresymConfig: dict[str, Any] = self.Args['PreSym']