diff options
Diffstat (limited to 'gcc/df-core.c')
-rw-r--r-- | gcc/df-core.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gcc/df-core.c b/gcc/df-core.c index 1cd49b133be..8efbd21a014 100644 --- a/gcc/df-core.c +++ b/gcc/df-core.c @@ -1875,6 +1875,69 @@ df_print_regset (FILE *file, bitmap r) } +/* Write information about registers and basic blocks into FILE. The + bitmap is in the form used by df_byte_lr. This is part of making a + debugging dump. */ + +void +df_print_byte_regset (FILE *file, bitmap r) +{ + unsigned int max_reg = max_reg_num (); + bitmap_iterator bi; + + if (r == NULL) + fputs (" (nil)", file); + else + { + unsigned int i; + for (i = 0; i < max_reg; i++) + { + unsigned int first = df_byte_lr_get_regno_start (i); + unsigned int len = df_byte_lr_get_regno_len (i); + + if (len > 1) + { + bool found = false; + unsigned int j; + + EXECUTE_IF_SET_IN_BITMAP (r, first, j, bi) + { + found = j < first + len; + break; + } + if (found) + { + const char * sep = ""; + fprintf (file, " %d", i); + if (i < FIRST_PSEUDO_REGISTER) + fprintf (file, " [%s]", reg_names[i]); + fprintf (file, "("); + EXECUTE_IF_SET_IN_BITMAP (r, first, j, bi) + { + if (j > first + len - 1) + break; + fprintf (file, "%s%d", sep, j-first); + sep = ", "; + } + fprintf (file, ")"); + } + } + else + { + if (bitmap_bit_p (r, first)) + { + fprintf (file, " %d", i); + if (i < FIRST_PSEUDO_REGISTER) + fprintf (file, " [%s]", reg_names[i]); + } + } + + } + } + fprintf (file, "\n"); +} + + /* Dump dataflow info. */ void |