summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2006-04-13 20:26:59 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2006-04-13 20:26:59 +0000
commit7649275376cde27f3076060ad7246b2597c44eef (patch)
treeb9dbf9ca2be0875c2958e3b5573828757e1c41c7
parent8a54a1de62c96c2bda407ecea440434916c8914d (diff)
downloadgcc-7649275376cde27f3076060ad7246b2597c44eef.tar.gz
re PR target/27006 (Invalid altivec constant loading code)
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. PR target/27006 * gcc.dg/vmx/pr27006.c: New testcase. Co-Authored-By: Ulrich Weigand <uweigand@de.ibm.com> From-SVN: r112923
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/rs6000.h3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/vmx/pr27006.c23
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bae62293f8a..d37196d1ecc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 75ff4a66cd6..96dd2d230c5 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -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.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 758f363265e..2d61f83c453 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..1b92252b383
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vmx/pr27006.c
@@ -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;
+}
+