From 2c09d6992f7a13d680ce8f3a0f19366dfcc93713 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 3 Feb 2013 14:51:21 -0500 Subject: [PATCH] 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 --- src/cmd/5g/reg.c | 4 ++++ src/cmd/6g/reg.c | 4 ++++ src/cmd/8g/reg.c | 4 ++++ src/cmd/gc/gen.c | 2 -- 4 files changed, 12 insertions(+), 2 deletions(-) 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; } -- 2.48.1