Skip to main content

melior/
pass.rs

1//! Passes and pass managers.
2
3pub mod r#async;
4pub mod conversion;
5pub mod external;
6pub mod gpu;
7pub mod linalg;
8mod manager;
9mod operation_manager;
10pub mod sparse_tensor;
11pub mod transform;
12
13pub use self::{
14    external::{create_external, ExternalPass, RunExternalPass},
15    manager::PassManager,
16    operation_manager::OperationPassManager,
17};
18use mlir_sys::MlirPass;
19
20/// A pass.
21pub struct Pass {
22    raw: MlirPass,
23}
24
25impl Pass {
26    /// Creates a pass from a raw function.
27    ///
28    /// # Safety
29    ///
30    /// A raw function must be valid.
31    pub unsafe fn from_raw_fn(create_raw: unsafe extern "C" fn() -> MlirPass) -> Self {
32        Self {
33            raw: unsafe { create_raw() },
34        }
35    }
36
37    /// Creates a pass from a raw object.
38    ///
39    /// # Safety
40    ///
41    /// A raw object must be valid.
42    pub const unsafe fn from_raw(raw: MlirPass) -> Self {
43        Self { raw }
44    }
45
46    /// Converts a pass into a raw object.
47    pub const fn to_raw(&self) -> MlirPass {
48        self.raw
49    }
50
51    #[doc(hidden)]
52    pub unsafe fn __private_from_raw_fn(create_raw: unsafe extern "C" fn() -> MlirPass) -> Self {
53        Self::from_raw_fn(create_raw)
54    }
55}