<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Ping.<br>
      <br>
      On 2/6/2013 8:15 AM, Matthew Curtis wrote:<br>
    </div>
    <blockquote cite="mid:5112658A.8060001@codeaurora.org" type="cite">Hello
      all,
      <br>
      <br>
      This patch helps resolve a couple of issues we encountered while
      <br>
      porting the Polly plug-in to Windows.
      <br>
      <br>
      The Polly plugin depends on some LLVM Passes which it identifies
      via
      <br>
      Pass IDs. Pass IDs are implemented as the address of a static
      member
      <br>
      variable (ID) of the Pass. On Windows however, there seems to be a
      bug
      <br>
      in the Visual Studio compiler or linker that results in multiple
      <br>
      dll-local copies of this data when referenced directly. The result
      is
      <br>
      that Polly is unable to locate Passes that are part of the
      executable
      <br>
      it is being loaded into.
      <br>
      <br>
      As a work around, this patch adds getters (GetClassPassID) for the
      <br>
      Pass IDs used by Polly. The symbols for the globals are not
      <br>
      exported. The getters are exported and Polly uses them instead.
      <br>
      <br>
      Removing use of global data by the Polly plug-in also makes it
      <br>
      possible to delay load LLVM symbols from the containing executable
      <br>
      which in turn removes the restriction that the executable have a
      <br>
      specific name (determined at link-time).
      <br>
      <br>
      We also considered a couple alternatives to this minimal patch:
      <br>
      <br>
      1) Update *all* Passes to provide GetClassPassID in lieu of ID.
      <br>
      <br>
         This leaves the code in the cleanest state and would be a good
      <br>
         choice if starting from scratch. However I started implementing
      it
      <br>
         and it turns out to have a very large ripple effect. Not only
      does
      <br>
         it require changing a large number of files in LLVM, but it
      breaks
      <br>
         source compatibility for passes that are not part of the LLVM
      <br>
         source.
      <br>
      <br>
         That being said, I'd be willing to do the work if everyone
      thinks
      <br>
         that's the right thing to do and we're willing break source
      <br>
         compatibility.
      <br>
      <br>
         Perhaps we could ease the pain by deprecating ID for some time
      <br>
         before removing it.
      <br>
      <br>
      2) Add GetClassPassID to Passes accessible by plug-ins (i.e. those
      <br>
         under include/llvm), but leave ID as it is.
      <br>
      <br>
         As with the proposed patch, this may cause confusion because
      there
      <br>
         are multiple ways of getting a Pass's ID. But at least it's not
      <br>
         specific to the Polly plug-in and other plug-ins on Windows may
      <br>
         benefit.
      <br>
      <br>
      Thanks,
      <br>
      Matthew Curtis
      <br>
      <br>
      BTW, there's a brief related discussion on llvm-dev here:
      <br>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-January/058838.html">http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-January/058838.html</a>
      <br>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-February/thread.html#58982">http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-February/thread.html#58982</a>
      <br>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
llvm-commits mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a>
</pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation</pre>
  </body>
</html>