aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2009-06-04 23:12:27 +0000
committerCary Coutant <ccoutant@gcc.gnu.org>2009-06-04 16:12:27 -0700
commit6c52e687e487eb5bfc57399754d72e05845159d8 (patch)
tree62b2a3883be83cd19685457df195f788da6d5d99 /gcc/final.c
parent535ff342b76110501c8673df1ae44db5e6ea55b4 (diff)
downloadgcc-6c52e687e487eb5bfc57399754d72e05845159d8.zip
gcc-6c52e687e487eb5bfc57399754d72e05845159d8.tar.gz
gcc-6c52e687e487eb5bfc57399754d72e05845159d8.tar.bz2
basic-block.h (struct basic_block_def): Add discriminator field.
* basic-block.h (struct basic_block_def): Add discriminator field. * dbxout.c (dbxout_source_line): Add new parameter. Change all callers. * debug.c (do_nothing_debug_hooks): Add additional entry. (debug_nothing_int_charstar_int): New function. * debug.h (struct gcc_debug_hooks): Add parameter to source_line hook. (debug_nothing_int_charstar_int): New declaration. * dwarf2out.c (dwarf2out_source_line): Add new parameter. Write discriminator value in .loc directive. * final.c (last_discriminator): New variable. (discriminator): New variable. (final_start_function): Initialize above variables, pass current discriminator to debug hook. (notice_source_line): Check for discriminator change. * gimple-pretty-print.c (dump_bb_header): Print discriminator value. * sdbout.c (sdbout_source_line): New parameter. * tree-cfg.c (struct locus_discrim_map): New structure type. (discriminator_per_locus): New hash table. (build_gimple_cfg): Allocate and free discriminator hash table. (make_edges): Call assign_discriminator. (locus_map_hash): New function. (locus_map_eq): New function. (next_discriminator_for_locus): New function. (same_line_p): New function. (assign_discriminator): New function. (make_cond_expr_edges): Call assign_discriminator. (make_gimple_switch_edges): Likewise. (first_non_label_stmt): New function. * vmsdbgout.c (vmsdbgout_source_line): Add new parameter. Change all callers. * xcoffout.c (xcoffout_source_line): Add new parameter. * configure.ac (gcc_cv_as_discriminator): New configury check for gas support for discriminator. * configure: Regenerate. * config.in: Regenerate. From-SVN: r148191
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/final.c b/gcc/final.c
index 785b0906..1fae1b4 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -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;