don hinton via llvm-dev
2016-Sep-05 15:25 UTC
[llvm-dev] LLVM 3.8.0 - Adding new instruction to a basic block
Why not just use Instruction::insertAfter()? I->insertAfter(new_inst); On Mon, Sep 5, 2016 at 8:13 AM, Ryan Taylor via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Try incrementing the iterator before using. > > On Sep 5, 2016 10:26, "Simona Simona via llvm-dev" < > llvm-dev at lists.llvm.org> wrote: > >> On Mon, Sep 5, 2016 at 3:20 AM, Daniel Berlin <dberlin at dberlin.org> >> wrote: >> >>> >>> >>> On Sun, Sep 4, 2016 at 1:06 PM, Simona Simona via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> Hello, >>>> >>>> I'm trying to add a new instruction after a given instruction in a >>>> basic block. >>>> Until LLVM 3.7, I was using the following code: >>>> >>>> BB->getInstList().insertAfter(I, new_inst); >>>> [where both I and new_inst are Instruction*] >>>> >>>> In LLVM 3.8 however, the SymbolTableList was created as a wrapper over >>>> iplist. >>>> Could anyone please tell me how I can do the same type of insertion in >>>> LLVM 3.8? >>>> >>> >>> auto InsertPt = I->getIterator(); >>> BB->getInstList().insert(InsertPt, new_inst); >>> >>> >> Thanks, Daniel! >> >> In your example, isn't "insert" inserting "new_inst" *before* instruction >> "I"? >> As I would like to insert the "new_inst" instruction after "I", shouldn't >> it be >> BB->getInstList().insertAfter(InsertPt, new_inst); ? >> >> With insert I currently get the following error: >> Instruction does not dominate all uses! >> %0 = getelementptr inbounds i8, i8* getelementptr inbounds ([8 x >> i8], [8 x i8]* @1, i32 0, i32 0) >> call void @myCall(i8* %0) >> >> Regards, >> Simona >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160905/35546eb4/attachment.html>
Daniel Berlin via llvm-dev
2016-Sep-05 16:00 UTC
[llvm-dev] LLVM 3.8.0 - Adding new instruction to a basic block
This would work too, assuming the instruction is not linked anywhere currently. It's just doing what i wrote, with insertAfter() instead of insert() On Mon, Sep 5, 2016 at 8:25 AM, don hinton via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Why not just use Instruction::insertAfter()? > > I->insertAfter(new_inst); > > On Mon, Sep 5, 2016 at 8:13 AM, Ryan Taylor via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Try incrementing the iterator before using. >> >> On Sep 5, 2016 10:26, "Simona Simona via llvm-dev" < >> llvm-dev at lists.llvm.org> wrote: >> >>> On Mon, Sep 5, 2016 at 3:20 AM, Daniel Berlin <dberlin at dberlin.org> >>> wrote: >>> >>>> >>>> >>>> On Sun, Sep 4, 2016 at 1:06 PM, Simona Simona via llvm-dev < >>>> llvm-dev at lists.llvm.org> wrote: >>>> >>>>> Hello, >>>>> >>>>> I'm trying to add a new instruction after a given instruction in a >>>>> basic block. >>>>> Until LLVM 3.7, I was using the following code: >>>>> >>>>> BB->getInstList().insertAfter(I, new_inst); >>>>> [where both I and new_inst are Instruction*] >>>>> >>>>> In LLVM 3.8 however, the SymbolTableList was created as a wrapper over >>>>> iplist. >>>>> Could anyone please tell me how I can do the same type of insertion in >>>>> LLVM 3.8? >>>>> >>>> >>>> auto InsertPt = I->getIterator(); >>>> BB->getInstList().insert(InsertPt, new_inst); >>>> >>>> >>> Thanks, Daniel! >>> >>> In your example, isn't "insert" inserting "new_inst" *before* >>> instruction "I"? >>> As I would like to insert the "new_inst" instruction after "I", >>> shouldn't it be >>> BB->getInstList().insertAfter(InsertPt, new_inst); ? >>> >>> With insert I currently get the following error: >>> Instruction does not dominate all uses! >>> %0 = getelementptr inbounds i8, i8* getelementptr inbounds ([8 >>> x i8], [8 x i8]* @1, i32 0, i32 0) >>> call void @myCall(i8* %0) >>> >>> Regards, >>> Simona >>> >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >>> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160905/babd1437/attachment.html>
Simona Simona via llvm-dev
2016-Sep-05 16:54 UTC
[llvm-dev] LLVM 3.8.0 - Adding new instruction to a basic block
Yes, it worked with insertAfter(). Thank you all. Regards, Simona On Mon, Sep 5, 2016 at 6:00 PM, Daniel Berlin via llvm-dev < llvm-dev at lists.llvm.org> wrote:> This would work too, assuming the instruction is not linked anywhere > currently. > > It's just doing what i wrote, with insertAfter() instead of insert() > > > On Mon, Sep 5, 2016 at 8:25 AM, don hinton via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Why not just use Instruction::insertAfter()? >> >> I->insertAfter(new_inst); >> >> On Mon, Sep 5, 2016 at 8:13 AM, Ryan Taylor via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> Try incrementing the iterator before using. >>> >>> On Sep 5, 2016 10:26, "Simona Simona via llvm-dev" < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> On Mon, Sep 5, 2016 at 3:20 AM, Daniel Berlin <dberlin at dberlin.org> >>>> wrote: >>>> >>>>> >>>>> >>>>> On Sun, Sep 4, 2016 at 1:06 PM, Simona Simona via llvm-dev < >>>>> llvm-dev at lists.llvm.org> wrote: >>>>> >>>>>> Hello, >>>>>> >>>>>> I'm trying to add a new instruction after a given instruction in a >>>>>> basic block. >>>>>> Until LLVM 3.7, I was using the following code: >>>>>> >>>>>> BB->getInstList().insertAfter(I, new_inst); >>>>>> [where both I and new_inst are Instruction*] >>>>>> >>>>>> In LLVM 3.8 however, the SymbolTableList was created as a wrapper >>>>>> over iplist. >>>>>> Could anyone please tell me how I can do the same type of insertion >>>>>> in LLVM 3.8? >>>>>> >>>>> >>>>> auto InsertPt = I->getIterator(); >>>>> BB->getInstList().insert(InsertPt, new_inst); >>>>> >>>>> >>>> Thanks, Daniel! >>>> >>>> In your example, isn't "insert" inserting "new_inst" *before* >>>> instruction "I"? >>>> As I would like to insert the "new_inst" instruction after "I", >>>> shouldn't it be >>>> BB->getInstList().insertAfter(InsertPt, new_inst); ? >>>> >>>> With insert I currently get the following error: >>>> Instruction does not dominate all uses! >>>> %0 = getelementptr inbounds i8, i8* getelementptr inbounds ([8 >>>> x i8], [8 x i8]* @1, i32 0, i32 0) >>>> call void @myCall(i8* %0) >>>> >>>> Regards, >>>> Simona >>>> >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> llvm-dev at lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>> >>>> >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >>> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160905/0e78caa8/attachment.html>