diff options
Diffstat (limited to 'src/cmd/5g/reg.c')
-rw-r--r-- | src/cmd/5g/reg.c | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/src/cmd/5g/reg.c b/src/cmd/5g/reg.c index eaf02b237..f31f70535 100644 --- a/src/cmd/5g/reg.c +++ b/src/cmd/5g/reg.c @@ -140,8 +140,8 @@ regopt(Prog *firstp) if(first == 0) { fmtinstall('Q', Qconv); } - first++; + first++; if(debug['K']) { if(first != 13) return; @@ -491,7 +491,7 @@ brk: * peep-hole on basic block */ if(!debug['R'] || debug['P']) { -// peep(); + peep(); } /* @@ -1375,3 +1375,71 @@ noreturn(Prog *p) return 1; return 0; } + +void +dumpone(Reg *r) +{ + int z; + Bits bit; + + print("%d:%P", r->loop, r->prog); + for(z=0; z<BITS; z++) + bit.b[z] = + r->set.b[z] | + r->use1.b[z] | + r->use2.b[z] | + r->refbehind.b[z] | + r->refahead.b[z] | + r->calbehind.b[z] | + r->calahead.b[z] | + r->regdiff.b[z] | + r->act.b[z] | + 0; +// if(bany(&bit)) { +// print("\t"); +// if(bany(&r->set)) +// print(" s:%Q", r->set); +// if(bany(&r->use1)) +// print(" u1:%Q", r->use1); +// if(bany(&r->use2)) +// print(" u2:%Q", r->use2); +// if(bany(&r->refbehind)) +// print(" rb:%Q ", r->refbehind); +// if(bany(&r->refahead)) +// print(" ra:%Q ", r->refahead); +// if(bany(&r->calbehind)) +// print("cb:%Q ", r->calbehind); +// if(bany(&r->calahead)) +// print(" ca:%Q ", r->calahead); +// if(bany(&r->regdiff)) +// print(" d:%Q ", r->regdiff); +// if(bany(&r->act)) +// print(" a:%Q ", r->act); +// } + print("\n"); +} + +void +dumpit(char *str, Reg *r0) +{ + Reg *r, *r1; + + print("\n%s\n", str); + for(r = r0; r != R; r = r->link) { + dumpone(r); + r1 = r->p2; + if(r1 != R) { + print(" pred:"); + for(; r1 != R; r1 = r1->p2link) + print(" %.4ud", r1->prog->loc); + print("\n"); + } +// r1 = r->s1; +// if(r1 != R) { +// print(" succ:"); +// for(; r1 != R; r1 = r1->s1) +// print(" %.4ud", r1->prog->loc); +// print("\n"); +// } + } +} |