Make ia64 port use tags instead of labels for debug info labels.
authorJim Wilson <wilson@redhat.com>
Wed, 1 Nov 2000 00:20:34 +0000 (00:20 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 1 Nov 2000 00:20:34 +0000 (16:20 -0800)
* defaults.h (ASM_OUTPUT_DEBUG_LABEL): New.
* tm.texi (ASM_OUTPUT_DEBUG_LABEL): Document.
* dwarf2out.c (dwarf2out_begin_block): Use ASM_OUTPUT_DEBUG_LABEL
instead of ASM_OUTPUT_INTERNAL_LABEL.
(dwarf2out_end_block, dwarf2out_label): Likewise.
* final.c (final_scan_insn, case NOTE_INSN_DELETED_LABEL): Likewise
* config/ia64/ia64.h (ASM_OUTPUT_DEBUG_LABEL): Define.

From-SVN: r37174

gcc/ChangeLog
gcc/config/ia64/ia64.h
gcc/defaults.h
gcc/dwarf2out.c
gcc/final.c
gcc/tm.texi

index 21b94a3529d7b84ce57f0186120290259ceb30b1..830088c5cfe8c7fef291a49715840d463da5eeb2 100644 (file)
@@ -1,3 +1,13 @@
+2000-10-31  Jim Wilson  <wilson@redhat.com>
+
+       * defaults.h (ASM_OUTPUT_DEBUG_LABEL): New.
+       * tm.texi (ASM_OUTPUT_DEBUG_LABEL): Document.
+       * dwarf2out.c (dwarf2out_begin_block): Use ASM_OUTPUT_DEBUG_LABEL
+       instead of ASM_OUTPUT_INTERNAL_LABEL.
+       (dwarf2out_end_block, dwarf2out_label): Likewise.
+       * final.c (final_scan_insn, case NOTE_INSN_DELETED_LABEL): Likewise
+       * config/ia64/ia64.h (ASM_OUTPUT_DEBUG_LABEL): Define.
+       
 2000-10-31  Richard Henderson  <rth@redhat.com>
 
        * dwarf2out.c (struct dw_loc_descr_struct): Add dw_loc_addr.
index d94491ff4fa729b1987f74f25cfb8a083daa3cbf..a3aca050fa606563fe658768134340ae9ca29ff3 100644 (file)
@@ -2637,6 +2637,18 @@ do {                                                                     \
 
 #define DWARF2_ASM_LINE_DEBUG_INFO (TARGET_DWARF2_ASM)
 
+/* Use tags for debug info labels, so that they don't break instruction
+   bundles.  This also avoids getting spurious DV warnings from the
+   assembler.  This is similar to ASM_OUTPUT_INTERNAL_LABEL, except that we
+   add brackets around the label.  */
+
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+  do                                                   \
+    {                                                  \
+      fprintf (FILE, "[.%s%d:]\n", PREFIX, NUM);       \
+    }                                                  \
+  while (0)
+
 \f
 /* Cross Compilation and Floating Point.  */
 
index d5e8884511503b1db6df78fa7c9975ee58a0b669..b6fe9ec8c860bfe03c7a041f1d5c1d132f0735e4 100644 (file)
@@ -133,6 +133,15 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
 #define ASM_OUTPUT_LABELREF(FILE,NAME)  asm_fprintf ((FILE), "%U%s", (NAME))
 #endif
 
+/* Allow target to print debug info labels specially.  This is useful for
+   VLIW targets, since debug info labels should go into the middle of
+   instruction bundles instead of breaking them.  */
+
+#ifndef ASM_OUTPUT_DEBUG_LABEL
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+  ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
+#endif
+
 /* This determines whether or not we support weak symbols.  */
 #ifndef SUPPORTS_WEAK
 #ifdef ASM_WEAKEN_LABEL
index 02ec9ce3fad1817d0abdc58827397f8eb751146f..77cda6453d00eb6e834a7735de55ce581bf5746f 100644 (file)
@@ -10929,7 +10929,7 @@ dwarf2out_begin_block (blocknum)
      register unsigned blocknum;
 {
   function_section (current_function_decl);
-  ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
+  ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
 }
 
 /* Output a marker (i.e. a label) for the end of the generated code for a
@@ -10940,7 +10940,7 @@ dwarf2out_end_block (blocknum)
      register unsigned blocknum;
 {
   function_section (current_function_decl);
-  ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
+  ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
 }
 
 /* Returns nonzero if it is appropriate not to emit any debugging
@@ -10975,7 +10975,7 @@ dwarf2out_label (insn)
     {
       function_section (current_function_decl);
       sprintf (label, INSN_LABEL_FMT, current_funcdef_number);
-      ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, label,
+      ASM_OUTPUT_DEBUG_LABEL (asm_out_file, label,
                                 (unsigned) INSN_UID (insn));
     }
 }
index 0e22b069461c6c1a9e109ea77bdc7664b343a617..ae2864aec0a45ac4a4c78407f404671f68c8d3f9 100644 (file)
@@ -2270,7 +2270,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
             referenced (in the form of having its address taken.  */
          /* ??? Figure out how not to do this unconditionally.  This
             interferes with bundling on LIW targets.  */
-         ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
+         ASM_OUTPUT_DEBUG_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
 
          if (debug_info_level == DINFO_LEVEL_NORMAL
              || debug_info_level == DINFO_LEVEL_VERBOSE)
index b47842e94965d19820ccf1e0b340d0f4384bef8b..87228a45c3b2b8f3a3b03362c5d9e11582c08fa7 100644 (file)
@@ -5945,6 +5945,19 @@ 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_DEBUG_LABEL
+@item ASM_OUTPUT_DEBUG_LABEL (@var{stream}, @var{prefix}, @var{num})
+A C statement to output to the stdio stream @var{stream} a debug info
+label whose name is made from the string @var{prefix} and the number
+@var{num}.  This is useful for VLIW targets, where debug info labels
+may need to be treated differently than branch target labels.  On some
+systems, branch target labels must be at the beginning of instruction
+bundles, but debug info labels can occur in the middle of instruction
+bundles.
+
+If this macro is not defined, then @code{ASM_OUTPUT_INTERNAL_LABEL} will be
+used.
+
 @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