Line 63... |
Line 63... |
unsigned long c = f->INSN(ii->op[1]).op[2];
|
unsigned long c = f->INSN(ii->op[1]).op[2];
|
int rref = f->INSN(ii->op[1]).op[1];
|
int rref = f->INSN(ii->op[1]).op[1];
|
unsigned long r;
|
unsigned long r;
|
if (!(f->INSN(ii->op[1]).opt[1] & OPT_REF)) continue;
|
if (!(f->INSN(ii->op[1]).opt[1] & OPT_REF)) continue;
|
r = f->INSN(rref).op[0];
|
r = f->INSN(rref).op[0];
|
|
|
|
/* Assignment must be in same basic block */
|
|
if (REF_BB(rref) != b) continue;
|
|
|
for (j = 0; j < 2; j++) {
|
for (j = 0; j < 2; j++) {
|
change_insn_type (&n[j], II_ADD);
|
change_insn_type (&n[j], II_ADD);
|
n[j].type = 0;
|
n[j].type = 0;
|
n[j].dep = NULL;
|
n[j].dep = NULL;
|
n[j].op[0] = r; n[j].opt[0] = OPT_REGISTER | OPT_DEST;
|
n[j].op[0] = r; n[j].opt[0] = OPT_REGISTER | OPT_DEST;
|
Line 126... |
Line 130... |
}
|
}
|
|
|
/* Now add two BBs at the end and relink */
|
/* Now add two BBs at the end and relink */
|
if (ok) {
|
if (ok) {
|
int cnt = 0;
|
int cnt = 0;
|
printf ("%x rref %x cnt %i\n", b, rref, cnt);
|
cucdebug (1, "%x rref %x cnt %i\n", b, rref, cnt);
|
fflush (stdout);
|
fflush (stdout);
|
for (j = 0; j < 2; j++) {
|
for (j = 0; j < 2; j++) {
|
int nb = f->num_bb++;
|
int nb = f->num_bb++;
|
int sb;
|
int sb;
|
int k;
|
int k;
|
Line 138... |
Line 142... |
f->bb[nb].type = 0;
|
f->bb[nb].type = 0;
|
f->bb[nb].first = -1; f->bb[nb].last = -1;
|
f->bb[nb].first = -1; f->bb[nb].last = -1;
|
f->bb[nb].prev[0] = b; f->bb[nb].prev[1] = -1;
|
f->bb[nb].prev[0] = b; f->bb[nb].prev[1] = -1;
|
sb = f->bb[nb].next[0] = f->bb[b].next[j]; f->bb[nb].next[1] = -1;
|
sb = f->bb[nb].next[0] = f->bb[b].next[j]; f->bb[nb].next[1] = -1;
|
assert (cnt >= 0);
|
assert (cnt >= 0);
|
printf ("%x %x %x rref %x cnt %i\n", b, sb, nb, rref, cnt);
|
cucdebug (2, "%x %x %x rref %x cnt %i\n", b, sb, nb, rref, cnt);
|
fflush (stdout);
|
fflush (stdout);
|
assert (sb >= 0);
|
assert (sb >= 0);
|
f->bb[b].next[j] = nb;
|
f->bb[b].next[j] = nb;
|
if (sb != BBID_END) {
|
if (sb != BBID_END) {
|
if (f->bb[sb].prev[0] == b) f->bb[sb].prev[0] = nb;
|
if (f->bb[sb].prev[0] == b) f->bb[sb].prev[0] = nb;
|
Line 172... |
Line 176... |
for (i1 = 0; i1 < end; i1++)
|
for (i1 = 0; i1 < end; i1++)
|
for (j1 = 0; j1 < MAX_OPERANDS; j1++)
|
for (j1 = 0; j1 < MAX_OPERANDS; j1++)
|
if (f->bb[b1].insn[i1].opt[j1] & OPT_REF && f->bb[b1].insn[i1].op[j1] == rref)
|
if (f->bb[b1].insn[i1].opt[j1] & OPT_REF && f->bb[b1].insn[i1].op[j1] == rref)
|
f->bb[b1].insn[i1].op[j1] = REF (f->num_bb - f->bb[b1].tmp, 0);
|
f->bb[b1].insn[i1].op[j1] = REF (f->num_bb - f->bb[b1].tmp, 0);
|
}
|
}
|
print_cuc_bb (f, "FACT");
|
if (cuc_debug >= 3) print_cuc_bb (f, "FACT");
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|