<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Have you read the SSA link that David sent earlier? (i.e. <a href="https://en.wikipedia.org/wiki/Static_single_assignment_form" class="">https://en.wikipedia.org/wiki/Static_single_assignment_form</a> )</div><div class=""><br class=""></div>There is no such thing as a "LLVM register", or "variables". <div class="">The main concepts are the memory, and  *values* (like %sub in your example). The latter are *immutable*.</div><div class=""><br class=""></div><div class="">-- </div><div class="">Mehdi</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 18, 2016, at 2:49 AM, 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="">For eg:<div class=""><br class=""></div><div class="">c=a-b is represented using the following statements in IR:</div><div class=""><br class=""></div><div class="">  %tmp = load i32, i32* %a, align 4</div><div class="">  %tmp1 = load i32, i32* %b, align 4</div><div class="">  %sub = sub nsw i32 %tmp, %tmp1 <br class=""></div><div class="">  store i32 %sub, i32* %c, align 4</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">whenever there is a redundant computation of the same, say k=a-b (if the value of <b class="">a</b> and <b class="">b</b> are not changed) the code will be like this:</div><div class=""><br class=""></div><div class="">  %tmp2 = load i32, i32* %a, align 4</div><div class="">  %tmp3 = load i32, i32* %b, align 4</div><div class="">  <span style="background-color:rgb(255,255,255)" class="">%sub1 = sub nsw i32 %tmp2, %tmp3 </span><br class=""></div><div class=""> <span style="background-color:rgb(255,255,0)" class=""> store i32 %sub1, i32* %k, align 4</span></div><div class=""><br class=""></div><div class="">But this is not required, Since <b class="">a-b</b> is already there in that virtual register <b class="">%sub. </b>So I can rewrite the highlighted code ( eliminating redundancy ) as</div><div class=""><br class=""></div><div class=""><b class=""> store i32 <span style="background-color:rgb(255,255,0)" class="">%sub</span>, i32* %k, align 4</b></div><div class=""><b class=""><br class=""></b></div><div class="">and can delete the statement <b class="">%sub1 = sub nsw i32 %tmp2, %tmp3 </b></div><div class=""><b class=""><br class=""></b></div><div class="">But, If in case LLVM is reusing <b style="background-color:rgb(243,243,243)" class="">%sub </b><span style="background-color:rgb(243,243,243)" class="">in between to hold some other computations, then there will be some errors in my computation. So I want to make sure that LLVM won't reuse any of these virtual registers. </span></div><div class=""><span style="background-color:rgb(243,243,243)" class=""><br class=""></span></div><div class=""><span style="background-color:rgb(243,243,243)" class="">I hope it clarifies.</span></div><div class=""><br class=""></div><div class=""><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On 18 March 2016 at 13:39, mats petersson <span dir="ltr" class=""><<a href="mailto:mats@planetcatfish.com" target="_blank" class="">mats@planetcatfish.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class=""><br class=""><div class="gmail_extra"><br class=""><div class="gmail_quote"><span class="">On 18 March 2016 at 06:31, Ansar K.A. via llvm-dev <span dir="ltr" class=""><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">I meant LLVM registers. Thanks for the correcting me.</div></blockquote><div class=""><br class=""></div></span><div class="">But registers in LLVM-IR are in infinite supply, since the are virtual registers. Real registers appear when the IR is translated to machine instructions, and this is based on the live-range of the actual variables, so the same register will be re-used within the machine code. Reusing a virtual register is BAD because it will confuse the IR into thinking that your code is using the same thing for longer, and thus, potentially, make it use the same hardware register when two different ones could have been used.<br class=""><br class=""></div><div class="">Can you please explain what it is you want to achieve, as a bigger picture? Ideally with some example of some source, its generated IR and how you want it to be different?<br class=""><br class="">--<br class=""></div><div class="">Mats<br class=""></div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><div class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On 18 March 2016 at 10:42, David Blaikie <span dir="ltr" class=""><<a href="mailto:dblaikie@gmail.com" target="_blank" class="">dblaikie@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">Question is hard to understand - the registers in LLVM are in <a href="https://en.wikipedia.org/wiki/Static_single_assignment_form" target="_blank" class="">Static Single Assignment form</a>, they're not variables that can be assigned and reassigned values (so the answer to your question is probably "no"). It's best to look at what Clang does to see how IR can be used to represent constructs in C you may be more familiar with.</div><div class="gmail_extra"><br class=""><div class="gmail_quote"><span class="">On Thu, Mar 17, 2016 at 10:05 PM, Ansar K.A. via llvm-dev <span dir="ltr" class=""><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>></span> wrote:<br class=""></span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><div dir="ltr" class=""><div class="">In any case, Is there any chance for reusing <i class="">temporary variable </i>used in it's IR by LLVM ?<i class=""> </i><br class=""></div></div>
<br class=""></span>_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
<br class=""></blockquote></div><br class=""></div>
</blockquote></div><br class=""></div>
</div></div><br class="">_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
<br class=""></blockquote></span></div><br class=""></div></div>
</blockquote></div><br class=""></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>