diff options
| author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-08-20 11:51:59 -0400 |
|---|---|---|
| committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:32 -0400 |
| commit | fd31290dd37cfd8f7ba765eb330d719bafba42f0 (patch) | |
| tree | cebcbcb82fc538d64ab2e48d54937c422b187ec6 | |
| parent | 328cdc448ca7ab6dd7efbf595472a0d49da3651a (diff) | |
| download | roux-fd31290dd37cfd8f7ba765eb330d719bafba42f0.tar.gz | |
fix emit(OCopy) and use pointers in max.ssa
| -rw-r--r-- | lisc/emit.c | 18 | ||||
| -rw-r--r-- | lisc/test/max.ssa | 5 |
2 files changed, 12 insertions, 11 deletions
diff --git a/lisc/emit.c b/lisc/emit.c index b8b65d6..59b439b 100644 --- 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 index f054a6a..7f97de0 100644 --- 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 |
