<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Mar 1, 2017 at 7:17 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>I think I found out why: <a href="https://blogs.msdn.microsoft.com/vcblog/2013/09/11/introducing-gw-compiler-switch/" target="_blank">https://blogs.msdn.<wbr>microsoft.com/vcblog/2013/09/<wbr>11/introducing-gw-compiler-<wbr>switch/</a></div><div><br></div><div>"<em style="box-sizing:inherit;font-family:"segoe ui",segoeui,tahoma,sans-serif;font-size:14px;margin:0px;padding:0px;vertical-align:baseline;border:0px;outline:0px;color:rgb(69,69,69)">Please note</em><span style="color:rgb(69,69,69);font-family:wol_reg,"segoe ui",tahoma,arial,sans-serif;font-size:14px;background-color:rgb(255,255,255)">, the ICF optimization will only be applied for identical COMDATs where their address is not taken, and they are read only. If a data is not address taken, then breaking address uniqueness by ICF won’t lead to any observable difference, thus it is valid and conformant to the standard."</span></div></blockquote><div><br></div><div>Oh, interesting. So this is basically a more precise version of gold's safe ICF using whole-program information (similar to unnamed_addr in LLVM). That might be something we can do as well when LTO is enabled.</div><div><br></div><div>Peter</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5"><div><br><div class="gmail_quote"><div>On Wed, Mar 1, 2017 at 3:40 PM Peter Collingbourne via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">pcc added a comment.<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
In <a href="https://reviews.llvm.org/D30363#689809" rel="noreferrer" class="gmail-m_3995585577765334778gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D30363#689809</a>, @rnk wrote:<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
> In <a href="https://reviews.llvm.org/D30363#687837" rel="noreferrer" class="gmail-m_3995585577765334778gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D30363#687837</a>, @pcc wrote:<br class="gmail-m_3995585577765334778gmail_msg">
><br class="gmail-m_3995585577765334778gmail_msg">
> > Reid, I think you mentioned that you saw this problem only with LLD, do you have any more details?<br class="gmail-m_3995585577765334778gmail_msg">
><br class="gmail-m_3995585577765334778gmail_msg">
><br class="gmail-m_3995585577765334778gmail_msg">
> The one instance that I remember was <a href="http://crbug.com/635943" rel="noreferrer" class="gmail-m_3995585577765334778gmail_msg" target="_blank">http://crbug.com/635943</a>. I think there was one other issue much earlier on that didn't require a restructuring.<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
Standalone reproducer:<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>type icftest.cc<br class="gmail-m_3995585577765334778gmail_msg">
  #include <stdio.h><br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  extern const wchar_t foo[];<br class="gmail-m_3995585577765334778gmail_msg">
  extern const wchar_t bar[];<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  const wchar_t foo[] = L"";<br class="gmail-m_3995585577765334778gmail_msg">
  const wchar_t bar[] = L"";<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  int main() {<br class="gmail-m_3995585577765334778gmail_msg">
    printf("%p %p\n", &foo, &bar);<br class="gmail-m_3995585577765334778gmail_msg">
  }<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>cl /Gw /O2 /c icftest.cc<br class="gmail-m_3995585577765334778gmail_msg">
  Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64<br class="gmail-m_3995585577765334778gmail_msg">
  Copyright (C) Microsoft Corporation.  All rights reserved.<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  icftest.cc<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>link icftest.obj /opt:icf<br class="gmail-m_3995585577765334778gmail_msg">
  Microsoft (R) Incremental Linker Version 14.00.24215.1<br class="gmail-m_3995585577765334778gmail_msg">
  Copyright (C) Microsoft Corporation.  All rights reserved.<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>icftest<br class="gmail-m_3995585577765334778gmail_msg">
  000000013F2C12C0 000000013F2C12C4<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>..\llvm-<wbr>project\ra\bin\lld-link icftest.obj /opt:icf<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
  C:\src\icftest>icftest<br class="gmail-m_3995585577765334778gmail_msg">
  000000013FC02088 000000013FC02088<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
So it does appear that MSVC's behaviour is not as documented at least some of the time. In that case I think I'd be fine with this change with an explanatory comment.<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<a href="https://reviews.llvm.org/D30363" rel="noreferrer" class="gmail-m_3995585577765334778gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D30363</a><br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
<br class="gmail-m_3995585577765334778gmail_msg">
</blockquote></div></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div></div>