]> granicus.if.org Git - clang/commit
[x86] Fix a really nasty bug introduced in r276417 where alignment
authorChandler Carruth <chandlerc@gmail.com>
Wed, 10 Aug 2016 07:32:47 +0000 (07:32 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 10 Aug 2016 07:32:47 +0000 (07:32 +0000)
commitafb075bfdb5cafe1edb40a3508f74b56d5b6fc4b
tree64775e2ee2e5cfd30dfdbbc892bc1555804935ba
parentbd12a41e3d807236a271e9e18a652a9fb838fa76
[x86] Fix a really nasty bug introduced in r276417 where alignment
constraints were added to _mm256_broadcast_{pd,ps} intel intrinsics.

The spec for these intrinics is ... pretty much silent on alignment.
This is especially frustrating considering the amount of discussion of
alignment in the load and store instrinsics. So I was forced to rely on
the specification for the VBROADCASTF128 instruction.

That instruction's spec is *also* completely silent on alignment.
Fortunately, when it comes to the instruction's spec, silence is enough.
There is no #GP fault option for an underaligned address so this
instruction, and by inference the intrinsic, can read any alignment.

As it happens, the old code worked exactly this way and in fact we have
plenty of code that hands pointers with less than 16-byte alignment to
these intrinsics. This code broke pretty spectacularly with this commit.

Fortunately, the fix is super simple! Change a 16 to a 1, and ta da!

Anyways, a lot of debugging for a really boring fix. =]

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278202 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/avx-builtins.c