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: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]
    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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to