From 6ea6819e5a8b6e2b2c818249642e7923db9f81c8 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 1 Sep 2022 13:04:26 +0200 Subject: on big aggregates big, use a hash map to lookup fields --- src/llvm.cff | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/llvm.cff') 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); -- cgit v1.2.3