ref: 4d01073984f5e5610b1cef599ef04aefe51c64fd
parent: bb68edd44998ae73ef8b29b1267ff8c09022ee71
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Tue Mar 17 12:12:01 EDT 2015
6c: MOVL xxx, r; MOVLQZX r, r -> MOVL xxx, r eleminate MOVLQXZ instructions after MOVL as MOVL implicitely zero extends the result.
--- a/sys/src/cmd/6c/peep.c
+++ b/sys/src/cmd/6c/peep.c
@@ -100,14 +100,27 @@
case AMOVQ:
case AMOVSS:
case AMOVSD:
- if(regtyp(&p->to))
+ if(!regtyp(&p->to))
+ break;
if(regtyp(&p->from)) { if(copyprop(r)) {excise(r);
t++;
- } else
+ break;
+ }
if(subprop(r) && copyprop(r)) {excise(r);
+ t++;
+ break;
+ }
+ }
+ if(p->as != AMOVL)
+ break;
+ r1 = rnops(uniqs(r));
+ if(r1 != R){+ p1 = r1->prog;
+ if(p1->as == AMOVLQZX && p1->from.type == p->to.type && p1->to.type == p->to.type){+ excise(r1);
t++;
}
}
--
⑨