The code was inconsistent about when it used
brchain(x) and when it used x directly, with the result
that you could end up emitting code for brchain(x) but
leave the jump pointing at an unemitted x.
R=ken2
CC=golang-dev
https://golang.org/cl/
6250077
* recurse to follow one path.
* continue loop on the other.
*/
+ if((q = brchain(p->pcond)) != P)
+ p->pcond = q;
+ if((q = brchain(p->link)) != P)
+ p->link = q;
if(p->from.type == D_CONST) {
if(p->from.offset == 1) {
/*
p->pcond = q;
}
} else {
- q = brchain(p->link);
- if(q != P && q->mark)
+ q = p->link;
+ if(q->mark)
if(a != ALOOP) {
p->as = relinv(a);
p->link = p->pcond;
}
}
xfol(p->link, last);
- q = brchain(p->pcond);
- if(q->mark) {
- p->pcond = q;
+ if(p->pcond->mark)
return;
- }
- p = q;
+ p = p->pcond;
goto loop;
}
p = p->link;
* recurse to follow one path.
* continue loop on the other.
*/
+ if((q = brchain(p->pcond)) != P)
+ p->pcond = q;
+ if((q = brchain(p->link)) != P)
+ p->link = q;
if(p->from.type == D_CONST) {
if(p->from.offset == 1) {
/*
p->pcond = q;
}
} else {
- q = brchain(p->link);
- if(q != P && q->mark)
+ q = p->link;
+ if(q->mark)
if(a != ALOOP) {
p->as = relinv(a);
p->link = p->pcond;
}
}
xfol(p->link, last);
- q = brchain(p->pcond);
- if(q->mark) {
- p->pcond = q;
+ if(p->pcond->mark)
return;
- }
- p = q;
+ p = p->pcond;
goto loop;
}
p = p->link;