aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_bindings.zig
diff options
context:
space:
mode:
authorTimon Kruiper <timonkruiper@gmail.com>2020-12-29 20:39:58 +0100
committerTimon Kruiper <timonkruiper@gmail.com>2021-01-03 17:23:30 +0100
commitda545d6a3195c1cafca498d8a695082982f74676 (patch)
treec85dc18ef61eee7982c98ddd80c81223a25f69db /src/llvm_bindings.zig
parent47a4d43e41b07b939b840fbf8230b89e27694093 (diff)
downloadzig-da545d6a3195c1cafca498d8a695082982f74676.tar.gz
zig-da545d6a3195c1cafca498d8a695082982f74676.zip
stage2: implement argument passing and returning in LLVM backend
Furthermore add the Not instruction. The following now works: ``` export fn _start() noreturn { var x: bool = true; var other: bool = foo(x); exit(); } fn foo(cond: bool) bool { return !cond; } fn exit() noreturn { unreachable; } ```
Diffstat (limited to 'src/llvm_bindings.zig')
-rw-r--r--src/llvm_bindings.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/llvm_bindings.zig b/src/llvm_bindings.zig
index 133415d634..f6d53c75ba 100644
--- a/src/llvm_bindings.zig
+++ b/src/llvm_bindings.zig
@@ -79,6 +79,9 @@ pub const VerifierFailureAction = extern enum {
pub const voidType = LLVMVoidType;
extern fn LLVMVoidType() *const TypeRef;
+pub const getParam = LLVMGetParam;
+extern fn LLVMGetParam(Fn: *const ValueRef, Index: c_uint) *const ValueRef;
+
pub const getEnumAttributeKindForName = LLVMGetEnumAttributeKindForName;
extern fn LLVMGetEnumAttributeKindForName(Name: [*]const u8, SLen: usize) c_uint;
@@ -117,6 +120,9 @@ pub const BuilderRef = opaque {
pub const buildRetVoid = LLVMBuildRetVoid;
extern fn LLVMBuildRetVoid(*const BuilderRef) *const ValueRef;
+ pub const buildRet = LLVMBuildRet;
+ extern fn LLVMBuildRet(*const BuilderRef, V: *const ValueRef) *const ValueRef;
+
pub const buildUnreachable = LLVMBuildUnreachable;
extern fn LLVMBuildUnreachable(*const BuilderRef) *const ValueRef;
@@ -128,6 +134,9 @@ pub const BuilderRef = opaque {
pub const buildLoad = LLVMBuildLoad;
extern fn LLVMBuildLoad(*const BuilderRef, PointerVal: *const ValueRef, Name: [*:0]const u8) *const ValueRef;
+
+ pub const buildNot = LLVMBuildNot;
+ extern fn LLVMBuildNot(*const BuilderRef, V: *const ValueRef, Name: [*:0]const u8) *const ValueRef;
};
pub const BasicBlockRef = opaque {