From 5afaa917dac97e43afb9f2b6a590b30973d85e21 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 15 Apr 2009 09:34:37 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 ++ gcc/config/rs6000/rs6000.c | 107 +++++++++++++++----------- gcc/testsuite/ChangeLog | 4 + gcc/testsuite/g++.dg/ext/altivec-17.C | 16 ++++ 4 files changed, 87 insertions(+), 45 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/altivec-17.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f2d803ca56c..491608cdd7b4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-04-15 Nathan Sidwell + + * config/rs6000/rs6000.c (rs6000_init_builtins): Set TYPE_NAME of + our distinct integral and vector types. + 2009-04-15 Rafael Avila de Espindola * 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 9035d13451b4..6500cc792916 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)); + 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); - (*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)); + 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); - (*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)); + 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); - (*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 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 f55193f6e850..a6e9bf7329ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-04-15 Nathan Sidwell + + * g++.dg/ext/altivec-17.C: New. + 2009-04-15 Arnaud Charlet * 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 000000000000..7db10e502b15 --- /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__'" } +}