Struct llvm_plugin_inkwell::intrinsics::Intrinsic
source · [−]pub struct Intrinsic { /* private fields */ }Implementations
sourceimpl Intrinsic
impl Intrinsic
A wrapper around LLVM intrinsic id
To call it you would need to create a declaration inside a module using Self::get_declaration().
sourcepub fn find(name: &str) -> Option<Self>
pub fn find(name: &str) -> Option<Self>
Find llvm intrinsic id from name
Example
use inkwell::{intrinsics::Intrinsic, context::Context};
let trap_intrinsic = Intrinsic::find("llvm.trap").unwrap();
let context = Context::create();
let module = context.create_module("trap");
let builder = context.create_builder();
let void_type = context.void_type();
let fn_type = void_type.fn_type(&[], false);
let fn_value = module.add_function("trap", fn_type, None);
let entry = context.append_basic_block(fn_value, "entry");
let trap_function = trap_intrinsic.get_declaration(&module, &[]).unwrap();
builder.position_at_end(entry);
builder.build_call(trap_function, &[], "trap_call");sourcepub fn is_overloaded(&self) -> bool
pub fn is_overloaded(&self) -> bool
Check if specified intrinsic is overloaded
Overloaded intrinsics need some argument types to be specified to declare them
sourcepub fn get_declaration<'ctx>(
&self,
module: &Module<'ctx>,
param_types: &[BasicTypeEnum<'_>]
) -> Option<FunctionValue<'ctx>>
pub fn get_declaration<'ctx>(
&self,
module: &Module<'ctx>,
param_types: &[BasicTypeEnum<'_>]
) -> Option<FunctionValue<'ctx>>
Create or insert the declaration of an intrinsic.
For overloaded intrinsics, parameter types must be provided to uniquely identify an overload.
Example
use inkwell::{intrinsics::Intrinsic, context::Context};
let trap_intrinsic = Intrinsic::find("llvm.trap").unwrap();
let context = Context::create();
let module = context.create_module("trap");
let builder = context.create_builder();
let void_type = context.void_type();
let fn_type = void_type.fn_type(&[], false);
let fn_value = module.add_function("trap", fn_type, None);
let entry = context.append_basic_block(fn_value, "entry");
let trap_function = trap_intrinsic.get_declaration(&module, &[]).unwrap();
builder.position_at_end(entry);
builder.build_call(trap_function, &[], "trap_call");Trait Implementations
sourceimpl PartialEq<Intrinsic> for Intrinsic
impl PartialEq<Intrinsic> for Intrinsic
impl Copy for Intrinsic
impl Eq for Intrinsic
impl StructuralEq for Intrinsic
impl StructuralPartialEq for Intrinsic
Auto Trait Implementations
impl RefUnwindSafe for Intrinsic
impl Send for Intrinsic
impl Sync for Intrinsic
impl Unpin for Intrinsic
impl UnwindSafe for Intrinsic
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more