Clang 如何在getOrInsertFunction()llvm中定义字符串类型?
我是llvm的新手,我试着做这个乐器。但我发现LLVMAPI只有基本类型,比如:getInt32Ty(Ctx)。。我想使用getOrInsertFunction()做的是,函数参数类型为string类型。众所周知,当参数类型为int时,我们可以像这样做:Clang 如何在getOrInsertFunction()llvm中定义字符串类型?,clang,llvm,instrumentation,Clang,Llvm,Instrumentation,我是llvm的新手,我试着做这个乐器。但我发现LLVMAPI只有基本类型,比如:getInt32Ty(Ctx)。。我想使用getOrInsertFunction()做的是,函数参数类型为string类型。众所周知,当参数类型为int时,我们可以像这样做: LLVMContext &Ctx = F.getContext(); Constant *logFunc = F.getParent()->getOrInsertFunction( "logop", Type::ge
LLVMContext &Ctx = F.getContext();
Constant *logFunc = F.getParent()->getOrInsertFunction(
"logop", Type::getVoidTy(Ctx), Type::getInt32Ty(Ctx), NULL );
Type::getInt32Ty(Ctx)
是函数参数类型(int),我想做的是:
getOrInsertFunction(
"logop", Type::getVoidTy(Ctx), string type, NULL);
字符串类型我不知道如何定义。简而言之,你能告诉我如何定义它吗,谢谢 LLVM IR不定义任何特殊的字符串或字符类型 通常使用
[N x i8]
或i8*
,但这取决于您-例如,Java样式的字符串可能是一个结构,其中一些i32
表示字符串长度,另一些i16*
表示UTF-16代码点
LLVM IR确实有一个“字符串文字”,它被键入为i8
数组-例如c“hello world\0A\00”
is[13 x i8]
。但这并不能说明应该使用什么字符串形式
记住,如果你的函数应该与某个东西交互,例如宿主C++应用程序,那么你需要使用相同的字符串类型——在这种情况下,无论是什么代码> STD::String 都编译成。您可以使用Clang或检查该类型