[Bug tree-optimization/50413] New: Incorrect instruction is used to shift value of 128 bit xmm0 registrer
aries.nah at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 15 08:47:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50413
Bug #: 50413
Summary: Incorrect instruction is used to shift value of 128
bit xmm0 registrer
Classification: Unclassified
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: aries.nah@gmail.com
After compilation an attached code with -O2 and -ftree-vectorize flags, it
doesn't work properly.
Assembler code shows that G++ tries to replace the following code
V.uint128.uint64_lower = (V.uint128.uint64_lower >> 1);
V.bitmap.b63 = V.bitmap.b64;
V.uint128.uint64_upper = (V.uint128.uint64_upper >> 1);
with SSE instructions:
400a10: movdqa 0x103d8(%rip),%xmm0 # 410df0 <V>
400a17: and $0x1,%edi
400a1b: psrlq $0x1,%xmm0
400a20: movdqa %xmm0,0x103c8(%rip) # 410df0 <V>
But psrlq shifts 64 bit value, it's necessary to use psrldq here
More information about the Gcc-bugs
mailing list