diff options
Diffstat (limited to 'src/llvm.cff')
| -rw-r--r-- | src/llvm.cff | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/llvm.cff b/src/llvm.cff index e8c7dad..0ce97c8 100644 --- a/src/llvm.cff +++ b/src/llvm.cff @@ -555,7 +555,7 @@ fn genexpr(f *Fn, ex *Expr) Value { let lhs0 = genload(f, ref); let tmp = gentmp(ex.ty, "%s %t %v, %v", inst, ex.ty, lhs0, rhs); genstore(f, ref, tmp); - tmp; + genload(f, ref); // load again because value could have overflowed when storing it ) ] switch b.op { @@ -588,7 +588,7 @@ fn genexpr(f *Fn, ex *Expr) Value { let ref = genref(f, b.lhs); let rhs = convert(f, b.lhs.ty, b.rhs); genstore(f, ref, rhs); - return rhs; + return genload(f, ref); // load again because value could have overflowed when storing it case '+='; let ref = genref(f, b.lhs); @@ -596,7 +596,7 @@ fn genexpr(f *Fn, ex *Expr) Value { let lhs0 = genload(f, ref); let tmp = genadd(ex.ty, lhs0, rhs); genstore(f, ref, tmp); - return tmp; + return genload(f, ref); // load again because value could have overflowed when storing it case '-='; let ref = genref(f, b.lhs); @@ -604,7 +604,7 @@ fn genexpr(f *Fn, ex *Expr) Value { let lhs0 = genload(f, ref); let tmp = gensub(ex.ty, lhs0, rhs); genstore(f, ref, tmp); - return tmp; + return genload(f, ref); // load again because value could have overflowed when storing it case '*='; return genassignop(ex.ty->is(:Flo) ? "fdiv" : "mul", ex.ty, b.lhs, b.rhs); @@ -715,7 +715,7 @@ fn genexpr(f *Fn, ex *Expr) Value { gen("\t%v = add %t %v, %v\n", val, ex.ty, var, one); } genstore(f, ref, val); - return val; + return genload(f, ref); // load again because value could have overflowed when storing it case :postinc, :postdec; let one = Value{ex.ty, :IImm(un.op == :postinc ? 1 : -1)}; |