From 810019286fdb8ad6b60096f2b0e2dcf0bc900c3a Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Mon, 3 Nov 2014 15:48:51 -0500 Subject: [PATCH] [dev.power64] 9g: fix nilopt Previously, nilopt was disabled on power64x because it threw away "seemly random segments of code." Indeed, excise on power64x failed to preserve the link field, so it excised not only the requested instruction but all following instructions in the function. Fix excise to retain the link field while otherwise zeroing the instruction. This makes nilopt safe on power64x. It still fails nilptr3.go's tests for removal of repeated nil checks because those depend on also optimizing away repeated loads, which doesn't currently happen on power64x. LGTM=dave, rsc R=rsc, dave CC=golang-codereviews https://golang.org/cl/168120043 --- src/cmd/9g/peep.c | 4 +++- src/cmd/gc/popt.c | 4 ---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cmd/9g/peep.c b/src/cmd/9g/peep.c index 5721d7b04f..ec314d6338 100644 --- a/src/cmd/9g/peep.c +++ b/src/cmd/9g/peep.c @@ -44,13 +44,15 @@ peep(Prog *p) void excise(Flow *r) { - Prog *p; + Prog *p, *l; p = r->prog; if(debug['P'] && debug['v']) print("%P ===delete===\n", p); + l = p->link; *p = zprog; p->as = ANOP; + p->link = l; ostats.ndelmov++; } diff --git a/src/cmd/gc/popt.c b/src/cmd/gc/popt.c index 6e6db88ef8..993bb24821 100644 --- a/src/cmd/gc/popt.c +++ b/src/cmd/gc/popt.c @@ -847,10 +847,6 @@ nilopt(Prog *firstp) Graph *g; int ncheck, nkill; - // TODO(minux): nilopt on power64 throw away seemly random segment of code. - if(thechar == '9') - return; - g = flowstart(firstp, sizeof(NilFlow)); if(g == nil) return; -- 2.48.1