Skip to main content

FusionRule

Struct FusionRule 

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

Auto-generated fusion rule from a FusedOpEntry. Matches the canonical primitive-subgraph pattern carried by the entry’s SubgraphPattern and emits a single Op::Fused(id, params) node. Round-trips with LoweringRule for the same id.

Currently params are reconstructed by-id: SoftmaxLastDim’s variant is parameterless, so the fusion rule emits FusedOpParams::SoftmaxLastDim. Step 4 extends crate::registry::PatternMatch (or adds a sibling extract_params field on FusedOpEntry) so param-bearing fused ops can recover their parameters from the matched subgraph.

Implementations§

Source§

impl FusionRule

Source

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

Source

pub fn declarative(id: FusedOpId, tree: PatternTree) -> Self

Fusion rule from a declarative pattern (the runtime path): match the region and stamp tree.params on the emitted Op::Fused(id, _).

Trait Implementations§

Source§

impl Rule for FusionRule

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