commit fd31290dd37cfd8f7ba765eb330d719bafba42f0
parent 328cdc448ca7ab6dd7efbf595472a0d49da3651a
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date: Thu, 20 Aug 2015 11:51:59 -0400
fix emit(OCopy) and use pointers in max.ssa
Diffstat:
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/lisc/emit.c b/lisc/emit.c
@@ -195,14 +195,16 @@ eins(Ins i, Fn *fn, FILE *f)
case OCopy:
if (req(i.to, R))
break;
- if (i.to.val < EAX && rtype(i.arg[0]) == RCon) {
- val = fn->con[i.arg[0].val].val;
- if (0 <= val && val <= UINT32_MAX) {
- fprintf(f, "\tmov $%"PRId64", %%%s\n",
- val, rsub[i.to.val][SWord]);
- break;
- }
- } else if (!req(i.arg[0], i.to))
+ if (i.to.val < EAX
+ && rtype(i.arg[0]) == RCon
+ && fn->con[i.arg[0].val].type == CNum
+ && (val = fn->con[i.arg[0].val].val) >= 0
+ && val <= UINT32_MAX) {
+ fprintf(f, "\tmov $%"PRId64", %%%s\n",
+ val, rsub[i.to.val][SWord]);
+ break;
+ }
+ if (!req(i.arg[0], i.to))
eop("mov", i.arg[0], i.to, fn, f);
break;
case OStorel:
diff --git a/lisc/test/max.ssa b/lisc/test/max.ssa
@@ -8,10 +8,9 @@
@start
@loop
%max =w phi @start -1, @new %byt, @old %max
- %id0 =l phi @start 0, @new %id1, @old %id1
- %loc =l add $b, %id0
+ %loc =l phi @start $b, @new %loc1, @old %loc1
%byt =w loadub %loc
- %id1 =l add 1, %id0
+ %loc1 =l add 1, %loc
jnz %byt, @iter, @end
@iter
%cmp =w csle %max, %byt