diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2009-04-15 09:34:37 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2009-04-15 09:34:37 +0000 |
commit | 5afaa917dac97e43afb9f2b6a590b30973d85e21 (patch) | |
tree | 35e1ab2456618de07656e58f1560d05a0ec3709f | |
parent | f7ca1d041c1766a16a016d959395370bea93d069 (diff) | |
download | gcc-5afaa917dac97e43afb9f2b6a590b30973d85e21.zip gcc-5afaa917dac97e43afb9f2b6a590b30973d85e21.tar.gz gcc-5afaa917dac97e43afb9f2b6a590b30973d85e21.tar.bz2 |
rs6000.c (rs6000_init_builtins): Set TYPE_NAME of our distinct integral and vector types.
./ * config/rs6000/rs6000.c (rs6000_init_builtins): Set TYPE_NAME of
our distinct integral and vector types.
testsuite/
* g++.dg/ext/altivec-17.C: New.
From-SVN: r146092
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 113 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/altivec-17.C | 16 |
4 files changed, 90 insertions, 48 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f2d803..491608c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-04-15 Nathan Sidwell <nathan@codesourcery.com> + + * config/rs6000/rs6000.c (rs6000_init_builtins): Set TYPE_NAME of + our distinct integral and vector types. + 2009-04-15 Rafael Avila de Espindola <espindola@google.com> * class.c (build_vtbl_ref_1): Remove call to assemble_external. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 9035d13..6500cc7 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -9374,6 +9374,8 @@ build_opaque_vector_type (tree node, int nunits) static void rs6000_init_builtins (void) { + tree tdecl; + V2SI_type_node = build_vector_type (intSI_type_node, 2); V2SF_type_node = build_vector_type (float_type_node, 2); V4HI_type_node = build_vector_type (intHI_type_node, 4); @@ -9411,60 +9413,75 @@ rs6000_init_builtins (void) float_type_internal_node = float_type_node; void_type_internal_node = void_type_node; - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__bool char"), - bool_char_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__bool short"), - bool_short_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__bool int"), - bool_int_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__pixel"), - pixel_type_node)); + tdecl = build_decl (TYPE_DECL, get_identifier ("__bool char"), + bool_char_type_node); + TYPE_NAME (bool_char_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__bool short"), + bool_short_type_node); + TYPE_NAME (bool_short_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__bool int"), + bool_int_type_node); + TYPE_NAME (bool_int_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__pixel"), + pixel_type_node); + TYPE_NAME (pixel_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); bool_V16QI_type_node = build_vector_type (bool_char_type_node, 16); bool_V8HI_type_node = build_vector_type (bool_short_type_node, 8); bool_V4SI_type_node = build_vector_type (bool_int_type_node, 4); pixel_V8HI_type_node = build_vector_type (pixel_type_node, 8); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector unsigned char"), - unsigned_V16QI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector signed char"), - V16QI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector __bool char"), - bool_V16QI_type_node)); - - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector unsigned short"), - unsigned_V8HI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector signed short"), - V8HI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector __bool short"), - bool_V8HI_type_node)); - - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector unsigned int"), - unsigned_V4SI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector signed int"), - V4SI_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector __bool int"), - bool_V4SI_type_node)); - - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector float"), - V4SF_type_node)); - (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, - get_identifier ("__vector __pixel"), - pixel_V8HI_type_node)); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector unsigned char"), + unsigned_V16QI_type_node); + TYPE_NAME (unsigned_V16QI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector signed char"), + V16QI_type_node); + TYPE_NAME (V16QI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector __bool char"), + bool_V16QI_type_node); + TYPE_NAME ( bool_V16QI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector unsigned short"), + unsigned_V8HI_type_node); + TYPE_NAME (unsigned_V8HI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector signed short"), + V8HI_type_node); + TYPE_NAME (V8HI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector __bool short"), + bool_V8HI_type_node); + TYPE_NAME (bool_V8HI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector unsigned int"), + unsigned_V4SI_type_node); + TYPE_NAME (unsigned_V4SI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector signed int"), + V4SI_type_node); + TYPE_NAME (V4SI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector __bool int"), + bool_V4SI_type_node); + TYPE_NAME (bool_V4SI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector float"), + V4SF_type_node); + TYPE_NAME (V4SF_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); + tdecl = build_decl (TYPE_DECL, get_identifier ("__vector __pixel"), + pixel_V8HI_type_node); + TYPE_NAME (pixel_V8HI_type_node) = tdecl; + (*lang_hooks.decls.pushdecl) (tdecl); if (TARGET_PAIRED_FLOAT) paired_init_builtins (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f55193f..a6e9bf7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-04-15 Nathan Sidwell <nathan@codesourcery.com> + + * g++.dg/ext/altivec-17.C: New. + 2009-04-15 Arnaud Charlet <charlet@adacore.com> * gnat.dg/sync1.ads: Fix error now flagged by gnat. diff --git a/gcc/testsuite/g++.dg/ext/altivec-17.C b/gcc/testsuite/g++.dg/ext/altivec-17.C new file mode 100644 index 0000000..7db10e5 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/altivec-17.C @@ -0,0 +1,16 @@ +// { dg-do compile { target powerpc*-*-* } } +// { dg-require-effective-target powerpc_altivec_ok } +// { dg-options "-maltivec" } + +// Make sure that bool vectors have distinct names to int vectors + +#define vector__ __attribute__((altivec (vector__))) +#define bool__ __attribute__((altivec(bool__))) + +typedef vector__ unsigned int simd_type; +typedef vector__ bool__ int bool_simd_type; + +void Foo (bool_simd_type const &a) +{ + simd_type const &v = a; // { dg-error "'const unsigned int __vector__&' from expression of type 'const __bool int __vector__'" } +} |