2016-07-28 51 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);