<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 10/2/2017 3:11 PM, Riyaz
      Puthiyapurayil via llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:2E9641F151173C4A94E707F5DEEEC62A01023A3E67@US01WEMBX2.internal.synopsys.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal">I have some programs crashing when I
          upgraded from clang 3.9.1 to clang 4.0.1.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Debugging this I found the reason for the
          crash. This is happening in the following assembly fragment
          for a piece of code allocating a class object (size: 24 bytes)
          using operator new and then initializing it:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span style="font-family:Consolas">  
            0x00002aaaafc145f3 <+35>:    callq  0x2aaaafdf5f90
            <operator new(unsigned long)><o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas">  
            0x00002aaaafc145f8 <+40>:    mov    %rax,%r13<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas">  
            0x00002aaaafc145fb <+43>:    xorps  %xmm0,%xmm0<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas">=>
            0x00002aaaafc145fe <+46>:   
            <span style="color:red">movaps %xmm0,0x0(%r13)</span><o:p></o:p></span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The value in %r13 (from the return value of
          operator new) is not appropriately aligned causing the crash.
          The memory allocation is done by a custom memory allocator
          that is returning 8-byte aligned blocks. The memory allocator
          has not changed between the two versions of the program (the
          one using clang 3.9.1 versus the one using clang 4.0.1). The
          version of libstdc++ is also the same. The command line
          options to clang are unchanged (-msse2 is specified in both
          cases). But I found that clang 3.9.1 is not generating SSE
          instructions but clang 4.0.1 is generating them in the above
          case.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The fix in our code is to make an API call
          to configure the custom allocator to always return
          appropriately aligned memory. But I would like to know if
          there is a known change in LLVM or clang to assume that malloc
          will return > 8 byte aligned memory based on the allocation
          size  or if this has always been the case. I want to know if
          my program compiled with 3.9.1 also has a problem that was
          just not exposed in testing.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
    </blockquote>
    <br>
    We started optimizing global operator new more aggressively in
    <a class="moz-txt-link-freetext" href="https://reviews.llvm.org/rL283789">https://reviews.llvm.org/rL283789</a>.<br>
    <br>
    -Eli<br>
    <pre class="moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
  </body>
</html>