From bfee5366682048696e3c2a1f699ca043082c17eb Mon Sep 17 00:00:00 2001
From: clm <clm@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 3 Nov 1999 21:55:51 +0000
Subject: [PATCH]         * defaults.h (ASM_OUTPUT_ALTERNATE_LABEL_NAME):
 Provide default.         * emit-rtl.c (gen_label_rtx): Support
 LABEL_ALTERNATE_NAME.         * final.c (final_scan_insn): Emit
 LABEL_ALTERNATE_NAME.         * ggc-common.c (ggc_mark_rtx_children): Mark
 LABEL_ALTERNATE_NAME.         * jump.c (delete_unreferenced_labels): Don't
 delete if         LABEL_ALTERNATE_NAME is set.         * print-rtl.c
 (print_rtx): Dump alternate name.         * rtl.def (CODE_LABEL): Change
 format to "iuuis00s".         * rtl.h (LABEL_ALTERNATE_NAME): Define.        
 * rtl.texi (LABEL_ALTERNATE_NAME): Document.         * tm.texi
 (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Document.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30382 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog    | 14 ++++++++++++++
 gcc/defaults.h   |  6 ++++++
 gcc/emit-rtl.c   |  3 ++-
 gcc/final.c      | 11 ++++++++---
 gcc/ggc-common.c |  1 +
 gcc/jump.c       |  4 +++-
 gcc/print-rtl.c  |  6 +++++-
 gcc/rtl.def      |  5 +++--
 gcc/rtl.h        |  3 +++
 gcc/rtl.texi     |  5 +++++
 gcc/tm.texi      | 11 +++++++++++
 11 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ef65f933b431..f66c452b76c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,17 @@
+Wed Nov  3 15:40:23 1999  Catherine Moore  <clm@cygnus.com>
+
+        * defaults.h (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Provide default.
+        * emit-rtl.c (gen_label_rtx): Support LABEL_ALTERNATE_NAME.
+        * final.c (final_scan_insn): Emit LABEL_ALTERNATE_NAME.
+        * ggc-common.c (ggc_mark_rtx_children): Mark LABEL_ALTERNATE_NAME.
+        * jump.c (delete_unreferenced_labels): Don't delete if
+        LABEL_ALTERNATE_NAME is set.
+        * print-rtl.c (print_rtx): Dump alternate name.
+        * rtl.def (CODE_LABEL): Change format to "iuuis00s".
+        * rtl.h (LABEL_ALTERNATE_NAME): Define.
+        * rtl.texi (LABEL_ALTERNATE_NAME): Document.
+        * tm.texi (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Document.
+
 Wed Nov  3 15:39:19 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* fix-header.c (recognized_extern, recognized_function): Constify
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 2fe8cd4772a9..807119f42283 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -54,6 +54,12 @@ do { fprintf (FILE, "\t%s\t", ASM_LONG);				\
    } while (0)
 #endif
 
+/* Provide default for ASM_OUTPUT_ALTERNATE_LABEL_NAME.  */
+#ifndef ASM_OUTPUT_ALTERNATE_LABEL_NAME
+#define ASM_OUTPUT_ALTERNATE_LABEL_NAME(FILE,INSN) \
+  fprintf (FILE, "%s:\n", LABEL_ALTERNATE_NAME (INSN))
+#endif
+
 /* choose a reasonable default for ASM_OUTPUT_ASCII.  */
 
 #ifndef ASM_OUTPUT_ASCII
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 4e45985df013..cb49d7fb4ec8 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1523,9 +1523,10 @@ gen_label_rtx ()
   register rtx label;
 
   label = gen_rtx_CODE_LABEL (VOIDmode, 0, NULL_RTX,
-			      NULL_RTX, label_num++, NULL_PTR);
+			      NULL_RTX, label_num++, NULL_PTR, NULL_PTR);
 
   LABEL_NUSES (label) = 0;
+  LABEL_ALTERNATE_NAME (label) = NULL;
   return label;
 }
 
diff --git a/gcc/final.c b/gcc/final.c
index e0092c0b0260..20670b94974d 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -2418,14 +2418,19 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
 	      ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn),
 				     NEXT_INSN (insn));
 #else
-	      ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
+              if (LABEL_ALTERNATE_NAME (insn))
+                ASM_OUTPUT_ALTERNATE_LABEL_NAME (file, insn);
+              else
+	        ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
 #endif
 #endif
 	      break;
 	    }
 	}
-
-      ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
+      if (LABEL_ALTERNATE_NAME (insn))
+        ASM_OUTPUT_ALTERNATE_LABEL_NAME (file, insn);
+      else
+        ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
       break;
 
     default:
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 8ea80663c3a3..1a8aef538f92 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -252,6 +252,7 @@ ggc_mark_rtx_children (r)
       break;
     case CODE_LABEL:
       ggc_mark_rtx (LABEL_REFS (r));
