[llvm-dev] SSE instructions and alignment of the return value of 'new'
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 2 17:15:10 PDT 2017
On 10/2/2017 3:11 PM, Riyaz Puthiyapurayil via llvm-dev wrote:
>
> I have some programs crashing when I upgraded from clang 3.9.1 to
> clang 4.0.1.
>
> 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:
>
> 0x00002aaaafc145f3 <+35>: callq 0x2aaaafdf5f90 <operator
> new(unsigned long)>
>
> 0x00002aaaafc145f8 <+40>: mov %rax,%r13
>
> 0x00002aaaafc145fb <+43>: xorps %xmm0,%xmm0
>
> => 0x00002aaaafc145fe <+46>: movaps %xmm0,0x0(%r13)
>
> 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.
>
> 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.
>
We started optimizing global operator new more aggressively in
https://reviews.llvm.org/rL283789.
-Eli
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171002/a18ffbc4/attachment.html>
More information about the llvm-dev
mailing list