Struct midenc_hir::DataFlowGraph

source ·
pub struct DataFlowGraph {
    pub entry: Block,
    pub attrs: AttributeSet,
    pub blocks: OrderedArenaMap<Block, BlockData>,
    pub insts: ArenaMap<Inst, InstNode>,
    pub results: SecondaryMap<Inst, ValueList>,
    pub values: PrimaryMap<Value, ValueData>,
    pub value_lists: ValueListPool,
    pub imports: FxHashMap<FunctionIdent, ExternalFunction>,
    pub globals: PrimaryMap<GlobalValue, GlobalValueData>,
    pub locals: PrimaryMap<LocalId, Local>,
    pub constants: ConstantPool,
}

Fields§

§entry: Block§attrs: AttributeSet§blocks: OrderedArenaMap<Block, BlockData>§insts: ArenaMap<Inst, InstNode>§results: SecondaryMap<Inst, ValueList>§values: PrimaryMap<Value, ValueData>§value_lists: ValueListPool§imports: FxHashMap<FunctionIdent, ExternalFunction>§globals: PrimaryMap<GlobalValue, GlobalValueData>§locals: PrimaryMap<LocalId, Local>§constants: ConstantPool

Implementations§

source§

impl DataFlowGraph

source

pub fn new_uninit() -> Self

Create a new, completely uninitialized DataFlowGraph

source

pub fn get_attribute<Q>(&self, name: &Q) -> Option<&AttributeValue>
where Symbol: Borrow<Q>, Q: Ord + ?Sized,

Return the value associated with attribute name for this function

source

pub fn has_attribute<Q>(&self, name: &Q) -> bool
where Symbol: Borrow<Q>, Q: Ord + ?Sized,

Return true if this function has an attributed named name

source

pub fn set_attribute( &mut self, name: impl Into<Symbol>, value: impl Into<AttributeValue>, )

Set the attribute name with value for this function.

source

pub fn remove_attribute<Q>(&mut self, name: &Q)
where Symbol: Borrow<Q>, Q: Ord + ?Sized,

Remove any attribute with the given name from this function

source

pub fn get_import(&self, id: &FunctionIdent) -> Option<&ExternalFunction>

Returns an ExternalFunction given its FunctionIdent

source

pub fn get_import_by_name<M: AsRef<str>, F: AsRef<str>>( &self, module: M, name: F, ) -> Option<&ExternalFunction>

Look up an ExternalFunction given it’s module and function name

source

pub fn imports<'a, 'b: 'a>( &'b self, ) -> impl Iterator<Item = &'a ExternalFunction> + 'a

Returns an iterator over the ExternalFunctions imported by this function

source

pub fn import_function( &mut self, module: Ident, name: Ident, signature: Signature, ) -> Result<FunctionIdent, SymbolConflictError>

Imports function name from module, with signature, returning a FunctionIdent corresponding to the import.

If the function is already imported, and the signature doesn’t match, Err is returned.

source

pub fn create_global_value(&mut self, data: GlobalValueData) -> GlobalValue

Create a new global value reference

source

pub fn global_value(&self, gv: GlobalValue) -> &GlobalValueData

Gets the data associated with the given GlobalValue

source

pub fn is_global_addr(&self, gv: GlobalValue) -> bool

Returns true if the given GlobalValue represents an address

source

pub fn global_type(&self, gv: GlobalValue) -> Type

Returns the type of the given global value

source

pub fn make_value(&mut self, data: ValueData) -> Value

source

pub fn value_type(&self, v: Value) -> &Type

source

pub fn value_span(&self, v: Value) -> SourceSpan

source

pub fn value_data(&self, v: Value) -> &ValueData

source

pub fn set_value_type(&mut self, v: Value, ty: Type)

source

pub fn get_value(&self, v: Value) -> ValueData

source

pub fn value_block(&self, v: Value) -> Block

source

pub fn inst_node(&self, inst: Inst) -> &InstNode

Get a reference to the metadata for an instruction

source

pub fn inst(&self, inst: Inst) -> &Instruction

Get a reference to the data for an instruction

source

pub fn inst_mut(&mut self, inst: Inst) -> &mut Instruction

Get a mutable reference to the metadata for an instruction

source

pub fn inst_span(&self, inst: Inst) -> SourceSpan

source

pub fn inst_args(&self, inst: Inst) -> &[Value]

source

pub fn inst_block(&self, inst: Inst) -> Option<Block>

source

pub fn inst_results(&self, inst: Inst) -> &[Value]

source

pub fn append_inst( &mut self, block: Block, data: Instruction, ctrl_ty: Type, span: SourceSpan, ) -> Inst

Append a new instruction to the end of block, using the provided instruction data, controlling type variable, and source span

source

pub fn insert_inst( &mut self, ip: InsertionPoint, data: Instruction, ctrl_ty: Type, span: SourceSpan, ) -> Inst

Insert a new instruction at ip, using the provided instruction data, controlling type variable, and source span

source

pub fn clone_inst(&mut self, inst: Inst) -> Inst

Create a new instruction which is a clone of inst, but detached from any block.