+      ggc_mark_string (LABEL_ALTERNATE_NAME (r));
       break;
     case LABEL_REF:
       ggc_mark_rtx (LABEL_NEXTREF (r));
diff --git a/gcc/jump.c b/gcc/jump.c
index 538460945d47..4c8e97759275 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -2433,7 +2433,9 @@ delete_unreferenced_labels (f)
 
   for (insn = f; insn; )
     {
-      if (GET_CODE (insn) == CODE_LABEL && LABEL_NUSES (insn) == 0)
+      if (GET_CODE (insn) == CODE_LABEL
+          && LABEL_NUSES (insn) == 0
+          && LABEL_ALTERNATE_NAME (insn) == NULL)
 	insn = delete_insn (insn);
       else
 	{
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 4db28c202ea5..ef8a40204ae2 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -354,7 +354,11 @@ print_rtx (in_rtx)
 #endif
 
   if (GET_CODE (in_rtx) == CODE_LABEL)
-    fprintf (outfile, " [num uses: %d]", LABEL_NUSES (in_rtx));
+    {
+      fprintf (outfile, " [num uses: %d]", LABEL_NUSES (in_rtx));
+      if (LABEL_ALTERNATE_NAME (in_rtx))
+        fprintf (outfile, " [alternate name: %s]", LABEL_ALTERNATE_NAME (in_rtx));
+    }
   
   if (dump_for_graph
       && (is_insn || GET_CODE (in_rtx) == NOTE
diff --git a/gcc/rtl.def b/gcc/rtl.def
index bb7c5bc09bb7..2c323fc82395 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -376,8 +376,9 @@ DEF_RTL_EXPR(BARRIER, "barrier", "iuu", 'x')
    3: is a number that is unique in the entire compilation.
    4: is the user-given name of the label, if any.
    5: is used in jump.c for the use-count of the label.
-   6: is used in flow.c to point to the chain of label_ref's to this label.  */
-DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuis00", 'x')
+   6: is used in flow.c to point to the chain of label_ref's to this label.
+   7: is the alternate label name.  */
+DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuis00s", 'x')
      
 /* Say where in the code a source line starts, for symbol table's sake.
    Contains a filename and a line number.  Line numbers <= 0 are special:
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 25c064bedc4f..a723c7fbe8aa 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -597,6 +597,9 @@ extern const char * const note_insn_name[];
    of LABEL_REFs that point at it, so unused labels can be deleted.  */
 #define LABEL_NUSES(RTX) XCINT(RTX, 5, CODE_LABEL)
 
+/* Associate a name with a CODE_LABEL.  */
+#define LABEL_ALTERNATE_NAME(RTX) XCSTR(RTX, 7, CODE_LABEL)
+
 /* The original regno this ADDRESSOF was built for.  */
 #define ADDRESSOF_REGNO(RTX) XCINT(RTX, 1, ADDRESSOF)
 
diff --git a/gcc/rtl.texi b/gcc/rtl.texi
index 61cd9fb60832..6ad3b8a33c12 100644
--- a/gcc/rtl.texi
+++ b/gcc/rtl.texi
@@ -2384,6 +2384,11 @@ The field @code{LABEL_NUSES} is only defined once the jump optimization
 phase is completed and contains the number of times this label is
 referenced in the current function.
 
+@findex LABEL_ALTERNATE_NAME
+The field @code{LABEL_ALTERNATE_NAME} is used to associate a name with
+a @code{code_label}.  If this field is defined, the alternate name will
+be emitted instead of an internally generated label name.
+
 @findex barrier
 @item barrier
 Barriers are placed in the instruction stream when control cannot flow
diff --git a/gcc/tm.texi b/gcc/tm.texi
index 96ebf815916c..283eb686e1a0 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -5736,6 +5736,17 @@ The usual definition of this macro is as follows:
 fprintf (@var{stream}, "L%s%d:\n", @var{prefix}, @var{num})
 @end example
 
+@findex ASM_OUTPUT_ALTERNATE_LABEL_NAME
+@item ASM_OUTPUT_ALTERNATE_LABEL_NAME (@var{stream}, @var{string})
+A C statement to output to the stdio stream @var{stream} the string
+@var{string}.
+
+The default definition of this macro is as follows:
+
+@example
+fprintf (@var{stream}, "%s:\n", LABEL_ALTERNATE_NAME (INSN))
+@end example
+
 @findex ASM_GENERATE_INTERNAL_LABEL
 @item ASM_GENERATE_INTERNAL_LABEL (@var{string}, @var{prefix}, @var{num})
 A C statement to store into the string @var{string} a label whose name
-- 
GitLab