tcg: Remove check_regs
We now check the consistency of reg_to_temp[] with each update, so the utility of checking consistency at the end of each opcode is minimal. In addition, the form of this check is quite expensive, consuming 10% of a checking-enabled build. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
098859f108
commit
568e010b89
76
tcg/tcg.c
76
tcg/tcg.c
@ -2900,79 +2900,6 @@ static bool liveness_pass_2(TCGContext *s)
|
||||
return changes;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_TCG
|
||||
static void dump_regs(TCGContext *s)
|
||||
{
|
||||
TCGTemp *ts;
|
||||
int i;
|
||||
char buf[64];
|
||||
|
||||
for(i = 0; i < s->nb_temps; i++) {
|
||||
ts = &s->temps[i];
|
||||
printf(" %10s: ", tcg_get_arg_str_ptr(s, buf, sizeof(buf), ts));
|
||||
switch(ts->val_type) {
|
||||
case TEMP_VAL_REG:
|
||||
printf("%s", tcg_target_reg_names[ts->reg]);
|
||||
break;
|
||||
case TEMP_VAL_MEM:
|
||||
printf("%d(%s)", (int)ts->mem_offset,
|
||||
tcg_target_reg_names[ts->mem_base->reg]);
|
||||
break;
|
||||
case TEMP_VAL_CONST:
|
||||
printf("$0x%" PRIx64, ts->val);
|
||||
break;
|
||||
case TEMP_VAL_DEAD:
|
||||
printf("D");
|
||||
break;
|
||||
default:
|
||||
printf("???");
|
||||
break;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
for(i = 0; i < TCG_TARGET_NB_REGS; i++) {
|
||||
if (s->reg_to_temp[i] != NULL) {
|
||||
printf("%s: %s\n",
|
||||
tcg_target_reg_names[i],
|
||||
tcg_get_arg_str_ptr(s, buf, sizeof(buf), s->reg_to_temp[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void check_regs(TCGContext *s)
|
||||
{
|
||||
int reg;
|
||||
int k;
|
||||
TCGTemp *ts;
|
||||
char buf[64];
|
||||
|
||||
for (reg = 0; reg < TCG_TARGET_NB_REGS; reg++) {
|
||||
ts = s->reg_to_temp[reg];
|
||||
if (ts != NULL) {
|
||||
if (ts->val_type != TEMP_VAL_REG || ts->reg != reg) {
|
||||
printf("Inconsistency for register %s:\n",
|
||||
tcg_target_reg_names[reg]);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (k = 0; k < s->nb_temps; k++) {
|
||||
ts = &s->temps[k];
|
||||
if (ts->val_type == TEMP_VAL_REG
|
||||
&& ts->kind != TEMP_FIXED
|
||||
&& s->reg_to_temp[ts->reg] != ts) {
|
||||
printf("Inconsistency for temp %s:\n",
|
||||
tcg_get_arg_str_ptr(s, buf, sizeof(buf), ts));
|
||||
fail:
|
||||
printf("reg state:\n");
|
||||
dump_regs(s);
|
||||
tcg_abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void temp_allocate_frame(TCGContext *s, TCGTemp *ts)
|
||||
{
|
||||
intptr_t off, size, align;
|
||||
@ -4297,9 +4224,6 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb, target_ulong pc_start)
|
||||
tcg_reg_alloc_op(s, op);
|
||||
break;
|
||||
}
|
||||
#ifdef CONFIG_DEBUG_TCG
|
||||
check_regs(s);
|
||||
#endif
|
||||
/* Test for (pending) buffer overflow. The assumption is that any
|
||||
one operation beginning below the high water mark cannot overrun
|
||||
the buffer completely. Thus we can test for overflow after
|
||||
|
Loading…
Reference in New Issue
Block a user