[llvm-dev] [RFC] [X86] Emit unaligned vector moves on avx machine with option control.
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Wed Apr 14 15:43:43 PDT 2021
+1 to what James said. My reaction to the original proposal is a strong
-1, and James did a good job of explaining why.
Philip
On 4/14/21 11:57 AM, James Y Knight via llvm-dev wrote:
> This is not a principled change -- it avoids a problem arising from
> /one/ use of alignment information, but there are other uses of
> alignment in LLVM, and those will still cause problems, potentially
> less clearly. So, I think that this will not be a useful option to
> provide to users, in this form.
>
> What I suspect you /actually/ want here is an option to tell Clang not
> to infer load/store alignments based on object types or alignment
> attributes -- instead treating everything as being potentially aligned
> to 1 unless the allocation is seen (e.g. global/local variables).
> Clang would still need to use the usual alignment computation for
> variable definitions and structure layout, but not memory operations.
> If clang emits "load ... align 1" instructions in LLVM IR, the right
> thing would then happen in the X86 backend automatically.
>
> My initial inclination is that this feature is also not
> particularly worthwhile to implement, but I'm open to being convinced
> that this is indeed valuable enough to be worthwhile. It should
> actually work reliably, and is somewhat in line with other such
> "not-quite-C" flags we provide (e.g. -fno-delete-null-pointer-checks).
> Of course, even with such an implementation, you can still have a
> problem with user code depending on alignof() returning a reliable
> answer (e.g., llvm::PointerUnion). Not much can be done about that.
>
>
> On Wed, Apr 14, 2021 at 2:07 PM Liu, Chen3 via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Hi all.
>
> We want to make a patch to always emit unaligned vector move
> instructions on AVX machine with option control. We do this for
> the following reason:
>
> 1. With AVX the performance for aligned vector move and unaligned
> vector move on X86 are the same if the address is aligned. In
> this case we prefer to use unaligned move because it can avoid
> some run time exceptions;
> 2. This fixes an inconsistency in optimization: suppose a load
> operation was merged into another instruction (e.g., load and
> add becomes `add [memop]'). If a misaligned pointer is passed
> to the two-instruction sequence, it will
>
> raise an exception. If the same pointer is passed to the memop
> instruction, it will work. Thus, the behavior of misalignment
> depends upon what optimization levels and passes are applied, and
> small source changes could cause
>
> issues to appear and disappear. It's better for the user to
> consistently use unaligned load/store to improve the debug experience;
>
> 3. Makes good use of HW that is capable of handling misaligned
> data gracefully. It is not necessarily a bug in users code but
> a third-part library. For example it would allow using a
> library built in old ages where stack alignment was 4-byte only.
> 4. Compatible with ICC so that users can easily use llvm;
>
> Roman Lebedev is worried that this patch will hide UB. In our
> opinions, UB doesn't have to mean raise an exception. The example
> code(https://godbolt.org/z/43bYPraoa
> <https://godbolt.org/z/43bYPraoa>) does have UB behavior but it is
> still valid (and reasonable) to interpret that UB as `go slower',
>
> instead of `raise exception'. Besides, as default we still emit
> aligned instructions as before, but we provide an option for
> users with this need.
>
> We have two patches discussing this issue, one of which has been
> abandoned:
>
> https://reviews.llvm.org/D88396 <https://reviews.llvm.org/D88396>
> (abandoned)
>
> https://reviews.llvm.org/D99565 <https://reviews.llvm.org/D99565>
> (in review)
>
> Thanks.
>
> Chen Liu.
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210414/50853178/attachment-0001.html>
More information about the llvm-dev
mailing list