mirror of
https://github.com/golang/go
synced 2024-11-23 16:20:04 -07:00
cmd/5g, cmd/6g, cmd/8g: remove O(n) reset loop in copyprop
Simpler version of CL 13084043. R=ken2 CC=golang-dev https://golang.org/cl/13602045
This commit is contained in:
parent
a0bc379d46
commit
6d47de2f40
@ -47,6 +47,8 @@ static Flow* findpre(Flow *r, Adr *v);
|
||||
static int copyau1(Prog *p, Adr *v);
|
||||
static int isdconst(Addr *a);
|
||||
|
||||
static uint32 gactive;
|
||||
|
||||
// UNUSED
|
||||
int shiftprop(Flow *r);
|
||||
void constprop(Adr *c1, Adr *v1, Flow *r);
|
||||
@ -63,6 +65,7 @@ peep(Prog *firstp)
|
||||
g = flowstart(firstp, sizeof(Flow));
|
||||
if(g == nil)
|
||||
return;
|
||||
gactive = 0;
|
||||
|
||||
loop1:
|
||||
if(debug['P'] && debug['v'])
|
||||
@ -360,15 +363,14 @@ copyprop(Graph *g, Flow *r0)
|
||||
{
|
||||
Prog *p;
|
||||
Adr *v1, *v2;
|
||||
Flow *r;
|
||||
|
||||
USED(g);
|
||||
p = r0->prog;
|
||||
v1 = &p->from;
|
||||
v2 = &p->to;
|
||||
if(copyas(v1, v2))
|
||||
return 1;
|
||||
for(r=g->start; r!=nil; r=r->link)
|
||||
r->active = 0;
|
||||
gactive++;
|
||||
return copy1(v1, v2, r0->s1, 0);
|
||||
}
|
||||
|
||||
@ -378,12 +380,12 @@ copy1(Adr *v1, Adr *v2, Flow *r, int f)
|
||||
int t;
|
||||
Prog *p;
|
||||
|
||||
if(r->active) {
|
||||
if(r->active == gactive) {
|
||||
if(debug['P'])
|
||||
print("act set; return 1\n");
|
||||
return 1;
|
||||
}
|
||||
r->active = 1;
|
||||
r->active = gactive;
|
||||
if(debug['P'])
|
||||
print("copy %D->%D f=%d\n", v1, v2, f);
|
||||
for(; r != nil; r = r->s1) {
|
||||
|
@ -45,6 +45,8 @@ static int copyas(Adr*, Adr*);
|
||||
static int copyau(Adr*, Adr*);
|
||||
static int copysub(Adr*, Adr*, Adr*, int);
|
||||
|
||||
static uint32 gactive;
|
||||
|
||||
// do we need the carry bit
|
||||
static int
|
||||
needc(Prog *p)
|
||||
@ -92,6 +94,7 @@ peep(Prog *firstp)
|
||||
g = flowstart(firstp, sizeof(Flow));
|
||||
if(g == nil)
|
||||
return;
|
||||
gactive = 0;
|
||||
|
||||
// byte, word arithmetic elimination.
|
||||
elimshortmov(g);
|
||||
@ -643,8 +646,8 @@ copyprop(Graph *g, Flow *r0)
|
||||
{
|
||||
Prog *p;
|
||||
Adr *v1, *v2;
|
||||
Flow *r;
|
||||
|
||||
USED(g);
|
||||
if(debug['P'] && debug['v'])
|
||||
print("copyprop %P\n", r0->prog);
|
||||
p = r0->prog;
|
||||
@ -652,8 +655,7 @@ copyprop(Graph *g, Flow *r0)
|
||||
v2 = &p->to;
|
||||
if(copyas(v1, v2))
|
||||
return 1;
|
||||
for(r=g->start; r!=nil; r=r->link)
|
||||
r->active = 0;
|
||||
gactive++;
|
||||
return copy1(v1, v2, r0->s1, 0);
|
||||
}
|
||||
|
||||
@ -663,12 +665,12 @@ copy1(Adr *v1, Adr *v2, Flow *r, int f)
|
||||
int t;
|
||||
Prog *p;
|
||||
|
||||
if(r->active) {
|
||||
if(r->active == gactive) {
|
||||
if(debug['P'])
|
||||
print("act set; return 1\n");
|
||||
return 1;
|
||||
}
|
||||
r->active = 1;
|
||||
r->active = gactive;
|
||||
if(debug['P'])
|
||||
print("copy %D->%D f=%d\n", v1, v2, f);
|
||||
for(; r != nil; r = r->s1) {
|
||||
|
@ -44,6 +44,8 @@ static int copyas(Adr*, Adr*);
|
||||
static int copyau(Adr*, Adr*);
|
||||
static int copysub(Adr*, Adr*, Adr*, int);
|
||||
|
||||
static uint32 gactive;
|
||||
|
||||
// do we need the carry bit
|
||||
static int
|
||||
needc(Prog *p)
|
||||
@ -91,6 +93,7 @@ peep(Prog *firstp)
|
||||
g = flowstart(firstp, sizeof(Flow));
|
||||
if(g == nil)
|
||||
return;
|
||||
gactive = 0;
|
||||
|
||||
// byte, word arithmetic elimination.
|
||||
elimshortmov(g);
|
||||
@ -441,15 +444,14 @@ copyprop(Graph *g, Flow *r0)
|
||||
{
|
||||
Prog *p;
|
||||
Adr *v1, *v2;
|
||||
Flow *r;
|
||||
|
||||
USED(g);
|
||||
p = r0->prog;
|
||||
v1 = &p->from;
|
||||
v2 = &p->to;
|
||||
if(copyas(v1, v2))
|
||||
return 1;
|
||||
for(r=g->start; r!=nil; r=r->link)
|
||||
r->active = 0;
|
||||
gactive++;
|
||||
return copy1(v1, v2, r0->s1, 0);
|
||||
}
|
||||
|
||||
@ -459,12 +461,12 @@ copy1(Adr *v1, Adr *v2, Flow *r, int f)
|
||||
int t;
|
||||
Prog *p;
|
||||
|
||||
if(r->active) {
|
||||
if(r->active == gactive) {
|
||||
if(debug['P'])
|
||||
print("act set; return 1\n");
|
||||
return 1;
|
||||
}
|
||||
r->active = 1;
|
||||
r->active = gactive;
|
||||
if(debug['P'])
|
||||
print("copy %D->%D f=%d\n", v1, v2, f);
|
||||
for(; r != nil; r = r->s1) {
|
||||
|
Loading…
Reference in New Issue
Block a user