+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.
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) \
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) \
$(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@
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
#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
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
#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)
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
&& ! 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
/* 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
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, \
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
#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)
#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
{
return true;
}
-
-#include "gt-targhooks.h"
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);