varasm.c (notice_rtl_inlining_of_deferred_constant): New function.
authorZack Weinberg <zack@codesourcery.com>
Tue, 13 May 2003 16:23:02 +0000 (16:23 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Tue, 13 May 2003 16:23:02 +0000 (16:23 +0000)
* 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

gcc/ChangeLog
gcc/integrate.c
gcc/rtl.h
gcc/varasm.c

index c9c1cdf..f3059a2 100644 (file)
@@ -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.
index 0fd108f..c150dcb 100644 (file)
@@ -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;
 
index eab41e2..431b0dd 100644 (file)
--- 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
index 97125f1..811aa38 100644 (file)
@@ -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++;
+}
 \f
 /* Used in the hash tables to avoid outputting the same constant
    twice.  Unlike 'struct constant_descriptor_tree', RTX constants