|
@@ -86,15 +86,18 @@ memopt(Fn *fn)
|
|
|
/* try to turn loads into copies so we
|
|
/* try to turn loads into copies so we
|
|
|
* can eliminate them later */
|
|
* can eliminate them later */
|
|
|
switch(l->op) {
|
|
switch(l->op) {
|
|
|
- case Oload:
|
|
|
|
|
case Oloadsw:
|
|
case Oloadsw:
|
|
|
case Oloaduw:
|
|
case Oloaduw:
|
|
|
|
|
+ if (k == Kl)
|
|
|
|
|
+ goto Extend;
|
|
|
|
|
+ case Oload:
|
|
|
if (KBASE(k) != KBASE(l->cls))
|
|
if (KBASE(k) != KBASE(l->cls))
|
|
|
l->op = Ocast;
|
|
l->op = Ocast;
|
|
|
else
|
|
else
|
|
|
l->op = Ocopy;
|
|
l->op = Ocopy;
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
|
|
+ Extend:
|
|
|
l->op = Oextsb + (l->op - Oloadsb);
|
|
l->op = Oextsb + (l->op - Oloadsb);
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|