aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZack Weinberg <zack@codesourcery.com>2003-05-13 16:23:02 +0000
committerZack Weinberg <zack@gcc.gnu.org>2003-05-13 16:23:02 +0000
commita2a6a79b5b86bff8147e9605128bd5fb6b17da51 (patch)
tree79d7aaa209003c98bf084900f1edde07ad8b22a0 /gcc
parentc707d0b01aa015928fb340f548ff7eee81403a97 (diff)
downloadgcc-a2a6a79b5b86bff8147e9605128bd5fb6b17da51.zip
gcc-a2a6a79b5b86bff8147e9605128bd5fb6b17da51.tar.gz
gcc-a2a6a79b5b86bff8147e9605128bd5fb6b17da51.tar.bz2
varasm.c (notice_rtl_inlining_of_deferred_constant): New function.
* varasm.c (notice_rtl_inlining_of_deferred_constant): New function. * rtl.h: Prototype it. * integrate.c (copy_rtx_and_substitute <SYMBOL_REF>): Call it when appropriate. From-SVN: r66762
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/integrate.c2
-rw-r--r--gcc/rtl.h3
-rw-r--r--gcc/varasm.c9
4 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9c1cdf..f3059a2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-05-13 Zack Weinberg <zack@codesourcery.com>
+
+ * varasm.c (notice_rtl_inlining_of_deferred_constant): New function.
+ * rtl.h: Prototype it.
+ * integrate.c (copy_rtx_and_substitute <SYMBOL_REF>): Call it
+ when appropriate.
+
2003-05-13 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.md ("*iordi3_oi"): Do not mark commutative.
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 0fd108f..c150dcb 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -2215,6 +2215,8 @@ copy_rtx_and_substitute (orig, map, for_lhs)
copy_rtx_and_substitute (constant, map, for_lhs)),
0);
}
+ else if (DEFERRED_CONSTANT_P (orig) && inlining)
+ notice_rtl_inlining_of_deferred_constant ();
return orig;
diff --git a/gcc/rtl.h b/gcc/rtl.h
index eab41e2..431b0dd 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1945,6 +1945,9 @@ extern rtx find_next_ref PARAMS ((rtx, rtx));
extern rtx output_constant_def PARAMS ((tree, int));
+/* Called from integrate.c when a deferred constant is inlined. */
+extern void notice_rtl_inlining_of_deferred_constant PARAMS ((void));
+
/* Define a default value for STORE_FLAG_VALUE. */
#ifndef STORE_FLAG_VALUE
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 97125f1..811aa38 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -2672,6 +2672,15 @@ output_constant_def_contents (symbol)
align);
}
+
+/* A constant which was deferred in its original location has been
+ inserted by the RTL inliner into a different function. The
+ current function's deferred constant count must be incremented. */
+void
+notice_rtl_inlining_of_deferred_constant ()
+{
+ n_deferred_constants++;
+}
/* Used in the hash tables to avoid outputting the same constant
twice. Unlike 'struct constant_descriptor_tree', RTX constants