diff options
author | Austin Clements <austin@google.com> | 2014-11-05 15:36:47 -0500 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2014-11-05 15:36:47 -0500 |
commit | 10072f759b43878f2506c6baef0ba10c3ae18446 (patch) | |
tree | 02c2a7a0a92804e052c5bd693d7de1b20c9abd44 /src/cmd | |
parent | 5996f13128bd9aa828ea2677819f055845553c74 (diff) | |
download | go-10072f759b43878f2506c6baef0ba10c3ae18446.tar.gz |
[dev.power64] 6g: don't create variables for indirect addresses
Previously, mkvar treated, for example, 0(AX) the same as AX.
As a result, a move to an indirect address would be marked as
*setting* the register, rather than just using it, resulting
in unnecessary register moves. Fix this by not producing
variables for indirect addresses.
LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://codereview.appspot.com/164610043
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/6g/reg.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/6g/reg.c b/src/cmd/6g/reg.c index 8d600d643..afd3f1056 100644 --- a/src/cmd/6g/reg.c +++ b/src/cmd/6g/reg.c @@ -621,6 +621,9 @@ mkvar(Reg *r, Adr *a) if(r != R) r->use1.b[0] |= doregbits(a->index); + if(t >= D_INDIR && t < 2*D_INDIR) + goto none; + switch(t) { default: regu = doregbits(t); |