从 C++ 布尔创建 llvm 加载

creating llvm load from a c++ bool

我的 C++ 程序中有一个布尔值。

bool foo;

我想创建一个显示为 foo 的 llvm 值。 (供其他 llvm 代码使用)我可以只按名称引用 foo 吗?或者按地址,因为它的位置不会改变?

llvm::value* loadFoo = ??

您的 LLVM 代码中需要一个全局外部变量:

@foo = external global i8

或者,API:

llvm::GlobalVariable* fooVar = new GlobalVariable(
 /*Module=*/      Module, 
 /*Type=*/        llvm::Type::getInt8Ty(Context),
 /*isConstant=*/  false,
 /*Linkage=*/     GlobalValue::ExternalLinkage,
 /*Initializer=*/ nullptr, 
 /*Name=*/        "foo"  // (1)
); 

然后你可以把fooVar当作指向foo值的指针:

llvm::Value* loadFoo = builder.CreateLoad(fooVar);

最后一件事,要真正告诉 ExecutionEngine fooVarbool foo,您需要明确地这样做:

executionEngine.addGlobalMapping(fooVar, &foo);

或者,按名称 (1):

executionEngine.addGlobalMapping("foo", &foo);