Nun, heute entdeckte ich die llc -march CPP-Tool = und half mir wirklich viel, also werde ich hier beantworten, was ich am Ende tat
das Array (dafür brauchen wir die Art zuerst):
auto arrayType = llvm::ArrayType::get(llvm::IntegerType::get(context, 32), size);
auto arrayPtr = new llvm::AllocaInst(arrayType, "", block);
jetzt werden wir einige Werte in das Array speichern, für die wir auf ganze Zahlen müssen (das GetElementPtr Handbuch lesen zu wissen, dass jeder von ihnen tun), wird die zweite ganze Zahl des Index (wie in Array sagen [index]):
auto zero = llvm::ConstantInt::get(context, llvm::APInt(64, 0, true));
auto index = llvm::ConstantInt::get(context, llvm::APInt(32, INDEX, true));
wir jetzt auf das Element in der Anordnung und Laden, um etwas darauf zeigen können, (wir werden den gleichen Index speichern, wie in array [index] = index):
auto ptr = llvm::GetElementPtrInst::Create(arrayPtr, { zero, index }, "", block);
auto store = new llvm::StoreInst(index, ptr, false, block);
, dass Sie das Array für jedes Element .
Nun zu laden, müssen Sie unter der Annahme eine llvm :: Wert als Index (was mein Fall war, und ExtractElementInst dass nicht handhaben, soweit ich zumindest wissen, ...):
zuerst erhalten eine ptr auf das Element (wie vorher):
ptr = llvm::GetElementPtrInst::Create(arrayPtr, { zero, index }, "", block);
und den Wert bis zu einem gewissen Variable laden:
auto value = builder.CreateLoad(ptr);
Es gibt eine Sache, die ich gelernt habe, Sie können nicht einfach Arrays variabler Länge erstellen, Sie müssen einige Stapeltricks verwenden, die ich eigentlich noch nicht benutzen kann, aber wenn Sie es wissen wollen, hier sind die folgenden Anweisungen: http://llvm.org/docs/LangRef.html#llvm-stacksave-intrinsic
Versuchen Sie diesen einfachen Code kompiliert:
int n = 5; int Array [n];
mit clang -S -llvm-emit your-file.c
Und Sie werden diese Anweisungen sehen.
Bitte geben Sie genau an, was Sie ausprobiert haben und insbesondere, in welcher Weise es nicht funktioniert hat. –
Nun, das ist die Sache, ich weiß nicht wirklich, was zu tun ist, wie kann ich einen Zeiger auf ein Element des Arrays bekommen, und danach lesen/speichern? – Shelo
für Array-Typ und Laden mit extractelement siehe http://stackoverflow.com/questions/9637803/accessing-elements-in-llvm-arrays und für GetElementPointer können Sie http://llvm.org/docs/GetElementPtr.html –