<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi,<div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Nov 25, 2015, at 7:05 PM, Ansar K.A. via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><span style="font-size:12.8px" class="">Hi,</span><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class="">I was trying to create a new <b class="">Store</b> instruction and inserting it to LLVM IR (.ll) file. I found the following constructor in LLVM Manual:</div><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class=""><table style="font-family:'Lucida Grande',Verdana,Geneva,Arial,sans-serif;font-size:13px;line-height:16.9px;white-space:nowrap;font-weight:bold;margin-left:6px;color:rgb(37,53,85)" class=""><tbody class=""><tr class=""></tr><tr class=""><td style="margin-left:6px" class=""><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1StoreInst.html#aa2a72f9a51b317f5b4ab8695adf59025" target="_blank" style="color:rgb(70,101,162)" class="">StoreInst::StoreInst</a></td><td class="">(</td><td class=""><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html" target="_blank" style="color:rgb(70,101,162)" class="">Value</a> * </td><td style="color:rgb(96,32,32)" class="">Val,</td></tr><tr class=""><td style="text-align:right" class=""></td><td class=""></td><td class=""><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html" target="_blank" style="color:rgb(70,101,162)" class="">Value</a> * </td><td style="color:rgb(96,32,32)" class="">Ptr,</td></tr><tr class=""><td style="text-align:right" class=""></td><td class=""></td><td class=""><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1Instruction.html" target="_blank" style="color:rgb(70,101,162)" class="">Instruction</a> * </td><td style="color:rgb(96,32,32)" class="">InsertBefore </td></tr><tr class=""><td class=""></td><td class="">)<br class=""><br class=""></td></tr></tbody></table></div><div style="font-size:12.8px" class="">I thought of using this. I don't know the meaning of the constructors arguments. What all values should be passed for creating a new <b class="">Store </b>Instruction (with an <i class="">example) </i>?</div></div></div></blockquote><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class="">How to insert this to LLVM IR? ( I saw the code snippet in LLVM Programming manual, I couldn't understand it. Any examples on doing the same? )</div></div></div></blockquote><div><br class=""></div><div><br class=""></div><div><div>- Val is the value you want to store.</div><div>- Ptr is the location where you want to store the value Val.</div><div>- InsertBefore is an optional pointer to an existing instruction, if it is provided the newly created instruction will be just before the provided one.</div><div><br class=""></div><div>Also you may want to use the IRBuilder in general to create IR, you may want to follow the Kaleidoscope tutorial at least once (Creating a Store is done chapter 7: <a href="http://llvm.org/docs/tutorial/LangImpl7.html" class="">http://llvm.org/docs/tutorial/LangImpl7.html</a> )</div></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class="">I tried to delete an instruction using:</div><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class=""> i->eraseFromParent();</div></div></div></blockquote><div><br class=""></div><div><br class=""></div><div>From the trace it does not seem that this call is leading to the assert. You’re not giving enough information about what you’re doing here. It could be some iterator invalidation for example.</div><div><br class=""></div><div>— </div><div>Mehdi</div><div><br class=""></div><div><br class=""></div><div><br class=""></div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class="">But it throws the following error/exception:</div><div style="font-size:12.8px" class=""><br class=""></div><div class=""><div class=""><span style="font-size:12.8px" class=""><b class="">opt -load /home/mtech2/Documents/llvm/build/Debug+Asserts/lib/CSE.so -CSE <test.ll> /dev/null</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">opt: /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:81: static bool llvm::isa_impl_cl<To, From*>::doit(const From*) [with To = llvm::Instruction; From = llvm::Instruction]: Assertion `Val && "isa<> used on a null pointer"' failed.</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#0 0x29635a5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/mtech2/Documents/llvm/llvm/lib/Support/Unix/Signals.inc:405:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#1 0x29638ba PrintStackTraceSignalHandler(void*) /home/mtech2/Documents/llvm/llvm/lib/Support/Unix/Signals.inc:463:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#2 0x2961eb9 llvm::sys::RunSignalHandlers() /home/mtech2/Documents/llvm/llvm/lib/Support/Signals.cpp:34:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#3 0x29623b1 SignalHandler(int) /home/mtech2/Documents/llvm/llvm/lib/Support/Unix/Signals.inc:211:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#4 0x7f190977a340 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x10340)</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#5 0x7f1908715cc9 gsignal /build/buildd/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#6 0x7f19087190d8 abort /build/buildd/eglibc-2.19/stdlib/abort.c:91:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#7 0x7f190870eb86 __assert_fail_base /build/buildd/eglibc-2.19/assert/assert.c:92:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#8 0x7f190870ec32 (/lib/x86_64-linux-gnu/libc.so.6+0x2fc32)</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#9 0x7f19084d9970 llvm::isa_impl_cl<llvm::Instruction, llvm::Instruction*>::doit(llvm::Instruction const*) /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:82:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#10 0x7f19084d9450 llvm::isa_impl_wrap<llvm::Instruction, llvm::Instruction*, llvm::Instruction*>::doit(llvm::Instruction* const&) /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:123:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#11 0x7f19084d89e2 llvm::isa_impl_wrap<llvm::Instruction, llvm::ilist_iterator<llvm::Instruction> const, llvm::Instruction*>::doit(llvm::ilist_iterator<llvm::Instruction> const&) /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:115:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#12 0x7f19084d8371 bool llvm::isa<llvm::Instruction, llvm::ilist_iterator<llvm::Instruction> >(llvm::ilist_iterator<llvm::Instruction> const&) /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:135:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#13 0x7f19084d7ba1 llvm::cast_retty<llvm::Instruction, llvm::ilist_iterator<llvm::Instruction> >::ret_type llvm::cast<llvm::Instruction, llvm::ilist_iterator<llvm::Instruction> >(llvm::ilist_iterator<llvm::Instruction>&) /home/mtech2/Documents/llvm/llvm/include/llvm/Support/Casting.h:230:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#14 0x7f19084d73fd (anonymous namespace)::CSE::runOnFunction(llvm::Function&) /home/mtech2/Documents/llvm/llvm/lib/Transforms/CSE/CSE.cpp:48:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#15 0x288fd1c llvm::FPPassManager::runOnFunction(llvm::Function&) /home/mtech2/Documents/llvm/llvm/lib/IR/LegacyPassManager.cpp:1528:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#16 0x288feaf llvm::FPPassManager::runOnModule(llvm::Module&) /home/mtech2/Documents/llvm/llvm/lib/IR/LegacyPassManager.cpp:1549:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#17 0x289024a (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/mtech2/Documents/llvm/llvm/lib/IR/LegacyPassManager.cpp:1605:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#18 0x28909bb llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/mtech2/Documents/llvm/llvm/lib/IR/LegacyPassManager.cpp:1708:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#19 0x2890bfb llvm::legacy::PassManager::run(llvm::Module&) /home/mtech2/Documents/llvm/llvm/lib/IR/LegacyPassManager.cpp:1740:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#20 0xee3bd2 main /home/mtech2/Documents/llvm/llvm/tools/opt/opt.cpp:602:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#21 0x7f1908700ec5 __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:321:0</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">#22 0xec1739 _start (/home/mtech2/Documents/llvm/build/Debug+Asserts/bin/opt+0xec1739)</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">Stack dump:</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">0.<span class="" style="white-space:pre"> </span>Program arguments: opt -load /home/mtech2/Documents/llvm/build/Debug+Asserts/lib/CSE.so -CSE </b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">1.<span class="" style="white-space:pre"> </span>Running pass 'Function Pass Manager' on module '<stdin>'.</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">2.<span class="" style="white-space:pre"> </span>Running pass 'Print Instructions' on function '@main'</b></span></div><div class=""><span style="font-size:12.8px" class=""><b class="">Aborted (core dumped)</b></span></div><div style="font-size:12.8px" class=""><br class=""></div></div><div style="font-size:12.8px" class="">Any help will be appreciated.</div><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class=""><br class=""></div><div style="font-size:12.8px" class="">- Ansar K.A.</div></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></blockquote></div><br class=""></div></body></html>