[LLVMbugs] [Bug 11771] New: Vectors shift operator broken
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon Jan 16 10:05:44 PST 2012
http://llvm.org/bugs/show_bug.cgi?id=11771
Bug #: 11771
Summary: Vectors shift operator broken
Product: new-bugs
Version: trunk
Platform: PC
OS/Version: MacOS X
Status: NEW
Severity: normal
Priority: P
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: schnetter at gmail.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
The shift operator >> on int2 seems broken. The example code below extracts the
sign bit of a float2, but does not work correctly:
typedef int int2 __attribute__((__ext_vector_type__(2)));
typedef float float2 __attribute__((__ext_vector_type__(2)));
int2 signbit(float2 f)
{
int bits = 8 * sizeof(float);
return *(int2*)&f >> (int2)(bits-1);
}
#include <stdio.h>
int main()
{
float2 x = (float2){-1.0f,-1.0f};
int2 s = signbit(x);
printf("%d %d\n", s.s0, s.s1);
return 0;
}
I expect the output "-1 -1", but receive the output "-1 0" instead. This used
to work correctly with earlier versions of llvm 3.1svn.
I also notice that the assembler code generated for "signbit" is much more
complicated than necessary. I expect a single machine instruction, but more
than 20 instructions are generated that unpack and re-pack the vector.
I am using llvm and clang 148237.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list