aboutsummaryrefslogtreecommitdiff
path: root/src/llvm.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-30 10:41:16 +0200
committerlemon <lsof@mailbox.org>2022-08-30 10:41:16 +0200
commitdea68bafe81c40adf29e45630cfeceb97b91a630 (patch)
tree687c50f8e1402ed30ee711d27647aad8251a015c /src/llvm.cff
parente4163c18cdc3522f24e459cd6ddde60edb1605e2 (diff)
Makefile and such
Diffstat (limited to 'src/llvm.cff')
-rw-r--r--src/llvm.cff9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/llvm.cff b/src/llvm.cff
index d8c8a32..97d1e3c 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -93,7 +93,6 @@ fn gen(fmt *const u8, ...) void {
case Bool; gen("i%z", ty.size*8);
case Int; gen("i%z", ty.size*8);
case Flo; gen(ty.size == 4 ? "float" : "double");
- // case Ptr p; gen("%t*", p->is(:Void) ? ty_i8 : p);
case Ptr p; gen("ptr");
case Slice p; gen("{ %t, %t }", mkptrtype(p), ty_usize);
case Arr arr;
@@ -485,9 +484,8 @@ fn convert(f *Fn, to *const Type, ex *Expr) Value {
case to->is(:Ptr) and from->is(:Arr);
let addr = genref(f, ex).Addr;
- let t = mktmp(ex.ty);
- gen("\t%v = getelementptr %t, %t %v, %t 0, %t 0\n", &t, addr.ty.u.Ptr, addr.ty, &addr,
- ty_usize, ty_usize);
+ let t = mktmp(to);
+ gen("\t%v = getelementptr %t, %t %v, i32 0, i32 0\n", &t, addr.ty.u.Ptr, addr.ty, &addr);
return t;
case to->is(:Arr) and from->is(:Arr);
@@ -621,6 +619,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
case '=';
let ref = genref(f, b.lhs);
let rhs = convert(f, b.lhs.ty, b.rhs);
+ gen("; %t\n",b.lhs.ty);
genstore(f, ref, rhs);
return genload(f, ref); // load again because value could have overflowed when storing it
@@ -1272,8 +1271,8 @@ extern fn llvm_genfn(externp bool, name *const u8, f *Fn) void {
if i < f.paramnames.#len - 1 or f.variadic {
gen(", ");
}
- if f.variadic { gen("..."); }
}
+ if f.variadic { gen("..."); }
gen(") { \n");
let id = 0;
foreach(nam, i, f.paramnames) {