mirror of https://github.com/m-labs/artiq.git
Always load the personality library in JIT testbench, if available.
This commit is contained in:
parent
14c7b15785
commit
47f13bf921
|
@ -1,5 +1,4 @@
|
||||||
import sys, fileinput
|
import os, sys, fileinput, ctypes
|
||||||
from ctypes import CFUNCTYPE
|
|
||||||
from pythonparser import diagnostic
|
from pythonparser import diagnostic
|
||||||
from llvmlite import binding as llvm
|
from llvmlite import binding as llvm
|
||||||
from .. import Module
|
from .. import Module
|
||||||
|
@ -10,10 +9,9 @@ llvm.initialize_native_asmprinter()
|
||||||
llvm.check_jit_execution()
|
llvm.check_jit_execution()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
while sys.argv[1].startswith("+"):
|
libartiq_personality = os.getenv('LIBARTIQ_PERSONALITY')
|
||||||
if sys.argv[1] == "+load":
|
if libartiq_personality is not None:
|
||||||
llvm.load_library_permanently(sys.argv[2])
|
llvm.load_library_permanently(libartiq_personality)
|
||||||
del sys.argv[1:3]
|
|
||||||
|
|
||||||
def process_diagnostic(diag):
|
def process_diagnostic(diag):
|
||||||
print("\n".join(diag.render()))
|
print("\n".join(diag.render()))
|
||||||
|
@ -34,7 +32,7 @@ def main():
|
||||||
lljit = llvm.create_mcjit_compiler(llparsedmod, llmachine)
|
lljit = llvm.create_mcjit_compiler(llparsedmod, llmachine)
|
||||||
lljit.finalize_object()
|
lljit.finalize_object()
|
||||||
llmain = lljit.get_pointer_to_global(llparsedmod.get_function(llmod.name + ".__modinit__"))
|
llmain = lljit.get_pointer_to_global(llparsedmod.get_function(llmod.name + ".__modinit__"))
|
||||||
CFUNCTYPE(None)(llmain)()
|
ctypes.CFUNCTYPE(None)(llmain)()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -789,7 +789,7 @@ class ARTIQIRGenerator(algorithm.Visitor):
|
||||||
lambda: self.alloc_exn(builtins.TValueError(),
|
lambda: self.alloc_exn(builtins.TValueError(),
|
||||||
ir.Constant("slice size {0} is larger than iterable length {1}",
|
ir.Constant("slice size {0} is larger than iterable length {1}",
|
||||||
builtins.TStr()),
|
builtins.TStr()),
|
||||||
slice_size, iterable_len))
|
slice_size, length))
|
||||||
|
|
||||||
if self.current_assign is None:
|
if self.current_assign is None:
|
||||||
is_neg_size = self.append(ir.Compare(ast.Lt(loc=None),
|
is_neg_size = self.append(ir.Compare(ast.Lt(loc=None),
|
||||||
|
|
|
@ -103,12 +103,14 @@ class LLVMIRGenerator:
|
||||||
linkage = "private"
|
linkage = "private"
|
||||||
unnamed_addr = True
|
unnamed_addr = True
|
||||||
|
|
||||||
llstrty = ll.ArrayType(ll.IntType(8), len(as_bytes))
|
llconst = self.llmodule.get_global(name)
|
||||||
llconst = ll.GlobalVariable(self.llmodule, llstrty, name)
|
if llconst is None:
|
||||||
llconst.global_constant = True
|
llstrty = ll.ArrayType(ll.IntType(8), len(as_bytes))
|
||||||
llconst.initializer = ll.Constant(llstrty, bytearray(as_bytes))
|
llconst = ll.GlobalVariable(self.llmodule, llstrty, name)
|
||||||
llconst.linkage = linkage
|
llconst.global_constant = True
|
||||||
llconst.unnamed_addr = unnamed_addr
|
llconst.initializer = ll.Constant(llstrty, bytearray(as_bytes))
|
||||||
|
llconst.linkage = linkage
|
||||||
|
llconst.unnamed_addr = unnamed_addr
|
||||||
|
|
||||||
return llconst.bitcast(ll.IntType(8).as_pointer())
|
return llconst.bitcast(ll.IntType(8).as_pointer())
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# RUN: %python -m artiq.compiler.testbench.jit +load %personality %s
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
# REQUIRES: exceptions
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
1/0
|
1/0
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# RUN: %python -m artiq.compiler.testbench.jit %s
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
# RUN: %python %s
|
# RUN: %python %s
|
||||||
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
assert -(-1) == 1
|
assert -(-1) == 1
|
||||||
assert -(-1.0) == 1.0
|
assert -(-1.0) == 1.0
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# RUN: %python -m artiq.compiler.testbench.jit %s
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
# RUN: %python %s
|
# RUN: %python %s
|
||||||
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
assert bool() is False
|
assert bool() is False
|
||||||
# bool(x) is tested in bool.py
|
# bool(x) is tested in bool.py
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# RUN: %python -m artiq.compiler.testbench.jit %s
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
# RUN: %python %s
|
# RUN: %python %s
|
||||||
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
[x, y] = [1, 2]
|
[x, y] = [1, 2]
|
||||||
assert (x, y) == (1, 2)
|
assert (x, y) == (1, 2)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# RUN: %python -m artiq.compiler.testbench.jit %s
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
# RUN: %python %s
|
# RUN: %python %s
|
||||||
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
lst = list(range(10))
|
lst = list(range(10))
|
||||||
assert lst[0] == 0
|
assert lst[0] == 0
|
||||||
|
|
|
@ -18,6 +18,6 @@ if os.name == 'posix':
|
||||||
lit_config.fatal("Unable to build JIT support library")
|
lit_config.fatal("Unable to build JIT support library")
|
||||||
|
|
||||||
personality_lib = os.path.join(personality_build, 'libartiq_personality.so')
|
personality_lib = os.path.join(personality_build, 'libartiq_personality.so')
|
||||||
config.substitutions.append( ('%personality', personality_lib) )
|
config.environment['LIBARTIQ_PERSONALITY'] = personality_lib
|
||||||
|
|
||||||
config.available_features.add('exceptions')
|
config.available_features.add('exceptions')
|
||||||
|
|
Loading…
Reference in New Issue