aboutsummaryrefslogtreecommitdiff
path: root/mem.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2017-02-24 09:42:12 -0500
committerQuentin Carbonneaux <[email protected]>2017-02-24 09:50:28 -0500
commitf3301026fa404c68c7ad399b5a56a5135b88af04 (patch)
treeffb3f425adac1780593526f90f095dfb97fc1b5c /mem.c
parentfc124dd22e6d936de53c60f6752e45c857f10013 (diff)
reenable and fix a bug in memopt
While a minimal dead store elimination is not implemented, the generated code looks quite a bit better with them enabled. It also is quite cheap.
Diffstat (limited to 'mem.c')
-rw-r--r--mem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/mem.c b/mem.c
index ea0bef7..11527fa 100644
--- a/mem.c
+++ b/mem.c
@@ -86,15 +86,18 @@ memopt(Fn *fn)
/* try to turn loads into copies so we
* can eliminate them later */
switch(l->op) {
- case Oload:
case Oloadsw:
case Oloaduw:
+ if (k == Kl)
+ goto Extend;
+ case Oload:
if (KBASE(k) != KBASE(l->cls))
l->op = Ocast;
else
l->op = Ocopy;
break;
default:
+ Extend:
l->op = Oextsb + (l->op - Oloadsb);
break;
}