orcjit-test.scm
1 #!/usr/bin/env -S guile --no-auto-compile -L . -L lib 2 !# 3 (define-module (tests rocjit-test) 4 #:use-module(llvm) 5 #:use-module(llvm orc) 6 #:use-module(llvm lljit) 7 #:use-module(llvm instruction) 8 #:use-module(ice-9 binary-ports) 9 #:use-module(ice-9 popen) 10 #:use-module(rnrs bytevectors) 11 #:use-module(llvm memory-buffer) 12 #:use-module(llvm execution-engine) 13 #:use-module(system repl server) 14 #:use-module(system foreign) 15 #:use-module(llvm object) 16 #:use-module(llvm module) 17 #:use-module(llvm attribute) 18 #:use-module(llvm use) 19 #:use-module(llvm types) 20 #:use-module(llvm context) 21 #:use-module(llvm pass-manager) 22 #:use-module(llvm block) 23 #:use-module(llvm raw) 24 #:use-module((llvm type) #:hide (array-type)) 25 #:use-module((llvm type) #:select ((array-type . llvm-array-type))) 26 #:use-module(llvm target-machine) 27 #:use-module(oop goops) 28 #:use-module(llvm value) 29 #:use-module(llvm function) 30 #:use-module(llvm builder) 31 #:use-module(llvm utils) 32 #:use-module(srfi srfi-1) 33 #:use-module(srfi srfi-71) 34 #:use-module (srfi srfi-64) 35 #:use-module (llvm lljit) 36 #:use-module (llvm orc) 37 #:use-module (srfi srfi-64) 38 #:use-module (ice-9 binary-ports) 39 #:use-module (system foreign) 40 #:use-module (llvm module) 41 #:use-module (llvm use) 42 #:use-module (llvm context) 43 #:use-module (llvm pass-manager) 44 #:use-module (llvm block) 45 #:use-module (llvm raw) 46 #:use-module (llvm types) 47 #:use-module (llvm type) 48 #:use-module (llvm target-machine) 49 #:use-module (llvm value) 50 #:use-module (llvm function) 51 #:use-module (llvm builder) 52 #:use-module (llvm utils) 53 #:use-module (llvm execution-engine) 54 #:use-module (llvm error) 55 #:use-module (llvm memory-buffer) 56 #:use-module (llvm object) 57 #:use-module (llvm bitcode)) 58 59 (test-begin "orcjit-test") 60 (init-llvm!) 61 62 (define (create-demo-module) 63 (let* ((ts-ctx (orc-create-thread-safe-context)) 64 (ctx (orc-thread-safe-context-get-context ts-ctx))) 65 66 (parameterize ((current-llvm-context ctx)) 67 (let* ((module (module-create "demo")) 68 (sum-function (add-function module #:name "sum" 69 #:return (int32-type) 70 #:arg-types 71 (list (int32-type) 72 (int32-type)))) 73 (entrybb (append-block sum-function "entry")) 74 (builder (builder-create)) 75 (_ (position-builder-at-end builder entrybb)) 76 (result (build-add builder (param sum-function 0) 77 (param sum-function 1) 78 #:name "result"))) 79 (build-return builder result) 80 (pk 'a (module-verify module)) 81 (orc-create-thread-safe-module module ts-ctx))))) 82 83 (test-assert "lljit" 84 (let* ((context (context-create))) 85 (parameterize ((current-llvm-context context)) 86 (let* ((jit (orc-create-lljit)) 87 (tm (create-target-machine)) 88 (m (create-demo-module))) 89 (orc-lljit-add-llvm-ir-module! 90 jit 91 (orc-lljit-get-main-JITDylib jit) 92 m) 93 (let* ((p (orc-lljit-lookup jit "sum")) 94 (sum (pointer->procedure int32 p (list int32 int32)))) 95 (pk 'sum (sum 30 50))) 96 (gc))))) 97 98 (sleep 1) 99 (test-end) 100 ;; Local Variables: 101 ;; mode: scheme 102 ;; End: