Struct inkwell::intrinsics::Intrinsic
source · pub struct Intrinsic { /* private fields */ }
Implementations§
source§impl 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§
source§impl PartialEq for Intrinsic
impl PartialEq for Intrinsic
impl Copy for Intrinsic
impl Eq for Intrinsic
impl StructuralPartialEq for Intrinsic
Auto Trait Implementations§
impl Freeze for Intrinsic
impl RefUnwindSafe for Intrinsic
impl Send for Intrinsic
impl Sync for Intrinsic
impl Unpin for Intrinsic
impl UnwindSafe for Intrinsic
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
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more