Line 51... |
Line 51... |
printf (" "); print_bb_num (f->bb[i].prev[1]);
|
printf (" "); print_bb_num (f->bb[i].prev[1]);
|
printf ("\n");
|
printf ("\n");
|
|
|
if (f->bb[i].insn) print_insns (f->bb[i].insn, f->bb[i].ninsn, 0);
|
if (f->bb[i].insn) print_insns (f->bb[i].insn, f->bb[i].ninsn, 0);
|
}
|
}
|
printf ("\nmsched: ");
|
|
if (f->nmsched) {
|
if (f->nmsched) {
|
|
printf ("\nmsched: ");
|
for (i = 0; i < f->nmsched; i++)
|
for (i = 0; i < f->nmsched; i++)
|
printf ("%x ", f->msched[i]);
|
printf ("%x ", f->msched[i]);
|
printf ("\n");
|
printf ("\n\n\n");
|
}
|
} else printf ("\n");
|
fflush (stdout);
|
fflush (stdout);
|
}
|
}
|
|
|
/* Copies src basic block into destination */
|
/* Copies src basic block into destination */
|
cuc_bb *cpy_bb (cuc_bb *dest, cuc_bb *src)
|
cuc_bb *cpy_bb (cuc_bb *dest, cuc_bb *src)
|
Line 342... |
Line 342... |
|
|
/* We do a quick check if there are some anomalies with references */
|
/* We do a quick check if there are some anomalies with references */
|
void cuc_check (cuc_func *f)
|
void cuc_check (cuc_func *f)
|
{
|
{
|
int i, j, k;
|
int i, j, k;
|
if (cuc_debug) printf ("cuc_check\n");
|
cucdebug (1, "cuc_check\n");
|
for (i = 0; i < f->num_bb; i++) {
|
for (i = 0; i < f->num_bb; i++) {
|
if (!f->bb[i].insn && f->bb[i].ninsn) goto err;
|
if (!f->bb[i].insn && f->bb[i].ninsn) goto err;
|
for (j = 0; j < f->bb[i].ninsn; j++) {
|
for (j = 0; j < f->bb[i].ninsn; j++) {
|
cuc_insn *ii = &f->bb[i].insn[j];
|
cuc_insn *ii = &f->bb[i].insn[j];
|
if ((ii->index == II_CMOV || ii->index == II_ADD) && ii->type & IT_COND) {
|
if ((ii->index == II_CMOV || ii->index == II_ADD) && ii->type & IT_COND) {
|
k = 0;
|
k = 0;
|
assert (ii->opt[k] & OPT_REGISTER);
|
assert (ii->opt[k] & OPT_REGISTER);
|
if ((signed)ii->op[k] >= 0 && ii->op[k] != FLAG_REG && ii->op[k] != LRBB_REG) {
|
if ((signed)ii->op[k] >= 0 && ii->op[k] != FLAG_REG && ii->op[k] != LRBB_REG) {
|
printf ("%x %x\n", ii->opt[0], ii->op[0]);
|
cucdebug (1, "%x %x\n", ii->opt[0], ii->op[0]);
|
goto err;
|
goto err;
|
}
|
}
|
}
|
}
|
for (k = 0; k < MAX_OPERANDS; k++)
|
for (k = 0; k < MAX_OPERANDS; k++)
|
if (ii->opt[k] & OPT_REF) {
|
if (ii->opt[k] & OPT_REF) {
|
Line 367... |
Line 367... |
}
|
}
|
}
|
}
|
}
|
}
|
return;
|
return;
|
err:
|
err:
|
printf ("Anomaly detected at %x.%x[%i]\n", i, j, k);
|
cucdebug (1, "Anomaly detected at %x.%x[%i]\n", i, j, k);
|
print_cuc_bb (f, "ANOMALY");
|
print_cuc_bb (f, "ANOMALY");
|
exit (1);
|
exit (1);
|
}
|
}
|
|
|
/* Build basic blocks */
|
/* Build basic blocks */
|
Line 788... |
Line 788... |
for (i = 0; i < f->num_init_bb; i++)
|
for (i = 0; i < f->num_init_bb; i++)
|
f->init_bb_reloc[i] = reloc[f->init_bb_reloc[i]];
|
f->init_bb_reloc[i] = reloc[f->init_bb_reloc[i]];
|
|
|
/* repair references */
|
/* repair references */
|
for (i = 0; i < f->num_bb; i++) if (!(f->bb[i].type & BB_DEAD)) {
|
for (i = 0; i < f->num_bb; i++) if (!(f->bb[i].type & BB_DEAD)) {
|
printf ("%x %x %x %x %x\n", i, f->bb[i].prev[0], f->bb[i].prev[1], f->bb[i].next[0], f->bb[i].next[1]);
|
cucdebug (5, "%x %x %x %x %x\n", i, f->bb[i].prev[0], f->bb[i].prev[1], f->bb[i].next[0], f->bb[i].next[1]);
|
fflush (stdout);
|
fflush (stdout);
|
if (f->bb[i].prev[0] >= 0 && f->bb[i].prev[0] != BBID_START)
|
if (f->bb[i].prev[0] >= 0 && f->bb[i].prev[0] != BBID_START)
|
assert ((f->bb[i].prev[0] = reloc[f->bb[i].prev[0]]) >= 0);
|
assert ((f->bb[i].prev[0] = reloc[f->bb[i].prev[0]]) >= 0);
|
if (f->bb[i].prev[1] >= 0 && f->bb[i].prev[1] != BBID_START)
|
if (f->bb[i].prev[1] >= 0 && f->bb[i].prev[1] != BBID_START)
|
assert ((f->bb[i].prev[1] = reloc[f->bb[i].prev[1]]) >= 0);
|
assert ((f->bb[i].prev[1] = reloc[f->bb[i].prev[1]]) >= 0);
|