diff options
| author | Timon Kruiper <timonkruiper@gmail.com> | 2020-12-29 20:39:58 +0100 |
|---|---|---|
| committer | Timon Kruiper <timonkruiper@gmail.com> | 2021-01-03 17:23:30 +0100 |
| commit | da545d6a3195c1cafca498d8a695082982f74676 (patch) | |
| tree | c85dc18ef61eee7982c98ddd80c81223a25f69db /src/llvm_bindings.zig | |
| parent | 47a4d43e41b07b939b840fbf8230b89e27694093 (diff) | |
| download | zig-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.zig | 9 |
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 { |
