<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <br>
    <div class="moz-cite-prefix">On 01/04/2016 12:54 PM, Mehdi Amini via
      llvm-dev wrote:<br>
    </div>
    <blockquote
      cite="mid:394F484F-0E7A-4163-BC51-8FC129EC590D@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <br class="">
      <div>
        <blockquote type="cite" class="">
          <div class="">On Jan 4, 2016, at 12:53 PM, Mehdi Amini 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 style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; orphans: auto; text-align:
              start; text-indent: 0px; text-transform: none;
              white-space: normal; widows: auto; word-spacing: 0px;
              -webkit-text-stroke-width: 0px;" class="">
              <blockquote type="cite" class="">
                <div class=""><br class="Apple-interchange-newline">
                  On Jan 4, 2016, at 9:55 AM, Amaury SECHET 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=""><br class="">
                    <div class="gmail_extra"><br class="">
                      <div class="gmail_quote">2016-01-04 18:21
                        GMT+01:00 Philip Reames<span
                          class="Apple-converted-space"> </span><span
                          dir="ltr" class=""><<a
                            moz-do-not-send="true"
                            href="mailto:listmail@philipreames.com"
                            target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:listmail@philipreames.com">listmail@philipreames.com</a></a>></span>:<br
                          class="">
                        <blockquote class="gmail_quote" style="margin:
                          0px 0px 0px 0.8ex; border-left-width: 1px;
                          border-left-style: solid; border-left-color:
                          rgb(204, 204, 204); padding-left: 1ex;">
                          <div text="#000000" bgcolor="#FFFFFF" class=""><span
                              class="">
                              <div class="">On 01/04/2016 07:32 AM,
                                Amaury SECHET wrote:<br class="">
                              </div>
                              <blockquote type="cite" class="">
                                <div dir="ltr" class="">
                                  <div class="">
                                    <div class="">After a bit more
                                      investigation, it turns out that
                                      because %0 is stored into %1
                                      (after bitcast) and so %3 may have
                                      access to it and clobber it.<br
                                        class="">
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </span>Can you give a bit more context?  I'm
                            not sure which of the examples you're
                            talking about.<br class="">
                            <br class="">
                          </div>
                        </blockquote>
                        <div class=""><br class="">
                        </div>
                        <div class="">Sure. Let's look at<span
                            class="Apple-converted-space"> </span><a
                            moz-do-not-send="true"
                            href="http://pastebin.com/K0J9yGq1" class=""><a class="moz-txt-link-freetext" href="http://pastebin.com/K0J9yGq1">http://pastebin.com/K0J9yGq1</a></a><br
                            class="">
                          <br class="">
                        </div>
                        <div class="">Because of the store line 7, it is
                          assumed that the call line 8 may see %0 and
                          even modify the memory it points to. As a
                          result, it is assumed that the load line 11
                          may not be eliminated.<br class="">
                          <br class="">
                        </div>
                        <div class="">Which seems actually correct in
                          the general case.<br class="">
                          <br class="">
                        </div>
                        <blockquote class="gmail_quote" style="margin:
                          0px 0px 0px 0.8ex; border-left-width: 1px;
                          border-left-style: solid; border-left-color:
                          rgb(204, 204, 204); padding-left: 1ex;">
                          <div text="#000000" bgcolor="#FFFFFF" class=""><span
                              class=""><br class="">
                              <blockquote type="cite" class="">
                                <div dir="ltr" class="">
                                  <div class="">
                                    <div class=""><br class="">
                                    </div>
                                    After a bit of thought, it is
                                    correct in the general case, but
                                    definitively something stricter is
                                    needed here. Looking at<span
                                      class="Apple-converted-space"> </span><tt
                                      class=""><span class="">inaccessiblememonly</span></tt><span
                                      class="Apple-converted-space"> </span>I'm
                                    not sure this is what is needed.
                                    What if the memory allocator is
                                    defined is the current module ?<br
                                      class="">
                                  </div>
                                </div>
                              </blockquote>
                            </span>At the moment, inaccessiblememonly
                            would require separate compilation of the
                            allocation function. <span
                              class="Apple-converted-space"> </span><br
                              class="">
                            <span class="">
                              <blockquote type="cite" class="">
                                <div dir="ltr" class="">
                                  <div class=""><br class="">
                                  </div>
                                  This leads me to conclude this is way
                                  more linked to the memory allocation
                                  pass than I expected it to be in the
                                  first place. Can I ask what you plan
                                  to use<span
                                    class="Apple-converted-space"> </span><tt
                                    class=""><span class="">inaccessiblememonly</span></tt><span
                                    class="Apple-converted-space"> </span>for
                                  ? Should the semantic be refined to
                                  fit the bill better ?<br class="">
                                </div>
                              </blockquote>
                            </span>Well, I didn't introduce the
                            attribute, so I can't speak for the original
                            intent.  For me, I plan on applying it to
                            some of our out of line allocation functions
                            and other helper routines which modify
                            runtime state, but not java visible state. <span
                              class="Apple-converted-space"> </span><br
                              class="">
                            <br class="">
                            If you have specific suggestions for how to
                            refine the semantics, please make them. 
                            Getting the details right is always the hard
                            part.  :)<br class="">
                            <br class="">
                            You might also consider using a variant of
                            your allocation function which takes a
                            pointer to the global state it needs to
                            modify.  Doing this would allow you to use
                            argmemonly to restrict the aliasing while
                            still allowing whole program optimization. 
                            I haven't tried this in practice, but it
                            seems like it would probably work...<span
                              class=""><br class="">
                            </span></div>
                        </blockquote>
                        <div class=""><br class="">
                        </div>
                        <div class="">I do not wish to make suggestion
                          before I understand where this is coming from.
                          So far, from what I've collected, use cases
                          are:<br class="">
                        </div>
                        <div class=""> - Memory allocation<br class="">
                        </div>
                        <div class=""> - Runtime isolation for managed
                          languages.<br class="">
                        </div>
                        <div class=""><br class="">
                        </div>
                        <div class="">I have some more though to put
                          into this, but to boot, would that be possible
                          to only use this attribute on method that are
                          declared, but not defined and remove it when
                          merging modules ? It doesn't look like it is
                          necessary to have it when the function may be
                          exposed depending on the way the software is
                          built.<br class="">
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </blockquote>
              <div class=""><br class="">
              </div>
            </div>
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; orphans: auto; text-align:
              start; text-indent: 0px; text-transform: none;
              white-space: normal; widows: auto; word-spacing: 0px;
              -webkit-text-stroke-width: 0px; float: none; display:
              inline !important;" class="">We can imagine a function
              defined in the current module, that does not modify any
              global, but calls malloc. Could it be inferred the
              argmemonly?</span></div>
        </blockquote>
        <br class="">
      </div>
      <div>I meant inaccessiblememonly instead of argmemonly…</div>
    </blockquote>
    I believe that it should be yes.  (If we had malloc marked as
    inaccessiblememonly which we don't currently.)<br>
    <blockquote
      cite="mid:394F484F-0E7A-4163-BC51-8FC129EC590D@apple.com"
      type="cite">
      <div><br class="">
      </div>
      <div>— </div>
      <div>Mehdi</div>
      <div><br class="">
      </div>
      <br class="">
      <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>