]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
system.h: Poison ASM_SIMPLIFY_DWARF_ADDR.
authorRichard Henderson <rth@redhat.com>
Fri, 1 Aug 2003 21:51:13 +0000 (14:51 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 1 Aug 2003 21:51:13 +0000 (14:51 -0700)
        * system.h: Poison ASM_SIMPLIFY_DWARF_ADDR.

        * varasm.c (lookup_constant_def): New function.
        * rtl.h (lookup_constant_def): Declare it.
        * dwarf2out.c (loc_descriptor_from_tree): Use it.
        Use targetm.delegitimize_address, not ASM_SIMPLIFY_DWARF_ADDR.

From-SVN: r70072

gcc/ChangeLog
gcc/dwarf2out.c
gcc/rtl.h
gcc/system.h
gcc/varasm.c

index 1e697f24ffdb4a72660d622d8d974c696ee78ff7..a6bbe7e4d03fa38d9cee1acfba369b61c97087d3 100644 (file)
@@ -1,3 +1,12 @@
+2003-08-01  Richard Henderson  <rth@redhat.com>
+
+       * system.h: Poison ASM_SIMPLIFY_DWARF_ADDR.
+
+       * varasm.c (lookup_constant_def): New function.
+       * rtl.h (lookup_constant_def): Declare it.
+       * dwarf2out.c (loc_descriptor_from_tree): Use it.  
+       Use targetm.delegitimize_address, not ASM_SIMPLIFY_DWARF_ADDR.
+
 2003-08-01  Zack Weinberg  <zack@codesourcery.com>
 
        * c-decl.c (gettags, pushdecl_function_level): Delete.
index 91336a12d2860cc93189e8dfb2eb98dd88e17c5a..48f0f92c08c5cc10a53362a7adfa75d83afc09e2 100644 (file)
@@ -8560,17 +8560,19 @@ loc_descriptor_from_tree (tree loc, int addressp)
 
     case CONSTRUCTOR:
       {
-       /* Get an RTL for this, which will may have the effect of outputting
-          it.  This may violates the principle of not having -g affect
-          the generated code, but it's in the data segment and it's hard
-          to see a case where it won't already have been output.  */
-       rtx rtl = output_constant_def (loc, 0);
-
-#ifdef ASM_SIMPLIFY_DWARF_ADDR
-       rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl);
-#endif
+       /* Get an RTL for this, if something has been emitted.  */
+       rtx rtl = lookup_constant_def (loc);
+       enum machine_mode mode;
+
+       if (GET_CODE (rtl) != MEM)
+         return 0;
+       mode = GET_MODE (rtl);
+       rtl = XEXP (rtl, 0);
+
+       rtl = (*targetm.delegitimize_address) (rtl);
+
        indirect_p = 1;
-       ret = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
+       ret = mem_loc_descriptor (rtl, mode);
        break;
       }
 
index 8fb2574ad51697a18df734aea9f33ad3bc845327..80b9e31e797654890f47fc1152f6baf2aeb2d06e 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1911,6 +1911,7 @@ extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx);
 #define INVALID_REGNUM                 (~(unsigned int) 0)
 
 extern rtx output_constant_def (tree, int);
+extern rtx lookup_constant_def (tree);
 
 /* Called from integrate.c when a deferred constant is inlined.  */
 extern void notice_rtl_inlining_of_deferred_constant (void);
index 14662de00c5fd602b6759001811baee89381bb61..a0117c579be288593801b6148525644849e27a9b 100644 (file)
@@ -586,7 +586,8 @@ typedef char _Bool;
        WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
        ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL     \
        ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS     \
-       ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END
+       ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \
+       ASM_SIMPLIFY_DWARF_ADDR
 
 /* Other obsolete target macros, or macros that used to be in target
    headers and were not used, and may be obsolete or may never have
index 63ba1bd800f7f187637384ea5359b6e26a0c99f2..512bc33ba89ec8f610128d73fe56854436933143 100644 (file)
@@ -2596,6 +2596,21 @@ notice_rtl_inlining_of_deferred_constant (void)
 {
   n_deferred_constants++;
 }
+
+/* Look up EXP in the table of constant descriptors.  Return the rtl
+   if it has been emitted, else null.  */
+
+rtx
+lookup_constant_def (tree exp)
+{
+  struct constant_descriptor_tree *desc;
+  struct constant_descriptor_tree key;
+
+  key.value = exp;
+  desc = htab_find (const_desc_htab, &key);
+
+  return (desc ? desc->rtl : NULL_RTX);
+}
 \f
 /* Used in the hash tables to avoid outputting the same constant
    twice.  Unlike 'struct constant_descriptor_tree', RTX constants