NOTE: The instruction is in a temporarily invalid state, because if it has arguments, they will reference values from the scope of the original instruction, but the clone hasn’t been inserted anywhere yet. It is up to the caller to ensure that the cloned instruction is updated appropriately once inserted.

source

pub fn replace(&mut self, inst: Inst) -> ReplaceBuilder<'_>

Create a ReplaceBuilder that will replace inst with a new instruction in-place.

source

pub fn append_result(&mut self, inst: Inst, ty: Type) -> Value

source

pub fn first_result(&self, inst: Inst) -> Value

source

pub fn has_results(&self, inst: Inst) -> bool

source

pub fn replace_uses(&mut self, inst: Inst, value: Value, replacement: Value)

Replace uses of value with replacement in the arguments of inst

source

pub fn replace_argument(&mut self, inst: Inst, index: usize, replacement: Value)

Replace argument at index in the argument list of inst

NOTE: This should not be used for successor arguments, as each successor gets its own distinct argument list, separate from the instruction argument list.

source

pub fn replace_successor_argument( &mut self, inst: Inst, succ_index: usize, index: usize, replacement: Value, )

Replace the block argument at index, for the successor argument list of the successor at succ_index, in the set of successors for inst.

source

pub fn pp_block(&self, pp: ProgramPoint) -> Block

source

pub fn pp_cmp<A, B>(&self, a: A, b: B) -> Ordering

source

pub fn call_signature(&self, inst: Inst) -> Option<&Signature>

source

pub fn analyze_call(&self, inst: Inst) -> CallInfo<'_>

source

pub fn analyze_branch(&self, inst: Inst) -> BranchInfo<'_>

source

pub fn blocks(&self) -> impl Iterator<Item = (Block, &BlockData)>

source

pub fn entry_block(&self) -> Block

Get the block identifier for the entry block

source

pub fn entry(&self) -> &BlockData

Get a reference to the data for the entry block

source

pub fn entry_mut(&mut self) -> &mut BlockData

Get a mutable reference to the data for the entry block

source

pub fn num_blocks(&self) -> usize

source

pub fn block(&self, block: Block) -> &BlockData

Get an immutable reference to the block data for block

source

pub fn block_mut(&mut self, block: Block) -> &mut BlockData

Get a mutable reference to the block data for block

source

pub fn block_args(&self, block: Block) -> &[Value]

source

pub fn block_insts(&self, block: Block) -> impl Iterator<Item = Inst> + '_

source

pub fn block_cursor(&self, block: Block) -> InstructionCursor<'_>

source

pub fn block_cursor_at(&self, inst: Inst) -> InstructionCursor<'_>

source

pub fn last_inst(&self, block: Block) -> Option<Inst>

source

pub fn is_block_linked(&self, block: Block) -> bool

source

pub fn is_block_empty(&self, block: Block) -> bool

source

pub fn create_block(&mut self) -> Block

source

pub fn append_block(&mut self, block: Block)

source

pub fn create_block_after(&mut self, block: Block) -> Block

Creates a new block, inserted into the function layout just after block

source

pub fn detach_block(&mut self, block: Block)

Removes block from the body of this function, without destroying it’s data

source

pub fn num_block_params(&self, block: Block) -> usize

source

pub fn block_params(&self, block: Block) -> &[Value]

source

pub fn block_param(&self, block: Block, index: usize) -> &ValueData

source

pub fn block_param_types(&self, block: Block) -> SmallVec<[Type; 1]>

source

pub fn clone_block_params(&mut self, src: Block, dest: Block)

Clone the block parameters of src as a new set of values, derived from the data used to crate the originals, and use them to populate the block arguments of dest, in the same order.

source

pub fn append_block_param( &mut self, block: Block, ty: Type, span: SourceSpan, ) -> Value

source

pub fn is_block_terminated(&self, block: Block) -> bool

source

pub fn remove_block_param(&mut self, val: Value)

Removes val from block‘s parameters by a standard linear time list removal which preserves ordering. Also updates the values’ data.

source

pub fn append_branch_destination_argument( &mut self, branch_inst: Inst, dest: Block, value: Value, )

Appends value as an argument to the branch_inst instruction arguments list if the destination block of the branch_inst is dest. Panics if branch_inst is not a branch instruction.

source

pub fn nearest_definition_in_block( &self, user: Inst, value: Value, ) -> Option<Value>

Try to locate a valid definition of value in the current block, looking up the block from user

source

pub fn alloc_local(&mut self, ty: Type) -> LocalId

source

pub fn local_type(&self, id: LocalId) -> &Type

source

pub fn locals(&self) -> impl Iterator<Item = &Local> + '_

Trait Implementations§

source§

impl Default for DataFlowGraph

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Index<Inst> for DataFlowGraph

source§

type Output = Instruction

The returned type after indexing.
source§

fn index(&self, inst: Inst) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<Inst> for DataFlowGraph

source§

fn index_mut(&mut self, inst: Inst) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more

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<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
source§

impl<D> OwoColorize for D

source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text italicized
Make the text blink
Make the text blink (but fast!)
source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

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

source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more