]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/final.c
basic-block.h (struct basic_block_def): Add discriminator field.
[thirdparty/gcc.git] / gcc / final.c
index 785b090685a0d350e90e1263b12099983903fef4..1fae1b4e2388d521078513f1c2e0804e21387b52 100644 (file)
@@ -130,6 +130,12 @@ rtx current_output_insn;
 /* Line number of last NOTE.  */
 static int last_linenum;
 
+/* Last discriminator written to assembly.  */
+static int last_discriminator;
+
+/* Discriminator of current block.  */
+static int discriminator;
+
 /* Highest line number in current block.  */
 static int high_block_linenum;
 
@@ -1496,6 +1502,7 @@ final_start_function (rtx first ATTRIBUTE_UNUSED, FILE *file,
 
   last_filename = locator_file (prologue_locator);
   last_linenum = locator_line (prologue_locator);
+  last_discriminator = discriminator = 0;
 
   high_block_linenum = high_function_linenum = last_linenum;
 
@@ -1852,6 +1859,8 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
          else
            *seen |= SEEN_BB;
 
+          discriminator = NOTE_BASIC_BLOCK (insn)->discriminator;
+
          break;
 
        case NOTE_INSN_EH_REGION_BEG:
@@ -2183,7 +2192,9 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
           note in a row.  */
        if (notice_source_line (insn))
          {
-           (*debug_hooks->source_line) (last_linenum, last_filename);
+           (*debug_hooks->source_line) (last_linenum,
+                                        last_filename,
+                                        last_discriminator);
          }
 
        if (GET_CODE (body) == ASM_INPUT)
@@ -2709,11 +2720,13 @@ notice_source_line (rtx insn)
   if (filename
       && (force_source_line
          || filename != last_filename
-         || last_linenum != linenum))
+         || last_linenum != linenum
+         || last_discriminator != discriminator))
     {
       force_source_line = false;
       last_filename = filename;
       last_linenum = linenum;
+      last_discriminator = discriminator;
       high_block_linenum = MAX (last_linenum, high_block_linenum);
       high_function_linenum = MAX (last_linenum, high_function_linenum);
       return true;