From: Russ Cox Date: Sun, 3 Feb 2013 19:51:21 +0000 (-0500) Subject: cmd/gc: slightly better code generation X-Git-Tag: go1.1rc2~1162 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2c09d6992f7a13d680ce8f3a0f19366dfcc93713;p=gostls13.git cmd/gc: slightly better code generation * Avoid treating CALL fn(SB) as justification for introducing and tracking a registerized variable for fn(SB). * Remove USED(n) after declaration and zeroing of n. It was left over from when the compiler emitted more aggressive set and not used errors, and it was keeping the optimizer from removing a redundant zeroing of n when n was a pointer or integer variable. Update #597. R=ken2 CC=golang-dev https://golang.org/cl/7277048 --- diff --git a/src/cmd/5g/reg.c b/src/cmd/5g/reg.c index 584ffc2534..da80f32a4b 100644 --- a/src/cmd/5g/reg.c +++ b/src/cmd/5g/reg.c @@ -275,6 +275,10 @@ regopt(Prog *firstp) } } + // Avoid making variables for direct-called functions. + if(p->as == ABL && p->to.type == D_EXTERN) + continue; + /* * left side always read */ diff --git a/src/cmd/6g/reg.c b/src/cmd/6g/reg.c index 9c9b74d0ed..bb8e09c642 100644 --- a/src/cmd/6g/reg.c +++ b/src/cmd/6g/reg.c @@ -252,6 +252,10 @@ regopt(Prog *firstp) } } + // Avoid making variables for direct-called functions. + if(p->as == ACALL && p->to.type == D_EXTERN) + continue; + // Addressing makes some registers used. if(p->from.type >= D_INDIR) r->use1.b[0] |= RtoB(p->from.type-D_INDIR); diff --git a/src/cmd/8g/reg.c b/src/cmd/8g/reg.c index 4e516b82a6..e96336b702 100644 --- a/src/cmd/8g/reg.c +++ b/src/cmd/8g/reg.c @@ -222,6 +222,10 @@ regopt(Prog *firstp) } } + // Avoid making variables for direct-called functions. + if(p->as == ACALL && p->to.type == D_EXTERN) + continue; + // Addressing makes some registers used. if(p->from.type >= D_INDIR) r->use1.b[0] |= RtoB(p->from.type-D_INDIR); diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c index 8114448a10..335d77db53 100644 --- a/src/cmd/gc/gen.c +++ b/src/cmd/gc/gen.c @@ -735,8 +735,6 @@ cgen_as(Node *nl, Node *nr) return; } clearslim(nl); - if(nl->addable) - gused(nl); return; }