我正在尝试寻找一种方法来优化空的全局构造函数。先前的优化会将构造函数转换为不执行任何操作的函数。我需要添加新通行证才能从llvm.global_ctors
中删除这些功能。
首先,我尝试了optimizeGlobalCtorsList
,但是即使填充了llvm.global_ctors
,该函数实际上也不会调用我给它的回调。
然后我尝试运行GlobalOptPass
。我尝试过:
llvm::GlobalOptPass pass;
llvm::ModuleAnalysisManager MAM{true};
pass.run(module, MAM);
此操作最终取消引用AnalysisManager::lookupPass
中的空指针。我想我需要执行某种初始化或注册,但是我不知道该怎么做。关于“ llvm通行证注册”的所有参考都谈到了用opt
注册通行证。我不想那样做。我只想运行通行证。
答案 0 :(得分:0)
查找func FlattenDeep(args ...interface{}) []interface{} {
list := []interface{}{}
for _, v := range args {
kind := getKind(v);
if kind != "unknown" {
for _, z := range FlattenDeep((v.([]interface{})...) {
list = append(list, z)
}
} else {
list = append(list, v);
}
}
return list;
}
(对于新的通行证管理器,则为<button onclick="print('blank')">Click me</button>
),以查看lib/Transforms/IPO/PassManagerBuilder.cpp
如何设置其通行管道。 lib/Passes/PassBuilder.cpp
的代码在opt
中,并且非常小,几乎将其所有工作委托给了核心库。
您可以将opt
用作自己的工具的模板,也可以破解通行证构建基准线以将通行证插入所需的位置。