<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>