summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2014-11-05 15:36:47 -0500
committerAustin Clements <austin@google.com>2014-11-05 15:36:47 -0500
commit10072f759b43878f2506c6baef0ba10c3ae18446 (patch)
tree02c2a7a0a92804e052c5bd693d7de1b20c9abd44
parent5996f13128bd9aa828ea2677819f055845553c74 (diff)
downloadgo-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
-rw-r--r--src/cmd/6g/reg.c3
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);