如何在llvm中使用RandomNumberGenerator?

如何在llvm中使用RandomNumberGenerator?,llvm,Llvm,我希望有人能给我举个例子,说明如何在LLVM中使用这个类。我能找到的所有例子似乎都使用了过时的方法 我希望能够在可以用'-RNG seed'参数覆盖的过程中创建RNG 如果该值作为参数提供,如何访问该值;如果该值未作为参数提供,如何创建该值 此外,我理解单个RNG并不意味着在单个模块的线程之间共享。如果我在一个模块上运行多个过程,它们是否可以共享同一个生成的RNG?RandomNumberGenerator类有一个私有构造函数(在llvm/lib/Support/RandomNumberGene

我希望有人能给我举个例子,说明如何在
LLVM
中使用这个类。我能找到的所有例子似乎都使用了过时的方法

我希望能够在可以用'-RNG seed'参数覆盖的过程中创建RNG

如果该值作为参数提供,如何访问该值;如果该值未作为参数提供,如何创建该值


此外,我理解单个RNG并不意味着在单个模块的线程之间共享。如果我在一个模块上运行多个过程,它们是否可以共享同一个生成的RNG?

RandomNumberGenerator类有一个私有构造函数(在
llvm/lib/Support/RandomNumberGenerator.cpp
下检查其文档和源文件),因此唯一的方法(至少我知道)获取实例的方法是通过的
createRNG
方法

因此,假设您有
llvm:Function
pass(并使用C++11):

重新运行此命令,它将为您提供相同的伪随机数

一旦您包含了标题(以及针对
LLVM
支持库的链接,即
LLVM config--libfiles support
),您就可以使用
-rng seed
选项了。因此,将上述执行行更改为:

opt -load ./libLLVMHelloPass.so -hello -rng-seed 42 foo.bc -o bar.bc
应该给出不同的顺序


最后,AFAIK,
LLVM
通过
opt
的传递在
PassManager
的上下文中按顺序运行(当然是传统的)。我认为,在使用多线程(换句话说,不打算由
opt
运行)构建定制的独立
LLVM
工具时,应该遵循这一建议。对于使用
LLVM
API的独立应用程序的相关示例,请查看单元测试源子目录(一个提示是查找具有
main()
.cpp
文件,尽管它们并不总是这样设置)。

您能否提供指向这些过时示例之一的链接?我可能不得不更新我的答案,因为这是一个我几乎从未使用过的API调用。然而,我的实现有很大不同,我对RandomNumberGenerator的理解也是如此。你已经澄清了,谢谢!哦,是的,我看过Quarkslab教程。我仍然记不起我什么时候使用过这个API类。
opt -load ./libLLVMHelloPass.so -hello foo.bc -o bar.bc
opt -load ./libLLVMHelloPass.so -hello -rng-seed 42 foo.bc -o bar.bc