From: Richard Henderson Date: Thu, 26 Jul 2001 23:47:15 +0000 (-0700) Subject: simplify-rtx.c (avoid_constant_pool_reference): Export. X-Git-Tag: prereleases/libstdc++-3.0.95~3018 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=732910b9c53b72ae93ef74e22cb9b35c9f69ed83;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fddead1cf2eb..08f8c66de13c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-07-26 Richard Henderson + + * 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 * rtl.h (cleanup_barriers): Declare. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 13a7e57c81ee..b31eaa82a9f7 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 7cacfabcccac..e7fdc98a7155 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 1961f194ebac..1a6f30696d59 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; {