Line 49... |
Line 49... |
PRINTF (" "); print_bb_num (f->bb[i].next[1]);
|
PRINTF (" "); print_bb_num (f->bb[i].next[1]);
|
PRINTF (" prev "); print_bb_num (f->bb[i].prev[0]);
|
PRINTF (" prev "); print_bb_num (f->bb[i].prev[0]);
|
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 (i, f->bb[i].insn, f->bb[i].ninsn, 0);
|
}
|
}
|
if (f->nmsched) {
|
if (f->nmsched) {
|
PRINTF ("\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]);
|
Line 346... |
Line 346... |
cucdebug (1, "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 && ii->opt[0] & OPT_DEST) {
|
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) {
|
cucdebug (1, "%x %x\n", ii->opt[0], ii->op[0]);
|
cucdebug (1, "Invalid dest conditional type opt%x op%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) {
|
int t = ii->op[k];
|
int t = ii->op[k];
|
if (REF_BB(t) >= f->num_bb || REF_I (t) >= f->bb[REF_BB(t)].ninsn
|
if (REF_BB(t) >= f->num_bb || REF_I (t) >= f->bb[REF_BB(t)].ninsn
|
|| (ii->index == II_CMOV || ii->index == II_ADD) && (
|
|| (ii->index == II_CMOV || ii->index == II_ADD) && (
|
(f->INSN(t).type & IT_COND) != (ii->type & IT_COND) && k < 3
|
(f->INSN(t).type & IT_COND) != (ii->type & IT_COND) && k < 3
|
|| !(f->INSN(t).type & IT_COND) && k == 3)) goto err;
|
|| !(f->INSN(t).type & IT_COND) && k == 3)) {
|
|
cucdebug (1, "Conditional misused\n");
|
|
goto err;
|
|
}
|
}
|
}
|
if (k && ii->opt[k] & OPT_DEST) {
|
if (k && ii->opt[k] & OPT_DEST) {
|
cucdebug (1, "Destination only allowed for op0!\n");
|
cucdebug (1, "Destination only allowed for op0!\n");
|
goto err;
|
goto err;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
return;
|
return;
|
err:
|
err:
|
cucdebug (1, "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");
|
|
cucdebug (1, "Anomaly detected at [%x_%x].%i\n", i, j, k);
|
exit (1);
|
exit (1);
|
}
|
}
|
|
|
/* Build basic blocks */
|
/* Build basic blocks */
|
void build_bb (cuc_func *f)
|
void build_bb (cuc_func *f)
|