我是llvm的新手并且正在尝试做乐器。但我发现LLVM API只有原始类型,如:getInt32Ty(Ctx)..我想要做的是使用getOrInsertFunction(),函数参数类型是字符串类型。众所周知,当参数类型为int时,我们可以做到喜欢是:
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);
字符串类型我不知道如何定义它。简而言之,请你告诉我如何定义它,谢谢!
答案 0 :(得分:1)
LLVM IR没有定义任何特殊的字符串或字符类型。
通常使用[N x i8]
或i8*
,但这取决于你 - 例如,Java风格的字符串可能是一个结构,其中一些i32
用于字符串长度,并且i16*
代表UTF-16代码点。
LLVM IR确实有一个“字符串文字”,其类型为i8
数组 - 例如c"hello world\0A\00"
为[13 x i8]
。但这并没有规定你应该使用什么字符串形式。
请记住,如果您的功能应与某些内容互操作,例如:托管C ++应用程序,然后您需要使用相同的字符串类型 - 在这种情况下,std::string
正在编译。您可以使用Clang或this online demo来检查该类型是什么。