2014-03-12 48 views
0

我想插入LLVM IR格式的添加指令,如x = x + 1,其中x是全局變量。我曾經嘗試這樣做:如何在紅外文件llvm中插入添加指令?

GlobalVariable* x = new GlobalVariable(mod,Type::getInt32Ty(Context),false,GlobalValue::CommonLinkage,0,"xCounter"); 

Value one = ConstantInt::get(Type::getInt32Ty(Context),1); 
newInst = BinaryOperator::Create(Instruction::Add, , one ,"counter", insertPos); 

但發生錯誤,它不接受類型GlobalVariable

如何定義全局變量並設置其值?

+0

你的最後一行 - 如何打印 - 真的是它自己的問題。我從這個問題中刪除了它,你應該單獨提出。 – Oak

回答

1

全局變量總是指針 - 在你的情況下,它的類型將是i32*。您需要先從load開始,然後才能與add之間進行任何操作。然後您必須使用store新值,並使用全局變量作爲存儲地址。

這和局部變量一樣,順便說一下 - alloca值總是指針。

+0

爲什麼我需要在使用它之前從內存中加載全局變量,在我的情況下,初始值是常數零,以及如何在add指令中使用它? –

+0

@ user3411138當你有一個指針時 - 正如我寫的,全局變量總是指針 - 那麼你需要首先從它們加載值,然後才能使用它。 – Oak