[patch] Clean up some lang_hooks pushdecl uses in the back ends

Steven Bosscher stevenb.gcc@gmail.com
Mon Mar 5 21:43:00 GMT 2012


Hello,

This is a simple cleanup that introduces a new function
add_builtin_type and uses it in the mep and rs6000 back ends.

Bootstrapped and tested on powerpc64-unknown-linux-gnu (gcc110) and
verified that a cross to mep builds.
OK for trunk?

Ciao!
Steven

        * langhooks.c (add_builtin_type): New function.
        * langhooks.h (add_builtin_type): Export it.
        * config/mep/mep.c (mep_init_builtins): Use it.
        * config/rs6000/rs6000.c (rs6000_init_builtins): Use it.
-------------- next part --------------
	* langhooks.c (add_builtin_type): New function.
	* langhooks.h (add_builtin_type): Export it.
	* config/mep/mep.c (mep_init_builtins): Use it.
	* config/rs6000/rs6000.c (rs6000_init_builtins): Use it.

Index: langhooks.c
===================================================================
*** langhooks.c	(revision 184954)
--- langhooks.c	(working copy)
*************** lhd_builtin_function (tree decl)
*** 605,610 ****
--- 605,620 ----
    return decl;
  }
  
+ /* Create a builtin type.  */
+ 
+ tree
+ add_builtin_type (const char *name, tree type)
+ {
+   tree   id = get_identifier (name);
+   tree decl = build_decl (BUILTINS_LOCATION, TYPE_DECL, id, type);
+   return lang_hooks.decls.pushdecl (decl);
+ }
+ 
  /* LTO hooks.  */
  
  /* Used to save and restore any previously active section.  */
Index: langhooks.h
===================================================================
*** langhooks.h	(revision 184954)
--- langhooks.h	(working copy)
*************** struct lang_hooks
*** 479,484 ****
--- 479,485 ----
  
  /* Each front end provides its own.  */
  extern struct lang_hooks lang_hooks;
+ 
  extern tree add_builtin_function (const char *name, tree type,
  				  int function_code, enum built_in_class cl,
  				  const char *library_name,
*************** extern tree add_builtin_function_ext_sco
*** 489,493 ****
  					    enum built_in_class cl,
  					    const char *library_name,
  					    tree attrs);
! 
  #endif /* GCC_LANG_HOOKS_H */
--- 490,495 ----
  					    enum built_in_class cl,
  					    const char *library_name,
  					    tree attrs);
! extern tree add_builtin_type (const char *name, tree type);
!  
  #endif /* GCC_LANG_HOOKS_H */
