/* RTL utility routines.
- Copyright (C) 1987-2018 Free Software Foundation, Inc.
+ Copyright (C) 1987-2020 Free Software Foundation, Inc.
This file is part of GCC.
#undef DEF_REG_NOTE
};
-static int rtx_alloc_counts[(int) LAST_AND_UNUSED_RTX_CODE];
-static int rtx_alloc_sizes[(int) LAST_AND_UNUSED_RTX_CODE];
-static int rtvec_alloc_counts;
-static int rtvec_alloc_sizes;
+static size_t rtx_alloc_counts[(int) LAST_AND_UNUSED_RTX_CODE];
+static size_t rtx_alloc_sizes[(int) LAST_AND_UNUSED_RTX_CODE];
+static size_t rtvec_alloc_counts;
+static size_t rtvec_alloc_sizes;
\f
/* Allocate an rtx vector of N elements.
rtx rt = ggc_alloc_rtx_def_stat (RTX_CODE_SIZE (code) + extra
PASS_MEM_STAT);
- /* We want to clear everything up to the FLD array. Normally, this
- is one int, but we don't want to assume that and it isn't very
- portable anyway; this is. */
-
- memset (rt, 0, RTX_HDR_SIZE);
- PUT_CODE (rt, code);
+ rtx_init (rt, code);
if (GATHER_STATISTICS)
{
return orig;
break;
- case CLOBBER_HIGH:
- gcc_assert (REG_P (XEXP (orig, 0)));
- return orig;
-
case CONST:
if (shared_const_p (orig))
return orig;
return CALL_INSN;
if (ANY_RETURN_P (x))
return JUMP_INSN;
+ if (GET_CODE (x) == ASM_OPERANDS && ASM_OPERANDS_LABEL_VEC (x))
+ return JUMP_INSN;
if (GET_CODE (x) == SET)
{
if (GET_CODE (SET_DEST (x)) == PC)
return CALL_INSN;
if (has_return_p)
return JUMP_INSN;
+ if (GET_CODE (XVECEXP (x, 0, 0)) == ASM_OPERANDS
+ && ASM_OPERANDS_LABEL_VEC (XVECEXP (x, 0, 0)))
+ return JUMP_INSN;
}
#ifdef GENERATOR_FILE
if (GET_CODE (x) == MATCH_OPERAND
return INSN;
}
+/* Comparator of indices based on rtx_alloc_counts. */
+
+static int
+rtx_count_cmp (const void *p1, const void *p2)
+{
+ const unsigned *n1 = (const unsigned *)p1;
+ const unsigned *n2 = (const unsigned *)p2;
+
+ return rtx_alloc_counts[*n1] - rtx_alloc_counts[*n2];
+}
+
void
dump_rtx_statistics (void)
{
- int i;
int total_counts = 0;
int total_sizes = 0;
return;
}
- fprintf (stderr, "\nRTX Kind Count Bytes\n");
- fprintf (stderr, "---------------------------------------\n");
- for (i = 0; i < LAST_AND_UNUSED_RTX_CODE; i++)
- if (rtx_alloc_counts[i])
- {
- fprintf (stderr, "%-20s %7d %10d\n", GET_RTX_NAME (i),
- rtx_alloc_counts[i], rtx_alloc_sizes[i]);
- total_counts += rtx_alloc_counts[i];
- total_sizes += rtx_alloc_sizes[i];
- }
+ fprintf (stderr, "\nRTX Kind Count Bytes\n");
+ fprintf (stderr, "-------------------------------------------\n");
+
+ auto_vec<unsigned> indices (LAST_AND_UNUSED_RTX_CODE);
+ for (unsigned i = 0; i < LAST_AND_UNUSED_RTX_CODE; i++)
+ indices.quick_push (i);
+ indices.qsort (rtx_count_cmp);
+
+ for (unsigned i = 0; i < LAST_AND_UNUSED_RTX_CODE; i++)
+ {
+ unsigned j = indices[i];
+ if (rtx_alloc_counts[j])
+ {
+ fprintf (stderr, "%-24s " PRsa (6) " " PRsa (9) "\n",
+ GET_RTX_NAME (j),
+ SIZE_AMOUNT (rtx_alloc_counts[j]),
+ SIZE_AMOUNT (rtx_alloc_sizes[j]));
+ total_counts += rtx_alloc_counts[j];
+ total_sizes += rtx_alloc_sizes[j];
+ }
+ }
+
if (rtvec_alloc_counts)
{
- fprintf (stderr, "%-20s %7d %10d\n", "rtvec",
- rtvec_alloc_counts, rtvec_alloc_sizes);
+ fprintf (stderr, "%-24s " PRsa (6) " " PRsa (9) "\n", "rtvec",
+ SIZE_AMOUNT (rtvec_alloc_counts),
+ SIZE_AMOUNT (rtvec_alloc_sizes));
total_counts += rtvec_alloc_counts;
total_sizes += rtvec_alloc_sizes;
}
- fprintf (stderr, "---------------------------------------\n");
- fprintf (stderr, "%-20s %7d %10d\n",
- "Total", total_counts, total_sizes);
- fprintf (stderr, "---------------------------------------\n");
+ fprintf (stderr, "-----------------------------------------------\n");
+ fprintf (stderr, "%-24s " PRsa (6) " " PRsa (9) "\n",
+ "Total", SIZE_AMOUNT (total_counts),
+ SIZE_AMOUNT (total_sizes));
+ fprintf (stderr, "-----------------------------------------------\n");
}
\f
#if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)