From 9c0737da32d3f589fbabbc6a9abd596aa5ccdd3f Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 23 Apr 2009 22:51:35 +0000 Subject: [PATCH] spu-builtins.h: Delete file. * config/spu/spu-builtins.h: Delete file. * config/spu/spu.h (enum spu_builtin_type): Move here from spu-builtins.h. (struct spu_builtin_description): Likewise. Add GTY marker. Do not use enum spu_function_code or enum insn_code. (spu_builtins): Add extern declaration. * config/spu/spu.c: Do not include "spu-builtins.h". (enum spu_function_code, enum spu_builtin_type_index, V16QI_type_node, V8HI_type_node, V4SI_type_node, V2DI_type_node, V4SF_type_node, V2DF_type_node, unsigned_V16QI_type_node, unsigned_V8HI_type_node, unsigned_V4SI_type_node, unsigned_V2DI_type_node): Move here from spu-builtins.h. (spu_builtin_types): Make static. Add GTY marker. (spu_builtins): Add extern declaration with GTY marker. Include "gt-spu.h". * config/spu/spu-c.c: Do not include "spu-builtins.h". (spu_resolve_overloaded_builtin): Do not use spu_function_code. Check programmatically whether all parameters are scalar. * config/spu/t-spu-elf (spu.o, spu-c.o): Update dependencies. From-SVN: r146663 --- gcc/ChangeLog | 26 ++++++++ gcc/config/spu/spu-builtins.h | 119 ---------------------------------- gcc/config/spu/spu-c.c | 16 +++-- gcc/config/spu/spu.c | 82 ++++++++++++++++++++++- gcc/config/spu/spu.h | 30 +++++++++ gcc/config/spu/t-spu-elf | 3 - 6 files changed, 144 insertions(+), 132 deletions(-) delete mode 100644 gcc/config/spu/spu-builtins.h diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 933a9313764e..de2f55c65a20 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,29 @@ +2009-04-23 Ulrich Weigand + + * config/spu/spu-builtins.h: Delete file. + + * config/spu/spu.h (enum spu_builtin_type): Move here from + spu-builtins.h. + (struct spu_builtin_description): Likewise. Add GTY marker. + Do not use enum spu_function_code or enum insn_code. + (spu_builtins): Add extern declaration. + + * config/spu/spu.c: Do not include "spu-builtins.h". + (enum spu_function_code, enum spu_builtin_type_index, + V16QI_type_node, V8HI_type_node, V4SI_type_node, V2DI_type_node, + V4SF_type_node, V2DF_type_node, unsigned_V16QI_type_node, + unsigned_V8HI_type_node, unsigned_V4SI_type_node, + unsigned_V2DI_type_node): Move here from spu-builtins.h. + (spu_builtin_types): Make static. Add GTY marker. + (spu_builtins): Add extern declaration with GTY marker. + Include "gt-spu.h". + + * config/spu/spu-c.c: Do not include "spu-builtins.h". + (spu_resolve_overloaded_builtin): Do not use spu_function_code. + Check programmatically whether all parameters are scalar. + + * config/spu/t-spu-elf (spu.o, spu-c.o): Update dependencies. + 2009-04-22 Richard Guenther Backport from mainline: diff --git a/gcc/config/spu/spu-builtins.h b/gcc/config/spu/spu-builtins.h deleted file mode 100644 index 9acdbf1682ab..000000000000 --- a/gcc/config/spu/spu-builtins.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright (C) 2006, 2007 Free Software Foundation, Inc. - - This file is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your option) - any later version. - - This file is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - . */ - -/* built-ins */ - -enum spu_builtin_type_index -{ - SPU_BTI_END_OF_PARAMS, - - /* We create new type nodes for these. */ - SPU_BTI_V16QI, - SPU_BTI_V8HI, - SPU_BTI_V4SI, - SPU_BTI_V2DI, - SPU_BTI_V4SF, - SPU_BTI_V2DF, - SPU_BTI_UV16QI, - SPU_BTI_UV8HI, - SPU_BTI_UV4SI, - SPU_BTI_UV2DI, - - /* A 16-byte type. (Implemented with V16QI_type_node) */ - SPU_BTI_QUADWORD, - - /* These all correspond to intSI_type_node */ - SPU_BTI_7, - SPU_BTI_S7, - SPU_BTI_U7, - SPU_BTI_S10, - SPU_BTI_S10_4, - SPU_BTI_U14, - SPU_BTI_16, - SPU_BTI_S16, - SPU_BTI_S16_2, - SPU_BTI_U16, - SPU_BTI_U16_2, - SPU_BTI_U18, - - /* These correspond to the standard types */ - SPU_BTI_INTQI, - SPU_BTI_INTHI, - SPU_BTI_INTSI, - SPU_BTI_INTDI, - - SPU_BTI_UINTQI, - SPU_BTI_UINTHI, - SPU_BTI_UINTSI, - SPU_BTI_UINTDI, - - SPU_BTI_FLOAT, - SPU_BTI_DOUBLE, - - SPU_BTI_VOID, - SPU_BTI_PTR, - - SPU_BTI_MAX -}; - -#define V16QI_type_node (spu_builtin_types[SPU_BTI_V16QI]) -#define V8HI_type_node (spu_builtin_types[SPU_BTI_V8HI]) -#define V4SI_type_node (spu_builtin_types[SPU_BTI_V4SI]) -#define V2DI_type_node (spu_builtin_types[SPU_BTI_V2DI]) -#define V4SF_type_node (spu_builtin_types[SPU_BTI_V4SF]) -#define V2DF_type_node (spu_builtin_types[SPU_BTI_V2DF]) -#define unsigned_V16QI_type_node (spu_builtin_types[SPU_BTI_UV16QI]) -#define unsigned_V8HI_type_node (spu_builtin_types[SPU_BTI_UV8HI]) -#define unsigned_V4SI_type_node (spu_builtin_types[SPU_BTI_UV4SI]) -#define unsigned_V2DI_type_node (spu_builtin_types[SPU_BTI_UV2DI]) - -extern GTY(()) tree spu_builtin_types[SPU_BTI_MAX]; - -/* Some builtins require special handling. This enum differentiates. */ -enum spu_builtin_type { - B_INSN, - B_JUMP, - B_BISLED, - B_CALL, - B_HINT, - B_OVERLOAD, - B_INTERNAL -}; - -typedef enum { -#define DEF_BUILTIN(fcode, icode, name, type, params) fcode, -#include "spu-builtins.def" -#undef DEF_BUILTIN - NUM_SPU_BUILTINS -} spu_function_code; - -struct spu_builtin_description { - spu_function_code fcode; - enum insn_code icode; - const char *name; - enum spu_builtin_type type; - - /* The first element of parm is always the return type. The rest - * are a zero terminated list of parameters. */ - int parm[5]; - - tree fndecl; -}; - -extern GTY(()) struct spu_builtin_description spu_builtins[]; - - - diff --git a/gcc/config/spu/spu-c.c b/gcc/config/spu/spu-c.c index 0b0d2e8743a5..5a3e6f321ccb 100644 --- a/gcc/config/spu/spu-c.c +++ b/gcc/config/spu/spu-c.c @@ -32,7 +32,6 @@ #include "insn-codes.h" #include "recog.h" #include "optabs.h" -#include "spu-builtins.h" /* target hook for resolve_overloaded_builtin(). Returns a function call @@ -43,8 +42,7 @@ spu_resolve_overloaded_builtin (tree fndecl, tree fnargs) #define SCALAR_TYPE_P(t) (INTEGRAL_TYPE_P (t) \ || SCALAR_FLOAT_TYPE_P (t) \ || POINTER_TYPE_P (t)) - spu_function_code new_fcode, fcode = - DECL_FUNCTION_CODE (fndecl) - END_BUILTINS; + int new_fcode, fcode = DECL_FUNCTION_CODE (fndecl) - END_BUILTINS; struct spu_builtin_description *desc; tree match = NULL_TREE; @@ -64,8 +62,15 @@ spu_resolve_overloaded_builtin (tree fndecl, tree fnargs) tree decl = spu_builtins[new_fcode].fndecl; tree params = TYPE_ARG_TYPES (TREE_TYPE (decl)); tree arg, param; + bool all_scalar; int p; + /* Check whether all parameters are scalar. */ + all_scalar = true; + for (param = params; param != void_list_node; param = TREE_CHAIN (param)) + if (!SCALAR_TYPE_P (TREE_VALUE (param))) + all_scalar = false; + for (param = params, arg = fnargs, p = 0; param != void_list_node; param = TREE_CHAIN (param), arg = TREE_CHAIN (arg), p++) @@ -97,10 +102,7 @@ spu_resolve_overloaded_builtin (tree fndecl, tree fnargs) parameter. */ if ((!SCALAR_TYPE_P (param_type) || !SCALAR_TYPE_P (arg_type) - || ((fcode == SPU_SPLATS || fcode == SPU_PROMOTE - || fcode == SPU_HCMPEQ || fcode == SPU_HCMPGT - || fcode == SPU_MASKB || fcode == SPU_MASKH - || fcode == SPU_MASKW) && p == 0)) + || (all_scalar && p == 0)) && !comptypes (TYPE_MAIN_VARIANT (param_type), TYPE_MAIN_VARIANT (arg_type))) break; diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index b6e47533401f..811bf5aef092 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -52,13 +52,79 @@ #include "machmode.h" #include "tree-gimple.h" #include "tm-constrs.h" -#include "spu-builtins.h" #include "ddg.h" #include "sbitmap.h" #include "timevar.h" #include "df.h" /* Builtin types, data and prototypes. */ + +enum spu_builtin_type_index +{ + SPU_BTI_END_OF_PARAMS, + + /* We create new type nodes for these. */ + SPU_BTI_V16QI, + SPU_BTI_V8HI, + SPU_BTI_V4SI, + SPU_BTI_V2DI, + SPU_BTI_V4SF, + SPU_BTI_V2DF, + SPU_BTI_UV16QI, + SPU_BTI_UV8HI, + SPU_BTI_UV4SI, + SPU_BTI_UV2DI, + + /* A 16-byte type. (Implemented with V16QI_type_node) */ + SPU_BTI_QUADWORD, + + /* These all correspond to intSI_type_node */ + SPU_BTI_7, + SPU_BTI_S7, + SPU_BTI_U7, + SPU_BTI_S10, + SPU_BTI_S10_4, + SPU_BTI_U14, + SPU_BTI_16, + SPU_BTI_S16, + SPU_BTI_S16_2, + SPU_BTI_U16, + SPU_BTI_U16_2, + SPU_BTI_U18, + + /* These correspond to the standard types */ + SPU_BTI_INTQI, + SPU_BTI_INTHI, + SPU_BTI_INTSI, + SPU_BTI_INTDI, + + SPU_BTI_UINTQI, + SPU_BTI_UINTHI, + SPU_BTI_UINTSI, + SPU_BTI_UINTDI, + + SPU_BTI_FLOAT, + SPU_BTI_DOUBLE, + + SPU_BTI_VOID, + SPU_BTI_PTR, + + SPU_BTI_MAX +}; + +#define V16QI_type_node (spu_builtin_types[SPU_BTI_V16QI]) +#define V8HI_type_node (spu_builtin_types[SPU_BTI_V8HI]) +#define V4SI_type_node (spu_builtin_types[SPU_BTI_V4SI]) +#define V2DI_type_node (spu_builtin_types[SPU_BTI_V2DI]) +#define V4SF_type_node (spu_builtin_types[SPU_BTI_V4SF]) +#define V2DF_type_node (spu_builtin_types[SPU_BTI_V2DF]) +#define unsigned_V16QI_type_node (spu_builtin_types[SPU_BTI_UV16QI]) +#define unsigned_V8HI_type_node (spu_builtin_types[SPU_BTI_UV8HI]) +#define unsigned_V4SI_type_node (spu_builtin_types[SPU_BTI_UV4SI]) +#define unsigned_V2DI_type_node (spu_builtin_types[SPU_BTI_UV2DI]) + +static GTY(()) tree spu_builtin_types[SPU_BTI_MAX]; + struct spu_builtin_range { int low, high; @@ -201,8 +267,6 @@ spu_libgcc_cmp_return_mode (void); static enum machine_mode spu_libgcc_shift_count_mode (void); -/* Built in types. */ -tree spu_builtin_types[SPU_BTI_MAX]; /* TARGET overrides. */ @@ -5065,6 +5129,16 @@ spu_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) /* Create the built-in types and functions */ +enum spu_function_code +{ +#define DEF_BUILTIN(fcode, icode, name, type, params) fcode, +#include "spu-builtins.def" +#undef DEF_BUILTIN + NUM_SPU_BUILTINS +}; + +extern GTY(()) struct spu_builtin_description spu_builtins[NUM_SPU_BUILTINS]; + struct spu_builtin_description spu_builtins[] = { #define DEF_BUILTIN(fcode, icode, name, type, params) \ {fcode, icode, name, type, params, NULL_TREE}, @@ -6234,3 +6308,5 @@ spu_section_type_flags (tree decl, const char *name, int reloc) return default_section_type_flags (decl, name, reloc); } +#include "gt-spu.h" + diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h index 6cd7b53f47d7..a019d8abc7d6 100644 --- a/gcc/config/spu/spu.h +++ b/gcc/config/spu/spu.h @@ -634,3 +634,33 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \ extern GTY(()) rtx spu_compare_op0; extern GTY(()) rtx spu_compare_op1; + +/* Builtins. */ + +enum spu_builtin_type +{ + B_INSN, + B_JUMP, + B_BISLED, + B_CALL, + B_HINT, + B_OVERLOAD, + B_INTERNAL +}; + +struct spu_builtin_description GTY(()) +{ + int fcode; + int icode; + const char *name; + enum spu_builtin_type type; + + /* The first element of parm is always the return type. The rest + are a zero terminated list of parameters. */ + int parm[5]; + + tree fndecl; +}; + +extern struct spu_builtin_description spu_builtins[]; + diff --git a/gcc/config/spu/t-spu-elf b/gcc/config/spu/t-spu-elf index dbb1b7c98072..84c372d6edb9 100644 --- a/gcc/config/spu/t-spu-elf +++ b/gcc/config/spu/t-spu-elf @@ -80,13 +80,10 @@ spu.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ output.h $(BASIC_BLOCK_H) $(INTEGRATE_H) toplev.h $(GGC_H) $(HASHTAB_H) \ $(TM_P_H) $(TARGET_H) $(TARGET_DEF_H) langhooks.h reload.h cfglayout.h \ $(srcdir)/config/spu/spu-protos.h \ - $(srcdir)/config/spu/spu-builtins.h \ $(srcdir)/config/spu/spu-builtins.def spu-c.o: $(srcdir)/config/spu/spu-c.c \ $(srcdir)/config/spu/spu-protos.h \ - $(srcdir)/config/spu/spu-builtins.h \ - $(srcdir)/config/spu/spu-builtins.def \ $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(CPPLIB_H) \ $(TM_P_H) c-pragma.h errors.h coretypes.h $(TM_H) insn-codes.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/spu/spu-c.c -- 2.47.2