Index: config/mep/mep.c
===================================================================
*** config/mep/mep.c	(revision 184954)
--- config/mep/mep.c	(working copy)
*************** mep_init_builtins (void)
*** 6059,6091 ****
    v4uhi_type_node = build_vector_type (unsigned_intHI_type_node, 4);
    v2usi_type_node = build_vector_type (unsigned_intSI_type_node, 2);
  
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_data_bus_int"),
! 		 cp_data_bus_int_type_node));
! 
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_vector"),
! 		 opaque_vector_type_node));
! 
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v8qi"),
! 		 v8qi_type_node));
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v4hi"),
! 		 v4hi_type_node));
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v2si"),
! 		 v2si_type_node));
! 
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v8uqi"),
! 		 v8uqi_type_node));
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v4uhi"),
! 		 v4uhi_type_node));
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v2usi"),
! 		 v2usi_type_node));
  
    /* Intrinsics like mep_cadd3 are implemented with two groups of
       instructions, one which uses UNSPECs and one which uses a specific
--- 6059,6075 ----
    v4uhi_type_node = build_vector_type (unsigned_intHI_type_node, 4);
    v2usi_type_node = build_vector_type (unsigned_intSI_type_node, 2);
  
!   add_builtin_type ("cp_data_bus_int", cp_data_bus_int_type_node);
! 
!   add_builtin_type ("cp_vector", opaque_vector_type_node);
! 
!   add_builtin_type ("cp_v8qi", v8qi_type_node);
!   add_builtin_type ("cp_v4hi", v4hi_type_node);
!   add_builtin_type ("cp_v2si", v2si_type_node);
! 
!   add_builtin_type ("cp_v8uqi", v8uqi_type_node);
!   add_builtin_type ("cp_v4uhi", v4uhi_type_node);
!   add_builtin_type ("cp_v2usi", v2usi_type_node);
  
    /* Intrinsics like mep_cadd3 are implemented with two groups of
       instructions, one which uses UNSPECs and one which uses a specific
Index: config/rs6000/rs6000.c
===================================================================
*** config/rs6000/rs6000.c	(revision 184954)
--- config/rs6000/rs6000.c	(working copy)
*************** rs6000_init_builtins (void)
*** 11567,11591 ****
    builtin_mode_to_type[V16QImode][0] = V16QI_type_node;
    builtin_mode_to_type[V16QImode][1] = unsigned_V16QI_type_node;
  
!   tdecl = build_decl (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION, 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);
--- 11567,11583 ----
    builtin_mode_to_type[V16QImode][0] = V16QI_type_node;
    builtin_mode_to_type[V16QImode][1] = unsigned_V16QI_type_node;
  
!   tdecl = add_builtin_type ("__bool char", bool_char_type_node);
    TYPE_NAME (bool_char_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__bool short", bool_short_type_node);
    TYPE_NAME (bool_short_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__bool int", bool_int_type_node);
    TYPE_NAME (bool_int_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__pixel", pixel_type_node);
    TYPE_NAME (pixel_type_node) = 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);
*************** rs6000_init_builtins (void)
*** 11593,11680 ****
    bool_V2DI_type_node = build_vector_type (bool_long_type_node, 2);
    pixel_V8HI_type_node = build_vector_type (pixel_type_node, 8);
  
!   tdecl = build_decl (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION,
!       		      TYPE_DECL, get_identifier ("__vector signed char"),
! 		      V16QI_type_node);
    TYPE_NAME (V16QI_type_node) = tdecl;
!   (*lang_hooks.decls.pushdecl) (tdecl);
!   tdecl = build_decl (BUILTINS_LOCATION,
!       		      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 (BUILTINS_LOCATION,
!       		      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 (BUILTINS_LOCATION,
!       		      TYPE_DECL, get_identifier ("__vector signed short"),
! 		      V8HI_type_node);
    TYPE_NAME (V8HI_type_node) = tdecl;
!   (*lang_hooks.decls.pushdecl) (tdecl);
!   tdecl = build_decl (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION, 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 (BUILTINS_LOCATION,
!       		      TYPE_DECL, get_identifier ("__vector signed int"),
! 		      V4SI_type_node);
    TYPE_NAME (V4SI_type_node) = tdecl;
!   (*lang_hooks.decls.pushdecl) (tdecl);
!   tdecl = build_decl (BUILTINS_LOCATION,
!       		      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 (BUILTINS_LOCATION,
!       		      TYPE_DECL, get_identifier ("__vector float"),
! 		      V4SF_type_node);
    TYPE_NAME (V4SF_type_node) = tdecl;
!   (*lang_hooks.decls.pushdecl) (tdecl);
!   tdecl = build_decl (BUILTINS_LOCATION,
!       		      TYPE_DECL, get_identifier ("__vector __pixel"),
! 		      pixel_V8HI_type_node);
    TYPE_NAME (pixel_V8HI_type_node) = tdecl;
-   (*lang_hooks.decls.pushdecl) (tdecl);
  
!   tdecl = build_decl (BUILTINS_LOCATION,
! 		      TYPE_DECL, get_identifier ("__vector double"),
! 		      V2DF_type_node);
    TYPE_NAME (V2DF_type_node) = tdecl;
-   (*lang_hooks.decls.pushdecl) (tdecl);
  
!   tdecl = build_decl (BUILTINS_LOCATION,
! 		      TYPE_DECL, get_identifier ("__vector long"),
! 		      V2DI_type_node);
    TYPE_NAME (V2DI_type_node) = tdecl;
-   (*lang_hooks.decls.pushdecl) (tdecl);
  
!   tdecl = build_decl (BUILTINS_LOCATION,
! 		      TYPE_DECL, get_identifier ("__vector unsigned long"),
! 		      unsigned_V2DI_type_node);
    TYPE_NAME (unsigned_V2DI_type_node) = tdecl;
-   (*lang_hooks.decls.pushdecl) (tdecl);
  
!   tdecl = build_decl (BUILTINS_LOCATION,
! 		      TYPE_DECL, get_identifier ("__vector __bool long"),
! 		      bool_V2DI_type_node);
    TYPE_NAME (bool_V2DI_type_node) = tdecl;
-   (*lang_hooks.decls.pushdecl) (tdecl);
  
    /* Paired and SPE builtins are only available if you build a compiler with
       the appropriate options, so only create those builtins with the
--- 11585,11634 ----
    bool_V2DI_type_node = build_vector_type (bool_long_type_node, 2);
    pixel_V8HI_type_node = build_vector_type (pixel_type_node, 8);
  
!   tdecl = add_builtin_type ("__vector unsigned char", unsigned_V16QI_type_node);
    TYPE_NAME (unsigned_V16QI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector signed char", V16QI_type_node);
    TYPE_NAME (V16QI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector __bool char", bool_V16QI_type_node);
    TYPE_NAME ( bool_V16QI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector unsigned short", unsigned_V8HI_type_node);
    TYPE_NAME (unsigned_V8HI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector signed short", V8HI_type_node);
    TYPE_NAME (V8HI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector __bool short", bool_V8HI_type_node);
    TYPE_NAME (bool_V8HI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector unsigned int", unsigned_V4SI_type_node);
    TYPE_NAME (unsigned_V4SI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector signed int", V4SI_type_node);
    TYPE_NAME (V4SI_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector __bool int", bool_V4SI_type_node);
    TYPE_NAME (bool_V4SI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector float", V4SF_type_node);
    TYPE_NAME (V4SF_type_node) = tdecl;
! 
!   tdecl = add_builtin_type ("__vector __pixel", pixel_V8HI_type_node);
    TYPE_NAME (pixel_V8HI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector double", V2DF_type_node);
    TYPE_NAME (V2DF_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector long", V2DI_type_node);
    TYPE_NAME (V2DI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector unsigned long", unsigned_V2DI_type_node);
    TYPE_NAME (unsigned_V2DI_type_node) = tdecl;
  
!   tdecl = add_builtin_type ("__vector __bool long", bool_V2DI_type_node);
    TYPE_NAME (bool_V2DI_type_node) = tdecl;
  
    /* Paired and SPE builtins are only available if you build a compiler with
       the appropriate options, so only create those builtins with the
*************** spe_init_builtins (void)
*** 11843,11852 ****
                                  signed_char_type_node,
                                  NULL_TREE);
  
!   (*lang_hooks.decls.pushdecl)
!     (build_decl (BUILTINS_LOCATION, TYPE_DECL,
! 		 get_identifier ("__ev64_opaque__"),
! 		 opaque_V2SI_type_node));
  
    /* Initialize irregular SPE builtins.  */
  
--- 11797,11803 ----
                                  signed_char_type_node,
                                  NULL_TREE);
  
!   add_builtin_type ("__ev64_opaque__", opaque_V2SI_type_node);
  
    /* Initialize irregular SPE builtins.  */
  


More information about the Gcc-patches mailing list