-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest.ll
43 lines (34 loc) · 1.52 KB
/
test.ll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
target triple = "wasm32-unknown-unknown"
; Reference types
%externref = type ptr addrspace(10)
%funcptr = type void () addrspace(20)*
%funcref = type i8 addrspace(20)*
; intrinsic decl
declare %externref @llvm.wasm.ref.null.extern() nounwind readonly
; External functions
declare %externref @gc_alloc(i32, i32) local_unnamed_addr #0
declare %externref @gc_ref_obj(%externref, i32) local_unnamed_addr #1
declare void @gc_set_obj(%externref, i32, %externref) local_unnamed_addr #2
declare void @invoke(%externref) local_unnamed_addr #3
define %externref @make_obj() #4 {
%obj = call %externref @gc_alloc(i32 1, i32 0)
%null = call %externref @llvm.wasm.ref.null.extern()
call void @gc_set_obj(%externref %obj, i32 0, %externref %null)
ret %externref %obj
}
define void @attach_callback(%externref %obj, %externref %callback) #5 {
call void @gc_set_obj(%externref %obj, i32 0, %externref %callback)
ret void
}
define void @invoke_callback(%externref %obj) #6 {
%ref = call %externref @gc_ref_obj(%externref %obj, i32 0)
call void @invoke(%externref %ref)
ret void
}
attributes #0 = { "wasm-import-module"="rt" "wasm-import-name"="gc_alloc" }
attributes #1 = { "wasm-import-module"="rt" "wasm-import-name"="gc_ref_obj" }
attributes #2 = { "wasm-import-module"="rt" "wasm-import-name"="gc_set_obj" }
attributes #3 = { "wasm-import-module"="rt" "wasm-import-name"="invoke" }
attributes #4 = { "wasm-export-name"="make_obj" }
attributes #5 = { "wasm-export-name"="attach_callback" }
attributes #6 = { "wasm-export-name"="invoke_callback" }