OSDN Git Service

2006-04-13 Paolo Bonzini <bonzini@gnu.org>
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Apr 2006 20:26:59 +0000 (20:26 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Apr 2006 20:26:59 +0000 (20:26 +0000)
    Ulrich Weigand  <uweigand@de.ibm.com>

PR target/27006
* config/rs6000/rs6000.h (EASY_VECTOR_15_ADD_SELF): Require n
to be even.

PR target/27006
* gcc.dg/vmx/pr27006.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112923 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vmx/pr27006.c [new file with mode: 0644]

index bae6229..d37196d 100644 (file)
@@ -1,3 +1,10 @@
+2006-04-13  Paolo Bonzini  <bonzini@gnu.org>
+           Ulrich Weigand  <uweigand@de.ibm.com>
+
+       PR target/27006
+       * config/rs6000/rs6000.h (EASY_VECTOR_15_ADD_SELF): Require n
+       to be even.
+
 2006-04-13  Alan Modra  <amodra@bigpond.net.au>
 
        PR target/26459
index 75ff4a6..96dd2d2 100644 (file)
@@ -1598,7 +1598,8 @@ typedef struct rs6000_args
 
 #define EASY_VECTOR_15(n) ((n) >= -16 && (n) <= 15)
 #define EASY_VECTOR_15_ADD_SELF(n) (!EASY_VECTOR_15((n))       \
-                                   && EASY_VECTOR_15((n) >> 1))
+                                   && EASY_VECTOR_15((n) >> 1) \
+                                   && ((n) & 1) == 0)
 
 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
    and check its validity for a certain class.
index 758f363..2d61f83 100644 (file)
@@ -1,3 +1,9 @@
+2006-04-13  Paolo Bonzini  <bonzini@gnu.org>
+           Ulrich Weigand  <uweigand@de.ibm.com>
+
+       PR target/27006
+       * gcc.dg/vmx/pr27006.c: New testcase.
+
 2006-04-12  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/26766
diff --git a/gcc/testsuite/gcc.dg/vmx/pr27006.c b/gcc/testsuite/gcc.dg/vmx/pr27006.c
new file mode 100644 (file)
index 0000000..1b92252
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do run */
+/* { dg-options "-maltivec" } */
+
+extern void abort ();
+
+typedef union
+{
+  int i[4];
+  __attribute__((altivec(vector__))) int v;
+} vec_int4;
+
+int main (void)
+{
+  vec_int4 i1;
+
+  i1.v = (__attribute__((altivec(vector__))) int){31, 31, 31, 31};
+
+  if (i1.i[0] != 31)
+    abort ();
+
+  return 0;
+}
+