aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-07-26 16:47:15 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-07-26 16:47:15 -0700
commit732910b9c53b72ae93ef74e22cb9b35c9f69ed83 (patch)
tree8034b92545d1aa23faec2e0ccf18de8061813335 /gcc
parent62ba5f39b2c80f527974e4d58eb09a8d2a35bb7c (diff)
downloadgcc-732910b9c53b72ae93ef74e22cb9b35c9f69ed83.zip
gcc-732910b9c53b72ae93ef74e22cb9b35c9f69ed83.tar.gz
gcc-732910b9c53b72ae93ef74e22cb9b35c9f69ed83.tar.bz2
simplify-rtx.c (avoid_constant_pool_reference): Export.
* simplify-rtx.c (avoid_constant_pool_reference): Export. * rtl.h (avoid_constant_pool_reference): Declare it. * dwarf2out.c (add_location_or_const_value_attribute): Use it. (add_const_value_attribute): Use add_AT_unsigned for unsigned values. From-SVN: r44411
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/dwarf2out.c7
-rw-r--r--gcc/rtl.h1
-rw-r--r--gcc/simplify-rtx.c3
4 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fddead1..08f8c66 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2001-07-26 Richard Henderson <rth@redhat.com>
+
+ * simplify-rtx.c (avoid_constant_pool_reference): Export.
+ * rtl.h (avoid_constant_pool_reference): Declare it.
+ * dwarf2out.c (add_location_or_const_value_attribute): Use it.
+ (add_const_value_attribute): Use add_AT_unsigned for unsigned values.
+
Thu Jul 26 22:30:22 CEST 2001 Jan Hubicka <jh@suse.cz>
* rtl.h (cleanup_barriers): Declare.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 13a7e57..b31eaa8 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -8215,7 +8215,7 @@ add_const_value_attribute (die, rtl)
{
if ((unsigned long) val != (unsigned HOST_WIDE_INT) val)
abort ();
- add_AT_int (die, DW_AT_const_value, (unsigned long) val);
+ add_AT_unsigned (die, DW_AT_const_value, (unsigned long) val);
}
}
break;
@@ -8474,6 +8474,11 @@ add_location_or_const_value_attribute (die, decl)
if (rtl == NULL_RTX)
return;
+ /* If we don't look past the constant pool, we risk emitting a
+ reference to a constant pool entry that isn't referenced from
+ code, and thus is not emitted. */
+ rtl = avoid_constant_pool_reference (rtl);
+
switch (GET_CODE (rtl))
{
case ADDRESSOF:
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 7cacfab..e7fdc98 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1345,6 +1345,7 @@ extern rtx simplify_gen_subreg PARAMS ((enum machine_mode,
unsigned int));
extern rtx simplify_replace_rtx PARAMS ((rtx, rtx, rtx));
extern rtx simplify_rtx PARAMS ((rtx));
+extern rtx avoid_constant_pool_reference PARAMS ((rtx));
/* In function.c */
extern rtx gen_mem_addressof PARAMS ((rtx, union tree_node *));
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 1961f19..1a6f306 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -99,7 +99,6 @@ Boston, MA 02111-1307, USA. */
static rtx simplify_plus_minus PARAMS ((enum rtx_code,
enum machine_mode, rtx, rtx));
static void check_fold_consts PARAMS ((PTR));
-static rtx avoid_constant_pool_reference PARAMS ((rtx));
/* Make a binary operation by properly ordering the operands and
seeing if the expression folds. */
@@ -138,7 +137,7 @@ simplify_gen_binary (code, mode, op0, op1)
/* If X is a MEM referencing the constant pool, return the real value.
Otherwise return X. */
-static rtx
+rtx
avoid_constant_pool_reference (x)
rtx x;
{