Skip to main content

LoweringRule

Struct LoweringRule 

Source
pub struct LoweringRule { /* private fields */ }
Expand description

Auto-generated lowering rule from a FusedOpEntry. Matches Op::Fused(id, _) and decomposes via the entry’s decompose function. Each rule corresponds to one fused-op id in the registry.

Step 3 also fires on the legacy per-fused-op Op variants (e.g. Op::SoftmaxLastDim) so emission sites that haven’t yet migrated to Op::Fused continue to lower correctly. Step 5 deletes those variants and the legacy match arm with them.

Implementations§

Source§

impl LoweringRule

Source

pub fn from_entry(entry: &FusedOpEntry) -> Self

Source

pub fn runtime(id: FusedOpId) -> Self

Lowering rule for a runtime-registered fused op: decompose by re-emitting its runtime_fused sidecar region as primitives. One per runtime id.

Trait Implementations§

Source§

impl Rule for LoweringRule

Source§

fn name(&self) -> &'static str

Stable, human-readable name. Shows up in panic messages and debug traces.
Source§

fn family(&self) -> RuleFamily

Which family this rule belongs to. Determines pass ordering.
Source§

fn matches(&self, graph: &Graph, id: NodeId) -> bool

Whether this rule can rewrite the node at id. Should be pure — same inputs, same answer. Called once per node per pass; the first matching rule wins.
Source§

fn rewrite( &self, graph: &mut Graph, id: NodeId, remap: &mut HashMap<NodeId, NodeId>, )

Apply the rewrite: append fresh nodes to the graph, declare any side-effect roots if the rewrite emits side-effecting ops, and write remap.insert(id, replacement_id) so the driver can redirect consumer edges. Calling this method implies matches returned true for the same (graph, id) — rewriters can rely on the structure the matcher checked for.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V