Commit 75c20980 by Richard Henderson Committed by Richard Henderson

system.h: Poison ASM_SIMPLIFY_DWARF_ADDR.

        * 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
parent c197e306
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> 2003-08-01 Zack Weinberg <zack@codesourcery.com>
* c-decl.c (gettags, pushdecl_function_level): Delete. * c-decl.c (gettags, pushdecl_function_level): Delete.
......
...@@ -8560,17 +8560,19 @@ loc_descriptor_from_tree (tree loc, int addressp) ...@@ -8560,17 +8560,19 @@ loc_descriptor_from_tree (tree loc, int addressp)
case CONSTRUCTOR: case CONSTRUCTOR:
{ {
/* Get an RTL for this, which will may have the effect of outputting /* Get an RTL for this, if something has been emitted. */
it. This may violates the principle of not having -g affect rtx rtl = lookup_constant_def (loc);
the generated code, but it's in the data segment and it's hard enum machine_mode mode;
to see a case where it won't already have been output. */
rtx rtl = output_constant_def (loc, 0); if (GET_CODE (rtl) != MEM)
return 0;
#ifdef ASM_SIMPLIFY_DWARF_ADDR mode = GET_MODE (rtl);
rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl); rtl = XEXP (rtl, 0);
#endif
rtl = (*targetm.delegitimize_address) (rtl);
indirect_p = 1; indirect_p = 1;
ret = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl)); ret = mem_loc_descriptor (rtl, mode);
break; break;
} }
......
...@@ -1911,6 +1911,7 @@ extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx); ...@@ -1911,6 +1911,7 @@ extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx);
#define INVALID_REGNUM (~(unsigned int) 0) #define INVALID_REGNUM (~(unsigned int) 0)
extern rtx output_constant_def (tree, int); extern rtx output_constant_def (tree, int);
extern rtx lookup_constant_def (tree);
/* Called from integrate.c when a deferred constant is inlined. */ /* Called from integrate.c when a deferred constant is inlined. */
extern void notice_rtl_inlining_of_deferred_constant (void); extern void notice_rtl_inlining_of_deferred_constant (void);
......
...@@ -586,7 +586,8 @@ typedef char _Bool; ...@@ -586,7 +586,8 @@ typedef char _Bool;
WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \ WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \ ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \
ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \ 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 /* 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 headers and were not used, and may be obsolete or may never have
......
...@@ -2597,6 +2597,21 @@ notice_rtl_inlining_of_deferred_constant (void) ...@@ -2597,6 +2597,21 @@ notice_rtl_inlining_of_deferred_constant (void)
n_deferred_constants++; 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);
}
/* Used in the hash tables to avoid outputting the same constant /* Used in the hash tables to avoid outputting the same constant
twice. Unlike 'struct constant_descriptor_tree', RTX constants twice. Unlike 'struct constant_descriptor_tree', RTX constants
are output once per function, not once per file; there seems are output once per function, not once per file; there seems
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment