aboutsummaryrefslogtreecommitdiff
path: root/src/llvm.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-09-01 13:04:26 +0200
committerlemon <lsof@mailbox.org>2022-09-01 14:07:46 +0200
commit6ea6819e5a8b6e2b2c818249642e7923db9f81c8 (patch)
tree01aeb453d0b18e2cad018970daedb216095ad028 /src/llvm.cff
parent2e0160015d756702a799be95db237b7a91bae400 (diff)
on big aggregates big, use a hash map to lookup fields
Diffstat (limited to 'src/llvm.cff')
-rw-r--r--src/llvm.cff6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/llvm.cff b/src/llvm.cff
index bb07c77..83f3f10 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -557,12 +557,12 @@ fn genexpr(f *Fn, ex *Expr) Value {
} else if lhs.ty->is(:Ptr) {
let $t = mktmp(type);
gen("\t%v = getelementptr %t, %t %v, %t %v\n",
- &$t, lhs.ty.u.Ptr == ty_void ? ty_i8 : lhs.ty.u.Ptr, lhs.ty, &lhs, rhs.ty, &rhs);
+ &$t, lhs.ty.u.Ptr->is(:Void) ? ty_i8 : lhs.ty.u.Ptr, lhs.ty, &lhs, rhs.ty, &rhs);
res = $t;
} else if rhs.ty->is(:Ptr) {
let $t = mktmp(type);
gen("\t%v = getelementptr %t, %t %v, %t %v\n",
- &$t, rhs.ty.u.Ptr == ty_void ? ty_i8 : rhs.ty.u.Ptr, rhs.ty, &rhs, rhs.ty, &lhs);
+ &$t, rhs.ty.u.Ptr->is(:Void) ? ty_i8 : rhs.ty.u.Ptr, rhs.ty, &rhs, rhs.ty, &lhs);
res = $t;
} else {
assert(#f, "bad ad");
@@ -641,7 +641,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
case '+=';
let ref = genref(f, b.lhs);
- let rhs = convert(f, b.lhs.ty, b.rhs);
+ let rhs = b.lhs.ty->is(:Ptr) ? genexpr(f, b.rhs) : convert(f, b.lhs.ty, b.rhs);
let lhs0 = genload(f, ref);
let tmp = genadd(ex.ty, lhs0, rhs);
genstore(f, ref, tmp);