diff options
| author | gingerBill <bill@gingerbill.org> | 2020-08-02 14:59:39 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-08-02 14:59:39 +0100 |
| commit | d1d5f61230608ed818fc832cbb5979da312db5d1 (patch) | |
| tree | 8b122fe2daa69a06e101dea181a4e6df68e31ee8 /src/llvm_backend.cpp | |
| parent | 0aaab849382aa0cbce7234ec386f88161b79ca07 (diff) | |
Add `intrinsics.alloca`
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 734003065..5b2ad6068 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -7778,6 +7778,19 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv, // "Intrinsics" + + case BuiltinProc_alloca: + { + lbValue sz = lb_build_expr(p, ce->args[0]); + i64 al = exact_value_to_i64(type_and_value_of_expr(ce->args[1]).value); + + lbValue res = {}; + res.type = t_u8_ptr; + res.value = LLVMBuildArrayAlloca(p->builder, lb_type(p->module, t_u8), sz.value, ""); + LLVMSetAlignment(res.value, cast(unsigned)al); + return res; + } + case BuiltinProc_cpu_relax: // TODO(bill): BuiltinProc_cpu_relax // ir_write_str_lit(f, "call void asm sideeffect \"pause\", \"\"()"); |