re PR target/13186 ([PPC] Internal compiler error in reload.c)
authorRichard Sandiford <rsandifo@redhat.com>
Thu, 4 Dec 2003 09:11:19 +0000 (09:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 4 Dec 2003 09:11:19 +0000 (09:11 +0000)
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.

From-SVN: r74275

gcc/ChangeLog
gcc/Makefile.in
gcc/config/s390/s390.c
gcc/doc/tm.texi
gcc/reload.c
gcc/target-def.h
gcc/target.h
gcc/targhooks.c
gcc/targhooks.h

index 2e6321468537c05c74e6cfcdf282ac8858ac5168..965d2c788b25d989d80452a301296fe6ef539d7f 100644 (file)
@@ -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.
index e35a16d09e32a8d0d5a49cf44a3f8426e04aee54..2a9134357cb6afbf1f1457cb3f241cc81f78cd92 100644 (file)
@@ -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
index ef9c2130f1299123d50f566529c972398c7eba97..b79a26759097631208a28e1c45b9714453d30028 100644 (file)
@@ -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
index b85f5185942946eecfd4445d33b20ed023d8e039..09328aef6a2806cd099f0aa292c2846da4aad628 100644 (file)
@@ -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
 
index b448ff2d967f87b0bea59190d41b7468fa016840..fe0f04746893c65367bbbaf96861895cde221991 100644 (file)
@@ -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
index 5007a562e8f9bb3dc3bb4f82b9db6c9ee8f97bf7..9ff668d3f140fea722c7a4c70373ed70a9f426de 100644 (file)
@@ -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,                        \
index 722485511b7637b0d93ef81431db63967e2a3d8e..93935374c15a43f28e487893490fbcd2ca61f350 100644 (file)
@@ -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
index 9be6786b53bc5377d17b505e56bcdd5a78ba2e87..62ed94324684c46cca4793c298aaf996426f845a 100644 (file)
@@ -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"
index f188ce201b28ab420ed372bf3c1081430e3b7bb1..e5c5a2a55967d09407041b366bc051a08f38c7e3 100644 (file)
@@ -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);