<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Ansar<br>
    <br>
    <blockquote type="cite">
      <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>
    </blockquote>
    The simple answer is: yes, you can be sure that %sub will not be
    reassigned, it's immutable.<br>
    Anyway, as Mehdi mentioned it's good to read the docs.<br>
    <br>
    Best,<br>
    Stefan<br>
    <br>
    <div class="moz-cite-prefix">Am 18.03.16 um 11:06 schrieb Mehdi
      Amini via llvm-dev:<br>
    </div>
    <blockquote
      cite="mid:9A8DB12E-9C0A-4983-A5F9-B638493CA2E2@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div class="">Have you read the SSA link that David sent earlier?
        (i.e. <a moz-do-not-send="true"
          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 moz-do-not-send="true"
                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
                      moz-do-not-send="true"
                      href="mailto:mats@planetcatfish.com"
                      target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:mats@planetcatfish.com">mats@planetcatfish.com</a></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
                                moz-do-not-send="true"
                                href="mailto:llvm-dev@lists.llvm.org"
                                target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a></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
                                          moz-do-not-send="true"
                                          href="mailto:dblaikie@gmail.com"
                                          target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a></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
                                            moz-do-not-send="true"
                                            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
                                                  moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org" target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a></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 moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br
                                                class="">
                                              <a moz-do-not-send="true"
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 moz-do-not-send="true"
                                href="mailto:llvm-dev@lists.llvm.org"
                                target="_blank" class="">llvm-dev@lists.llvm.org</a><br
                                class="">
                              <a moz-do-not-send="true"
                                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 moz-do-not-send="true"
                href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br
                class="">
              <a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br
                class="">
            </div>
          </blockquote>
        </div>
        <br class="">
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>