2016-03-09 71 views
1

我是llvm的新手,想要做樂器。但我發現LLVM API只有原始類型,如:getInt32Ty(Ctx)..我想要使用getOrInsertFunction(),函數參數類型是字符串類型。衆所周知,當參數類型是int時,我們可以做到這一點就像是:如何在getOrInsertFunction()llvm中定義字符串類型?

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); 

string類型,我不知道如何界定它。總之,你能告訴我如何定義它,謝謝!

回答

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來檢查是什麼類型。

相關問題