* 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
+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.
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;
}
#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);
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
{
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