pub struct SimpleJIT { /* private fields */ }Expand description
A convenience wrapper around LLVMLLJIT.
It takes ownership of the LLVMModule to be compiled and its owning LLVMContext.
§Example
use pliron_llvm::llvm_sys::core::{LLVMContext, LLVMMemoryBuffer, LLVMModule};
use pliron_llvm::llvm_sys::lljit::SimpleJIT;
let context = LLVMContext::default();
let ir = r#"
@sum_global = global i32 0
define i32 @add(i32 %a, i32 %b) {
%sum = add i32 %a, %b
store i32 %sum, ptr @sum_global
ret i32 %sum
}"#;
let module = LLVMModule::from_ir_in_str(&context, ir, None).unwrap();
let jit = SimpleJIT::new(context, module).unwrap();
let adder = unsafe { jit.lookup_symbol::<fn(i32, i32) -> i32>("add").unwrap() };
assert_eq!(adder(2, 3), 5);
// The global is updated as a side effect of calling `add`, and can be
// looked up (as a pointer to its storage).
let sum_global = unsafe { jit.lookup_symbol::<*const i32>("sum_global").unwrap() };
assert_eq!(unsafe { **sum_global }, 5);Implementations§
Source§impl SimpleJIT
impl SimpleJIT
Sourcepub fn new(context: LLVMContext, module: LLVMModule) -> Result<Self, String>
pub fn new(context: LLVMContext, module: LLVMModule) -> Result<Self, String>
Create a JIT from module and the context that contains it.
See type documentation for examples.
Auto Trait Implementations§
impl !Send for SimpleJIT
impl !Sync for SimpleJIT
impl Freeze for SimpleJIT
impl RefUnwindSafe for SimpleJIT
impl Unpin for SimpleJIT
impl UnsafeUnpin for SimpleJIT
impl UnwindSafe for SimpleJIT
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.