[Bug tree-optimization/49002] New: 128-bit AVX load incorrectly becomes 256-bit AVX load
athena at fftw dot org
gcc-bugzilla@gcc.gnu.org
Sat May 14 23:57:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49002
Summary: 128-bit AVX load incorrectly becomes 256-bit AVX load
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: athena@fftw.org
Created attachment 24249
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24249
test case for this bug
The attached foo.c program contains two 128-bit AVX loads from
locations of type __m128d. However, gcc-4.6 converts the first
load into a 256-load. While this is semantically correct, because
the upper 128-bits are ignored, the vmovapd instruction has different
alignment requirements in 128 and 256-bit mode, and therefore this
conversion causes spurious segfaults when the data is not 32-byte aligned.
Compile the attached program as follows:
x86_64-linux-gnu-gcc-4.6 -mavx -O -S foo.c
The generated assembly contains the incorrect load:
vmovapd (%rdi), %ymm0
By contrast, gcc-4.5 generates the correct 128-bit load instruction "vmovapd
(%rdi), %xmm0".
More information about the Gcc-bugs
mailing list