diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-12 18:54:08 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-12 18:54:08 +0000 |
commit | 6ebe4c6978847bb027afb24b03e91aa4a850056e (patch) | |
tree | bbd31df3f0f8e6de8d0b1dc923fc0b8c2395a5ce /gcc | |
parent | 5f00384a2df620694cde858c379b6fa5060f3692 (diff) | |
download | gcc-6ebe4c6978847bb027afb24b03e91aa4a850056e.tar.gz |
gcc/
* Makefile.in (expmed.o, target-globals.o): Depend on expmed.h.
* expmed.h: New file.
* expmed.c (default_target_costs): New variable.
(this_target_costs): New conditional variable.
(sdiv_pow2_cheap, smod_pow2_cheap, zero_cost, add_cost, neg_cost)
(shift_cost, shiftadd_cost, shiftsub0_cost, shiftsub1_cost, mul_cost)
(sdiv_cost, udiv_cost, mul_widen_cost, mul_highpart_cost): Delete.
* target-globals.h (this_target_expmed): Declare.
(target_globals): Add a expmed field.
(restore_target_globals): Copy the expmed field to
this_target_expmed.
* target-globals.c: Include expmed.h.
(default_target_globals): Initialize the expmed field.
(save_target_globals): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162094 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/Makefile.in | 5 | ||||
-rw-r--r-- | gcc/expmed.c | 29 | ||||
-rw-r--r-- | gcc/expmed.h | 86 | ||||
-rw-r--r-- | gcc/target-globals.c | 5 | ||||
-rw-r--r-- | gcc/target-globals.h | 3 |
6 files changed, 119 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 21d5e7d74dc..278ee112059 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,22 @@ 2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * Makefile.in (expmed.o, target-globals.o): Depend on expmed.h. + * expmed.h: New file. + * expmed.c (default_target_costs): New variable. + (this_target_costs): New conditional variable. + (sdiv_pow2_cheap, smod_pow2_cheap, zero_cost, add_cost, neg_cost) + (shift_cost, shiftadd_cost, shiftsub0_cost, shiftsub1_cost, mul_cost) + (sdiv_cost, udiv_cost, mul_widen_cost, mul_highpart_cost): Delete. + * target-globals.h (this_target_expmed): Declare. + (target_globals): Add a expmed field. + (restore_target_globals): Copy the expmed field to + this_target_expmed. + * target-globals.c: Include expmed.h. + (default_target_globals): Initialize the expmed field. + (save_target_globals): Likewise. + +2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * Makefile.in (target-globals.o): Depend on reload.h. * reload.h (target_reload): New structure. (default_target_reload): Declare. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 325e97eef1f..dd96699fbdb 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2915,7 +2915,8 @@ calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(CGRAPH_H) $(EXCEPT_H) sbitmap.h $(DBGCNT_H) $(TREE_FLOW_H) expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ $(FLAGS_H) insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \ - $(TOPLEV_H) $(DIAGNOSTIC_CORE_H) $(TM_P_H) langhooks.h $(DF_H) $(TARGET_H) + $(TOPLEV_H) $(DIAGNOSTIC_CORE_H) $(TM_P_H) langhooks.h $(DF_H) $(TARGET_H) \ + expmed.h explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \ $(FLAGS_H) hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \ $(TOPLEV_H) $(DIAGNOSTIC_CORE_H) $(EXCEPT_H) $(FUNCTION_H) $(GGC_H) $(TM_P_H) langhooks.h gt-explow.h \ @@ -3477,7 +3478,7 @@ lower-subreg.o : lower-subreg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(EXPR_H) $(EXCEPT_H) $(REGS_H) $(TREE_PASS_H) $(DF_H) target-globals.o : target-globals.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) insn-config.h $(MACHMODE_H) $(GGC_H) $(TOPLEV_H) target-globals.h \ - $(FLAGS_H) $(REGS_H) $(RTL_H) reload.h + $(FLAGS_H) $(REGS_H) $(RTL_H) reload.h expmed.h $(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h insn-config.h conditions.h \ diff --git a/gcc/expmed.c b/gcc/expmed.c index 479adbc13d3..c10d52ec8c4 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -38,6 +38,12 @@ along with GCC; see the file COPYING3. If not see #include "langhooks.h" #include "df.h" #include "target.h" +#include "expmed.h" + +struct target_expmed default_target_expmed; +#if SWITCHABLE_TARGET +struct target_expmed *this_target_expmed = &default_target_expmed; +#endif static void store_fixed_bit_field (rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, @@ -59,14 +65,6 @@ static rtx expand_sdiv_pow2 (enum machine_mode, rtx, HOST_WIDE_INT); /* Test whether a value is zero of a power of two. */ #define EXACT_POWER_OF_2_OR_ZERO_P(x) (((x) & ((x) - 1)) == 0) -/* Nonzero means divides or modulus operations are relatively cheap for - powers of two, so don't use branches; emit the operation instead. - Usually, this will mean that the MD file will emit non-branch - sequences. */ - -static bool sdiv_pow2_cheap[2][NUM_MACHINE_MODES]; -static bool smod_pow2_cheap[2][NUM_MACHINE_MODES]; - #ifndef SLOW_UNALIGNED_ACCESS #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT #endif @@ -96,21 +94,6 @@ static bool smod_pow2_cheap[2][NUM_MACHINE_MODES]; #define gen_extzv(a,b,c,d) NULL_RTX #endif -/* Cost of various pieces of RTL. Note that some of these are indexed by - shift count and some by mode. */ -static int zero_cost[2]; -static int add_cost[2][NUM_MACHINE_MODES]; -static int neg_cost[2][NUM_MACHINE_MODES]; -static int shift_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; -static int shiftadd_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; -static int shiftsub0_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; -static int shiftsub1_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; -static int mul_cost[2][NUM_MACHINE_MODES]; -static int sdiv_cost[2][NUM_MACHINE_MODES]; -static int udiv_cost[2][NUM_MACHINE_MODES]; -static int mul_widen_cost[2][NUM_MACHINE_MODES]; -static int mul_highpart_cost[2][NUM_MACHINE_MODES]; - void init_expmed (void) { diff --git a/gcc/expmed.h b/gcc/expmed.h new file mode 100644 index 00000000000..fcf16dca306 --- /dev/null +++ b/gcc/expmed.h @@ -0,0 +1,86 @@ +/* Target-dependent costs for expmed.c. + Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option; any later +version. + +GCC 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 +<http://www.gnu.org/licenses/>. */ + +#ifndef EXPMED_H +#define EXPMED_H 1 + +/* Target-dependent globals. */ +struct target_expmed { + /* Nonzero means divides or modulus operations are relatively cheap for + powers of two, so don't use branches; emit the operation instead. + Usually, this will mean that the MD file will emit non-branch + sequences. */ + bool x_sdiv_pow2_cheap[2][NUM_MACHINE_MODES]; + bool x_smod_pow2_cheap[2][NUM_MACHINE_MODES]; + + /* Cost of various pieces of RTL. Note that some of these are indexed by + shift count and some by mode. */ + int x_zero_cost[2]; + int x_add_cost[2][NUM_MACHINE_MODES]; + int x_neg_cost[2][NUM_MACHINE_MODES]; + int x_shift_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; + int x_shiftadd_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; + int x_shiftsub0_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; + int x_shiftsub1_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD]; + int x_mul_cost[2][NUM_MACHINE_MODES]; + int x_sdiv_cost[2][NUM_MACHINE_MODES]; + int x_udiv_cost[2][NUM_MACHINE_MODES]; + int x_mul_widen_cost[2][NUM_MACHINE_MODES]; + int x_mul_highpart_cost[2][NUM_MACHINE_MODES]; +}; + +extern struct target_expmed default_target_expmed; +#if SWITCHABLE_TARGET +extern struct target_expmed *this_target_expmed; +#else +#define this_target_expmed (&default_target_expmed) +#endif + +#define sdiv_pow2_cheap \ + (this_target_expmed->x_sdiv_pow2_cheap) +#define smod_pow2_cheap \ + (this_target_expmed->x_smod_pow2_cheap) +#define zero_cost \ + (this_target_expmed->x_zero_cost) +#define add_cost \ + (this_target_expmed->x_add_cost) +#define neg_cost \ + (this_target_expmed->x_neg_cost) +#define shift_cost \ + (this_target_expmed->x_shift_cost) +#define shiftadd_cost \ + (this_target_expmed->x_shiftadd_cost) +#define shiftsub0_cost \ + (this_target_expmed->x_shiftsub0_cost) +#define shiftsub1_cost \ + (this_target_expmed->x_shiftsub1_cost) +#define mul_cost \ + (this_target_expmed->x_mul_cost) +#define sdiv_cost \ + (this_target_expmed->x_sdiv_cost) +#define udiv_cost \ + (this_target_expmed->x_udiv_cost) +#define mul_widen_cost \ + (this_target_expmed->x_mul_widen_cost) +#define mul_highpart_cost \ + (this_target_expmed->x_mul_highpart_cost) + +#endif diff --git a/gcc/target-globals.c b/gcc/target-globals.c index f78e58d0927..5934ad9f9e9 100644 --- a/gcc/target-globals.c +++ b/gcc/target-globals.c @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "rtl.h" #include "hard-reg-set.h" #include "reload.h" +#include "expmed.h" #if SWITCHABLE_TARGET struct target_globals default_target_globals = { @@ -38,7 +39,8 @@ struct target_globals default_target_globals = { &default_target_regs, &default_target_rtl, &default_target_hard_regs, - &default_target_reload + &default_target_reload, + &default_target_expmed }; struct target_globals * @@ -52,6 +54,7 @@ save_target_globals (void) g->rtl = ggc_alloc_cleared_target_rtl (); g->hard_regs = XCNEW (struct target_hard_regs); g->reload = XCNEW (struct target_reload); + g->expmed = XCNEW (struct target_expmed); restore_target_globals (g); target_reinit (); return g; diff --git a/gcc/target-globals.h b/gcc/target-globals.h index 677aa94dddf..45273c41dae 100644 --- a/gcc/target-globals.h +++ b/gcc/target-globals.h @@ -26,6 +26,7 @@ extern struct target_regs *this_target_regs; extern struct target_rtl *this_target_rtl; extern struct target_hard_regs *this_target_hard_regs; extern struct target_reload *this_target_reload; +extern struct target_expmed *this_target_expmed; struct GTY(()) target_globals { struct target_flag_state *GTY((skip)) flag_state; @@ -33,6 +34,7 @@ struct GTY(()) target_globals { struct target_rtl *rtl; struct target_hard_regs *GTY((skip)) hard_regs; struct target_reload *GTY((skip)) reload; + struct target_expmed *GTY((skip)) expmed; }; extern struct target_globals default_target_globals; @@ -47,6 +49,7 @@ restore_target_globals (struct target_globals *g) this_target_rtl = g->rtl; this_target_hard_regs = g->hard_regs; this_target_reload = g->reload; + this_target_expmed = g->expmed; } #endif |