diff options
Diffstat (limited to 'gcc/final.c')
-rw-r--r-- | gcc/final.c | 99 |
1 files changed, 36 insertions, 63 deletions
diff --git a/gcc/final.c b/gcc/final.c index 1fa93d9036d..a4b0f36c624 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -46,15 +46,8 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tm.h" -#include "hash-set.h" -#include "machmode.h" -#include "vec.h" -#include "double-int.h" -#include "input.h" #include "alias.h" #include "symtab.h" -#include "wide-int.h" -#include "inchash.h" #include "tree.h" #include "varasm.h" #include "hard-reg-set.h" @@ -81,10 +74,6 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "targhooks.h" #include "debug.h" -#include "hashtab.h" -#include "statistics.h" -#include "real.h" -#include "fixed-value.h" #include "expmed.h" #include "dojump.h" #include "explow.h" @@ -93,15 +82,10 @@ along with GCC; see the file COPYING3. If not see #include "stmt.h" #include "expr.h" #include "tree-pass.h" -#include "hash-map.h" -#include "is-a.h" -#include "plugin-api.h" -#include "ipa-ref.h" #include "cgraph.h" #include "tree-ssa.h" #include "coverage.h" #include "df.h" -#include "ggc.h" #include "cfgloop.h" #include "params.h" #include "tree-pretty-print.h" /* for dump_function_header */ @@ -191,7 +175,6 @@ static rtx last_ignored_compare = 0; static int insn_counter = 0; -#ifdef HAVE_cc0 /* This variable contains machine-dependent flags (defined in tm.h) set and examined by output routines that describe how to interpret the condition codes properly. */ @@ -202,7 +185,6 @@ CC_STATUS cc_status; from before the insn. */ CC_STATUS cc_prev_status; -#endif /* Number of unmatched NOTE_INSN_BLOCK_BEG notes we have seen. */ @@ -244,7 +226,7 @@ static void output_asm_operand_names (rtx *, int *, int); #ifdef LEAF_REGISTERS static void leaf_renumber_regs (rtx_insn *); #endif -#ifdef HAVE_cc0 +#if HAVE_cc0 static int alter_cond (rtx); #endif #ifndef ADDR_VEC_ALIGN @@ -664,13 +646,13 @@ align_fuzz (rtx start, rtx end, int known_align_log, unsigned int growth) int insn_current_reference_address (rtx_insn *branch) { - rtx dest, seq; + rtx dest; int seq_uid; if (! INSN_ADDRESSES_SET_P ()) return 0; - seq = NEXT_INSN (PREV_INSN (branch)); + rtx_insn *seq = NEXT_INSN (PREV_INSN (branch)); seq_uid = INSN_UID (seq); if (!JUMP_P (branch)) /* This can happen for example on the PA; the objective is to know the @@ -1989,7 +1971,7 @@ dump_basic_block_info (FILE *file, rtx_insn *insn, basic_block *start_to_bb, if (bb->frequency) fprintf (file, " freq:%d", bb->frequency); if (bb->count) - fprintf (file, " count:%"PRId64, + fprintf (file, " count:%" PRId64, bb->count); fprintf (file, " seq:%d", (*bb_seqn)++); fprintf (file, "\n%s PRED:", ASM_COMMENT_START); @@ -2031,21 +2013,20 @@ final (rtx_insn *first, FILE *file, int optimize_p) last_ignored_compare = 0; -#ifdef HAVE_cc0 - for (insn = first; insn; insn = NEXT_INSN (insn)) - { - /* If CC tracking across branches is enabled, record the insn which - jumps to each branch only reached from one place. */ - if (optimize_p && JUMP_P (insn)) - { - rtx lab = JUMP_LABEL (insn); - if (lab && LABEL_P (lab) && LABEL_NUSES (lab) == 1) - { - LABEL_REFS (lab) = insn; - } - } - } -#endif + if (HAVE_cc0) + for (insn = first; insn; insn = NEXT_INSN (insn)) + { + /* If CC tracking across branches is enabled, record the insn which + jumps to each branch only reached from one place. */ + if (optimize_p && JUMP_P (insn)) + { + rtx lab = JUMP_LABEL (insn); + if (lab && LABEL_P (lab) && LABEL_NUSES (lab) == 1) + { + LABEL_REFS (lab) = insn; + } + } + } init_recog (); @@ -2200,7 +2181,7 @@ rtx_insn * final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, int nopeepholes ATTRIBUTE_UNUSED, int *seen) { -#ifdef HAVE_cc0 +#if HAVE_cc0 rtx set; #endif rtx_insn *next; @@ -2218,6 +2199,7 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, switch (NOTE_KIND (insn)) { case NOTE_INSN_DELETED: + case NOTE_INSN_UPDATE_SJLJ_CONTEXT: break; case NOTE_INSN_SWITCH_TEXT_SECTIONS: @@ -2236,10 +2218,17 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, suffixing "cold" to the original function's name. */ if (in_cold_section_p) { - tree cold_function_name + cold_function_name = clone_function_name (current_function_decl, "cold"); +#ifdef ASM_DECLARE_COLD_FUNCTION_NAME + ASM_DECLARE_COLD_FUNCTION_NAME (asm_out_file, + IDENTIFIER_POINTER + (cold_function_name), + current_function_decl); +#else ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (cold_function_name)); +#endif } break; @@ -2507,7 +2496,7 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, || GET_CODE (body) == CLOBBER) break; -#ifdef HAVE_cc0 +#if HAVE_cc0 { /* If there is a REG_CC_SETTER note on this insn, it means that the setting of the condition code was done in the delay slot @@ -2724,7 +2713,7 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, body = PATTERN (insn); -#ifdef HAVE_cc0 +#if HAVE_cc0 set = single_set (insn); /* Check for redundant test and compare instructions @@ -2900,10 +2889,9 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, #endif -#ifdef HAVE_peephole /* Do machine-specific peephole optimizations if desired. */ - if (optimize_p && !flag_no_peephole && !nopeepholes) + if (HAVE_peephole && optimize_p && !flag_no_peephole && !nopeepholes) { rtx_insn *next = peephole (insn); /* When peepholing, if there were notes within the peephole, @@ -2932,7 +2920,6 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, /* PEEPHOLE might have changed this. */ body = PATTERN (insn); } -#endif /* Try to recognize the instruction. If successful, verify that the operands satisfy the @@ -2969,7 +2956,7 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, && GET_CODE (PATTERN (insn)) == COND_EXEC) current_insn_predicate = COND_EXEC_TEST (PATTERN (insn)); -#ifdef HAVE_cc0 +#if HAVE_cc0 cc_prev_status = cc_status; /* Update `cc_status' for this instruction. @@ -3258,7 +3245,7 @@ walk_alter_subreg (rtx *xp, bool *changed) return *xp; } -#ifdef HAVE_cc0 +#if HAVE_cc0 /* Given BODY, the body of a jump instruction, alter the jump condition as required by the bits that are set in cc_status.flags. @@ -4127,25 +4114,10 @@ fprint_ul (FILE *f, unsigned long value) int sprint_ul (char *s, unsigned long value) { - int len; - char tmp_c; - int i; - int j; - - len = sprint_ul_rev (s, value); + int len = sprint_ul_rev (s, value); s[len] = '\0'; - /* Reverse the string. */ - i = 0; - j = len - 1; - while (i < j) - { - tmp_c = s[i]; - s[i] = s[j]; - s[j] = tmp_c; - i++; j--; - } - + std::reverse (s, s + len); return len; } @@ -4434,6 +4406,7 @@ leaf_renumber_regs_insn (rtx in_rtx) df_set_regs_ever_live (newreg, true); SET_REGNO (in_rtx, newreg); in_rtx->used = 1; + return; } if (INSN_P (in_rtx)) |