aboutsummaryrefslogtreecommitdiff
path: root/src/llvm.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm.cff')
-rw-r--r--src/llvm.cff8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/llvm.cff b/src/llvm.cff
index b0b1027..b4ef10e 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -327,7 +327,7 @@ fn genref(f *Fn, ex *Expr) Ref {
case AggIni ini;
let tmp = gentmp(mkptrtype(ex.ty), "alloca %t", ex.ty);
- gen("\tstore %t zeroinitializer, %t %v\n", ex.ty, tmp.ty, &tmp);
+ gen("\tcall void @llvm.memset.p0.%t(ptr %v, i8 0, %t %z, i1 false)\n", ty_usize, &tmp, ty_usize, ex.ty.size);
foreach(fld, i, ini.flds) {
let fex = &ini.exs[i];
let ptr = mktmp(mkptrtype(fex.ty));
@@ -347,7 +347,7 @@ fn genref(f *Fn, ex *Expr) Ref {
case ArrIni ini;
let ty = mkarrtype(ini.maxn, #f, ex.ty.u.Arr.child);
let tmp = gentmp(mkptrtype(ty), "alloca %t", ty);
- gen("\tstore %t zeroinitializer, %t %v\n", ty, tmp.ty, &tmp);
+ gen("\tcall void @llvm.memset.p0.%t(ptr %v, i8 0, %t %z, i1 false)\n", ty_usize, &tmp, ty_usize, ty.size);
foreach(idx, i, ini.idxs) {
let fex = &ini.exs[i];
let ptr = mktmp(mkptrtype(fex.ty));
@@ -976,7 +976,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
let t0 = mktmp(mkptrtype(ex.ty));
let vidx = ini.var - ex.ty.u.Agg.flds.#ptr;
gen("\t%v = alloca %t\n", &t0, ex.ty);
- gen("\tstore %t zeroinitializer, ptr %v\n", ex.ty, &t0);
+ gen("\tcall void @llvm.memset.p0.%t(ptr %v, i8 0, %t %z, i1 false)\n", ty_usize, &t0, ty_usize, ex.ty.size);
gen("\tstore %t %d, ptr %v\n", ex.ty.u.Agg.enumty, vidx, &t0);
if ini.var.ty != #null {
let tini = convert(f, ini.var.ty, ini.ex);
@@ -1503,6 +1503,8 @@ extern fn llvm_fini() void {
gen("declare void @llvm.va_start(ptr)\n");
gen("declare void @llvm.va_copy(ptr, ptr)\n");
gen("declare void @llvm.va_end(ptr)\n");
+ gen("declare void @llvm.memset.p0.i32(ptr, i8, i32, i1)\n");
+ gen("declare void @llvm.memset.p0.i64(ptr, i8, i64, i1)\n");
vec_each(s, i, strs) {
gen("@.str.%z = private unnamed_addr constant [%z x i8] c%S;\n", i, s.#len + 1, &s);
}