void print_insn (char *buf, rtx x, int verbose) { char t[BUF_LEN]; rtx insn = x; switch (GET_CODE (x)) { case INSN: print_pattern (t, PATTERN (x), verbose); if (verbose) sprintf (buf, "%s: %s", (*current_sched_info->print_insn) (x, 1), t); else sprintf (buf, "%-4d %s", INSN_UID (x), t); break; case JUMP_INSN: print_pattern (t, PATTERN (x), verbose); if (verbose) sprintf (buf, "%s: jump %s", (*current_sched_info->print_insn) (x, 1), t); else sprintf (buf, "%-4d %s", INSN_UID (x), t); break; case CALL_INSN: x = PATTERN (insn); if (GET_CODE (x) == PARALLEL) { x = XVECEXP (x, 0, 0); print_pattern (t, x, verbose); } else strcpy (t, "call <...>"); if (verbose) sprintf (buf, "%s: %s", (*current_sched_info->print_insn) (x, 1), t); else sprintf (buf, "%-4d %s", INSN_UID (insn), t); break; case CODE_LABEL: sprintf (buf, "L%d:", INSN_UID (x)); break; case BARRIER: sprintf (buf, "i% 4d: barrier", INSN_UID (x)); break; case NOTE: if (NOTE_LINE_NUMBER (x) > 0) { expanded_location xloc; NOTE_EXPANDED_LOCATION (xloc, x); sprintf (buf, "%4d note \"%s\" %d", INSN_UID (x), xloc.file, xloc.line); } else sprintf (buf, "%4d %s", INSN_UID (x), GET_NOTE_INSN_NAME (NOTE_LINE_NUMBER (x))); break; default: if (verbose) { sprintf (buf, "Not an INSN at all\n"); debug_rtx (x); } else sprintf (buf, "i%-4d <What?>", INSN_UID (x)); } } /* print_insn */
unsigned int insn_locators_initialize (void) { tree block = NULL; tree last_block = NULL; rtx insn, next; int loc = 0; int line_number = 0, last_line_number = 0; const char *file_name = NULL, *last_file_name = NULL; prologue_locator = epilogue_locator = 0; block_locators_locs = VEC_alloc (int, heap, 32); block_locators_blocks = VEC_alloc (tree, gc, 32); line_locators_locs = VEC_alloc (int, heap, 32); line_locators_lines = VEC_alloc (int, heap, 32); file_locators_locs = VEC_alloc (int, heap, 32); VARRAY_CHAR_PTR_INIT (file_locators_files, 32, "file_locators_files"); for (insn = get_insns (); insn; insn = next) { int active = 0; next = NEXT_INSN (insn); if (NOTE_P (insn)) { gcc_assert (NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_BEG && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BLOCK_END); if (NOTE_LINE_NUMBER (insn) > 0) { expanded_location xloc; NOTE_EXPANDED_LOCATION (xloc, insn); line_number = xloc.line; file_name = xloc.file; } } else active = (active_insn_p (insn) && GET_CODE (PATTERN (insn)) != ADDR_VEC && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC); check_block_change (insn, &block); if (active || !next || (!prologue_locator && file_name)) { if (last_block != block) { loc++; VEC_safe_push (int, heap, block_locators_locs, loc); VEC_safe_push (tree, gc, block_locators_blocks, block); last_block = block; } if (last_line_number != line_number) { loc++; VEC_safe_push (int, heap, line_locators_locs, loc); VEC_safe_push (int, heap, line_locators_lines, line_number); last_line_number = line_number; } if (last_file_name != file_name) { loc++; VEC_safe_push (int, heap, file_locators_locs, loc); VARRAY_PUSH_CHAR_PTR (file_locators_files, (char *) file_name); last_file_name = file_name; } if (!prologue_locator && file_name) prologue_locator = loc; if (!next) epilogue_locator = loc; if (active) INSN_LOCATOR (insn) = loc; } } /* Tag the blocks with a depth number so that change_scope can find the common parent easily. */ set_block_levels (DECL_INITIAL (cfun->decl), 0); free_block_changes (); return 0; }