LLVM中是否可以为用户定义的Pass添加参数?

16

现在我们正在为 llvm 实现一个分析插件,参照 这个教程。需要像下面这样传递一个额外的参数给插件:

opt -load /path/to/myplugin.so -mypass -mypass_option input.bc

然而,我没有找到任何告诉我如何做的手册。因此,我想知道这在实践中是否可能。

先行感谢。


那个特定的例子不太优化,因为惯用法是从stdin读取。可能你有另一个使用案例在脑海中? - Brian Cain
你需要什么样的参数?据我所知,传递应该从IR中获取所需的一切,并再次输出IR。 - Tobias Langner
@TobiasLangner 这是一些参数,例如 -mypass 通道的分析级别或分析位置。也许它类似于 gcc 优化级别 -O1-O2 等。 - Hongxu Chen
@BrianCain жҲ‘еңЁиҖғиҷ‘д»Һж–Ү件дёӯиҜ»еҸ–mypass_optionпјҢдҪҶжҳҜдјјд№ҺжҜҸж¬ЎдҪҝз”ЁеҜҶз Ғж—¶йғҪеҝ…йЎ»дҝ®ж”№жҢҮе®ҡзҡ„ж–Ү件гҖӮ - Hongxu Chen
1个回答

16

你应该使用内置在LLVM中的CommandLine库。基本上,你只需要在pass的.cpp文件顶部放置:

#include "llvm/Support/CommandLine.h"

static cl::opt<string> InputFilename("mypass_option", cl::desc("Specify input filename for mypass"), cl::value_desc("filename"));

但我建议你检查上面的链接,它有完整的参考资料和方便的快速入门部分。

以内置的循环展开pass为例 - 它在源文件顶部使用cl::opt<unsigned>cl::opt<bool>定义了两个无符号选项和两个布尔选项。


如何从参数中获取值? - user3440295
只需访问InputFilename。 - JaeIL Ryu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接