summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc/altivec-2.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/powerpc/altivec-2.c')
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-2.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-2.c b/gcc/testsuite/gcc.target/powerpc/altivec-2.c
new file mode 100644
index 000000000..4f341dd42
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-2.c
@@ -0,0 +1,36 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+/* Program to test the vector_size attribute. This needs to run on a
+ target that has vectors, so use AltiVec. */
+
+#define vector __attribute__((vector_size(16)))
+
+vector int foobar;
+
+/* Only floats and integrals allowed. We don't care if they map to SIs. */
+struct X { int frances; };
+vector struct X hotdog; /* { dg-error "invalid vector type" } */
+
+/* Arrays of vectors. */
+vector char b[10], ouch;
+
+/* Pointers of vectors. */
+vector short *shoe, polish;
+
+int xxx[sizeof(foobar) == 16 ? 69 : -1];
+
+int nc17[sizeof(shoe) == sizeof (char *) ? 69 : -1];
+
+code ()
+{
+ *shoe = polish;
+ b[1] = ouch;
+}
+
+vector short
+hoop ()
+{
+ return polish;
+}