git: 9front

Download patch

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++;
 				}
 			}
--