diff options
-rw-r--r-- | gcc/ChangeLog | 30 | ||||
-rw-r--r-- | gcc/Makefile.in | 9 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 2 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 13 | ||||
-rw-r--r-- | gcc/reload.c | 21 | ||||
-rw-r--r-- | gcc/target-def.h | 3 | ||||
-rw-r--r-- | gcc/target.h | 2 | ||||
-rw-r--r-- | gcc/targhooks.c | 30 | ||||
-rw-r--r-- | gcc/targhooks.h | 2 |
9 files changed, 34 insertions, 78 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e632146853..965d2c788b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,33 @@ +2003-12-04 Richard Sandiford <rsandifo@redhat.com> + + PR target/13186 + + Revert all of the following patch, except the addition of + hook_bool_machine_mode_true: + + 2003-11-02 Richard Sandiford <rsandifo@redhat.com> + + * Makefile.in (targhooks.o, reload.o): Update dependencies. + (GTFILES): Add targhooks.c. + (gt-targhooks.h): New rule; depend on s-gtype. + * target.h (direct_pool_load_p): New hook. + * target-def.h (TARGET_DIRECT_POOL_LOAD_P): New macro. + (TARGET_INITIALIZER): Include it. + * targhooks.h (default_direct_pool_load_p): Declare. + (hook_bool_machine_mode_true): Declare. + * targhooks.c: Include insn-config.h, recog.h, ggc.h and + gt-targhooks.h. + (pool_symbol): New variable. + (default_direct_pool_load_p): New function. + (hook_bool_machine_mode_true): New function. + * reload.c: Include target.h. + (find_reloads): If an alternative will force a constant into memory, + count an extra reload if constant pool symbols are not valid + addresses. If an alternative uses memory to move values between + registers, count the move as two reloads rather than one. + * config/s390/s390.c (TARGET_DIRECT_POOL_LOAD_P): Define. + * doc/tm.texi (TARGET_DIRECT_POOL_LOAD_P): Document. + 2003-12-03 Mark Mitchell <mark@codesourcery.com> * config/ia64/hpux.h (TARGET_HAVE_TLS): Define it to false. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index e35a16d09e3..2a9134357cb 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1525,7 +1525,7 @@ opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \ output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h targhooks.o : targhooks.c targhooks.h $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_H) $(TM_H) $(RTL_H) $(TM_P_H) function.h \ - output.h toplev.h insn-config.h $(RECOG_H) $(GGC_H) gt-targhooks.h + output.h toplev.h toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \ function.h flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h $(DIAGNOSTIC_H) \ @@ -1761,7 +1761,7 @@ ra-rewrite.o : ra-rewrite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) output.h except.h ra.h reload.h insn-config.h reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h output.h \ $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \ - $(REGS_H) function.h real.h toplev.h $(TM_P_H) $(TARGET_H) + $(REGS_H) function.h real.h toplev.h $(TM_P_H) reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h flags.h \ $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \ $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h $(TM_P_H) \ @@ -2070,8 +2070,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h $(srcdir)/cpplib.h \ $(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \ $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/langhooks.c \ $(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \ - $(srcdir)/stringpool.c $(srcdir)/targhooks.c $(srcdir)/tree.c \ - $(srcdir)/varasm.c \ + $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \ $(out_file) \ @all_gtfiles@ @@ -2088,7 +2087,7 @@ gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h \ gt-dwarf2out.h gt-ra-build.h gt-reg-stack.h gt-dwarf2asm.h \ gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \ gt-c-pragma.h gtype-c.h gt-input.h gt-cfglayout.h \ -gt-stringpool.h gt-targhooks.h gt-langhooks.h : s-gtype ; @true +gt-stringpool.h gt-langhooks.h : s-gtype ; @true gtyp-gen.h: Makefile echo "/* This file is machine generated. Do not edit. */" > tmp-gtyp.h diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index ef9c2130f12..b79a2675909 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -138,8 +138,6 @@ static tree s390_build_builtin_va_list (void); #define TARGET_RTX_COSTS s390_rtx_costs #undef TARGET_ADDRESS_COST #define TARGET_ADDRESS_COST s390_address_cost -#undef TARGET_DIRECT_POOL_LOAD_P -#define TARGET_DIRECT_POOL_LOAD_P hook_bool_machine_mode_true #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG s390_reorg diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b85f5185942..09328aef6a2 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -5414,19 +5414,6 @@ should probably only be given to addresses with different numbers of registers on machines with lots of registers. @end deftypefn -@deftypefn {Target Hook} bool TARGET_DIRECT_POOL_LOAD_P (enum machine_mode @var{m}) -This hook should return true if values of mode @var{m} can usually be loaded -directly from the constant pool, without using an intermediate register -to hold the address. - -The hook is only a heuristic, it has no bearing on correctness. -If it returns false, reload will be less likely to force constants -into memory. - -The default definition returns true if an ordinary local symbol is -a valid address. -@end deftypefn - @node Scheduling @section Adjusting the Instruction Scheduler diff --git a/gcc/reload.c b/gcc/reload.c index b448ff2d967..fe0f0474689 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -104,7 +104,6 @@ a register with any other reload. */ #include "output.h" #include "function.h" #include "toplev.h" -#include "target.h" #ifndef REGNO_MODE_OK_FOR_BASE_P #define REGNO_MODE_OK_FOR_BASE_P(REGNO, MODE) REGNO_OK_FOR_BASE_P (REGNO) @@ -3370,11 +3369,6 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, const_to_mem = 1; if (this_alternative[i] != (int) NO_REGS) losers++; - - /* If constant pool symbols are not valid addresses, - count an extra reload for the address. */ - if (!targetm.direct_pool_load_p (operand_mode[i])) - losers++; } /* If we can't reload this value at all, reject this @@ -3400,21 +3394,6 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, && ! const_to_mem) bad = 1; -#ifdef SECONDARY_MEMORY_NEEDED - /* If this alternative would use memory to move a value - between registers, it would need two reloads, one for - the load and one for the store. Account for the extra - reload here. */ - if (GET_CODE (operand) == REG - && REGNO (operand) < FIRST_PSEUDO_REGISTER - && (enum reg_class) this_alternative[i] != NO_REGS - && (SECONDARY_MEMORY_NEEDED - ((enum reg_class) this_alternative[i], - REGNO_REG_CLASS (REGNO (operand)), - GET_MODE (operand)))) - losers++; -#endif - /* We prefer to reload pseudos over reloading other things, since such reloads may be able to be eliminated later. If we are reloading a SCRATCH, we won't be generating any diff --git a/gcc/target-def.h b/gcc/target-def.h index 5007a562e8f..9ff668d3f14 100644 --- a/gcc/target-def.h +++ b/gcc/target-def.h @@ -262,8 +262,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* In cse.c. */ #define TARGET_ADDRESS_COST default_address_cost -#define TARGET_DIRECT_POOL_LOAD_P default_direct_pool_load_p - /* In builtins.c. */ #define TARGET_INIT_BUILTINS hook_void_void #define TARGET_EXPAND_BUILTIN default_expand_builtin @@ -381,7 +379,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. TARGET_VECTOR_OPAQUE_P, \ TARGET_RTX_COSTS, \ TARGET_ADDRESS_COST, \ - TARGET_DIRECT_POOL_LOAD_P, \ TARGET_DWARF_REGISTER_SPAN, \ TARGET_MACHINE_DEPENDENT_REORG, \ TARGET_BUILD_BUILTIN_VA_LIST, \ diff --git a/gcc/target.h b/gcc/target.h index 722485511b7..93935374c15 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -369,8 +369,6 @@ struct gcc_target invalid addresses. */ int (* address_cost) (rtx x); - bool (* direct_pool_load_p) (enum machine_mode); - /* Given a register, this hook should return a parallel of registers to represent where to find the register pieces. Define this hook if the register and its mode are represented in Dwarf in diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 9be6786b53b..62ed9432468 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -61,9 +61,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "target.h" #include "tm_p.h" #include "target-def.h" -#include "insn-config.h" -#include "recog.h" -#include "ggc.h" void default_external_libcall (rtx fun ATTRIBUTE_UNUSED) @@ -199,31 +196,6 @@ default_pretend_outgoing_varargs_named(CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED) #endif } -/* A SYMBOL_REF for a local symbol. Used by default_direct_pool_load_p. */ - -static GTY(()) rtx pool_symbol; - -/* See whether a local symbol is a valid address for MODE. If so, assume - that constant pool symbols are also valid addresses, otherwise assume - that they aren't. - - ??? This is only an approximation. We can't test constant pool - symbols directly without forcing something into the constant pool. */ - -bool -default_direct_pool_load_p (enum machine_mode mode) -{ - if (pool_symbol == 0) - { - char label[256]; - - ASM_GENERATE_INTERNAL_LABEL (label, "LC", 0); - pool_symbol = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label)); - SYMBOL_REF_FLAGS (pool_symbol) = SYMBOL_FLAG_LOCAL; - } - return memory_address_p (mode, pool_symbol); -} - /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */ bool @@ -239,5 +211,3 @@ hook_bool_machine_mode_true (enum machine_mode a ATTRIBUTE_UNUSED) { return true; } - -#include "gt-targhooks.h" diff --git a/gcc/targhooks.h b/gcc/targhooks.h index f188ce201b2..e5c5a2a5596 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -32,7 +32,5 @@ extern void default_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode extern bool default_strict_argument_naming (CUMULATIVE_ARGS *); extern bool default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *); -extern bool default_direct_pool_load_p (enum machine_mode); - extern bool hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *); extern bool hook_bool_machine_mode_true (enum machine_mode); |