我不知道如何在LLVM中創建ConstantInt - 我知道我想創建的數字,但我不確定如何使ConstantInt表示該數字;我似乎無法在文檔中找到我需要的構造函數。如何在LLVM中創建ConstantInt?
我想那一定是沿着
ConstantInt consVal = new ConstantInt(something here).
我知道,我想這是一個int類型的線,我知道我的價值......我只是想創建一個數字!
我不知道如何在LLVM中創建ConstantInt - 我知道我想創建的數字,但我不確定如何使ConstantInt表示該數字;我似乎無法在文檔中找到我需要的構造函數。如何在LLVM中創建ConstantInt?
我想那一定是沿着
ConstantInt consVal = new ConstantInt(something here).
我知道,我想這是一個int類型的線,我知道我的價值......我只是想創建一個數字!
LLVM中的大部分內容都是通過靜態方法調用創建的,而不是直接使用構造函數。原因之一是可以返回現有對象而不是創建新實例。
static members of ConstantInt有許多創建方法。你可能最感興趣的是get (Type *Ty, uint64_t V, bool isSigned=false)
,如果你還沒有整數類型的話,IntegerType::get (LLVMContext &C, unsigned NumBits)
。
那麼我將如何去創建它?我目前正在嘗試 ConstantInt :: get(Int64Ty,iVal) 而那不工作......我得到的是我如何告訴它它是一個沒有它抱怨我的Int64Type。我試過類型:: Int64Ty和其他變種沒有成功。 – winepretzel 2013-04-27 04:11:35
@winepretzel如果你遇到編譯錯誤或類似問題,你應該添加你正在嘗試的代碼和錯誤信息。 – 2013-04-27 16:05:50
若要使一個32位整數:
llvm::ConstantInt::get(context, llvm::APInt(/*nbits*/32, value, /*bool*/is_signed));
要創建32-bit
整數常數:
llvm::Type *i32_type = llvm::IntegerType::getInt32Ty(llvm_context);
llvm::Constant *i32_val = llvm::ConstantInt::get(i32_type, -1/*value*/, true);
ConstantInt* const_int32 = ConstantInt::get(Context , APInt(32, StringRef("10"), 10));
其中, APINT(32,StringRef( 「10」), 10); 從基數爲10的字符串「10」獲得int值。
這可能有所幫助:http://stackoverflow.com/questions/9196009/set-value-for-llvmconstantint – acdcjunior 2013-04-27 00:44:47