5
LLVM IRBuilder函數SetInsertPoint(指令* I)指定應在指定指令之前插入創建的指令。LLVM IRBuilder:在特定指令後設置插入點
在特定指令之後如何設置插入點?我找不到可以直接執行的功能。
LLVM IRBuilder函數SetInsertPoint(指令* I)指定應在指定指令之前插入創建的指令。LLVM IRBuilder:在特定指令後設置插入點
在特定指令之後如何設置插入點?我找不到可以直接執行的功能。
插入點不能設置爲在給定指令之後 - 相反,您應該將其設置爲在下一條指令之前。
爲了獲得一個指向下一個指令,可以使用getNextNode()
方法,可以用Instruction
:
Builder.SetInsertPoint(I->getNextNode());
,或者你可以把指令指針變成一個迭代器和推進它:
BasicBlock::iterator it(I);
it++;
Builder.SetInsertPoint(it);
正是我在找的東西。謝謝。爲什麼我們應該在下一條指令之前設置它,而不是之後呢? – Prateek
@Prateek只是一個猜測 - 概念上。如果插入點位於指令之前,則可以按順序插入一堆指令,插入點不需要更改。如果插入點位於指令之後,那麼除非在每個插入點之間插入點前移,否則插入的每條新指令都應位於最後一條插入點之前(緊接原始插入點之後)。所以你會反向插入指令。 –
這很有道理。花了幾分鐘的時間思考即使在閱讀您的評論。我想我現在明白了。謝謝@Ismail – Prateek