从 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
fooVar
是 bool foo
,您需要明确地这样做:
executionEngine.addGlobalMapping(fooVar, &foo);
或者,按名称 (1):
executionEngine.addGlobalMapping("foo", &foo);
我的 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
fooVar
是 bool foo
,您需要明确地这样做:
executionEngine.addGlobalMapping(fooVar, &foo);
或者,按名称 (1):
executionEngine.addGlobalMapping("foo", &foo);