2016-07-28 62 views
0

我在我的C++程序中有一个bool。从C++创建llvm加载bool

bool foo; 

我想创建一个读取foo的llvm值。 (被其他llvm代码使用)我可以通过名称来引用foo吗?或者通过地址,因为它的位置不会改变?

llvm::value* loadFoo = ?? 
+0

让我们澄清:你想用' foo'来自'llvm :: ExecutionEngine'在同一进程中执行的LLVM代码? – deniss

+0

是的,这是正确的 –

回答

0

你需要一个全球性的外部变量在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); 

最后一件事,实际上告诉ExecutionEnginefooVarbool foo,你需要做的是明确的:

executionEngine.addGlobalMapping(fooVar, &foo); 

或者,由(1)名称:

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