<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;" dir="ltr">
<p>Hi,</p>
<p><br>
</p>
<p>I am trying to delete a range of instructions ( specified as between [startIns , endIns) ) .<br>
the endIns may not be in the same basic block as the start.<br>
<br>
I keep getting the following error when trying to delete the last instruction in - <br>
</p>
<div><b>reference llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, false>::operator*() const [OptionsT = llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, IsReverse = false, IsConst =
 false]: Assertion `!NodePtr->isKnownSentinel()' failed.</b></div>
<div><b><br>
</b></div>
<div><b><br>
</b></div>
<div><u><b>Following is my C++ code </b></u>- </div>
<div><br>
</div>
<div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// delete all instructions between [start,end)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>void deleteAllInstructionsInRange(Instruction* startInst,Instruction* endInst)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>BasicBlock::iterator it(startInst);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>BasicBlock::iterator it_end(endInst);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>Instruction* currentInst ;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>Instruction* lastInst ;</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>while(it != it_end)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>currentInst = &*it;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>++it;</div>
<div><br>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if (!currentInst->use_empty())</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{ <span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>currentInst->replaceAllUsesWith(UndefValue::get(currentInst->getType()));</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>currentInst->eraseFromParent();</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<br>
<br>
<u><b>Following is my IR </b></u>- <br>
<div><br>
</div>
<div>define i32 @test2() {</div>
<div>entry:</div>
<div>  %calltmp = call i32 @UInt()</div>
<div>  %datasize = alloca i32</div>
<div>  switch i32 %calltmp, label %sw.bb.0 [</div>
<div>    i32 1, label %sw.bb.1</div>
<div>    i32 2, label %sw.bb.2</div>
<div>    i32 3, label %sw.bb.3</div>
<div>  ]</div>
<div>
<div>; %res = alloca i8 <span style="color: rgb(255, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">------> deleted
 this</span></div>
<div> ; store i8 0, i8* %res <span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;"> </span><span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; color: rgb(255, 0, 0);">------> deleted
 this</span></div>
<div>  ;%datasize1 = load i32, i32* %datasize <span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;"> </span><span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; color: rgb(255, 0, 0);">------> deleted
 this</span></div>
<div>  ;ret i32 %datasize1 <span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;"> </span><span style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; color: rgb(255, 0, 0);">------> deleted
 this</span></div>
</div>
<div> <span style="color: rgb(255, 0, 0);"> ret i32 undef ------> Unable to delete this</span></div>
<div><br>
</div>
<div>sw.bb.0:                                          ; preds = %entry</div>
<div>  %resclone0 = alloca i10</div>
<div>  store i10 0, i10* %resclone0</div>
<div>  %datasize1clone0 = load i32, i32* %datasize</div>
<div>  ret i32 %datasize1clone0</div>
<div><br>
</div>
<br>
Any help will be appreciated.</div>
<div><br>
</div>
<div>Thanks.</div>
<div><br>
</div>
<br>
<p></p>
</div>
</body>
</html>