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
This commit is contained in:
Nathan Sidwell 2009-04-15 09:34:37 +00:00 committed by Nathan Sidwell
parent f7ca1d041c
commit 5afaa917da
4 changed files with 87 additions and 45 deletions

View File

@ -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.

View File

@ -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 ();

View File

@ -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.

View File

@ -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__'" }
}