pub struct Optimizer {
pub program: Program,
pub allocator: Allocator,
pub ret: NodeIndex,
pub root_scope: Scope,
/* private fields */
}Expand description
An optimizer that applies various analyses and optimization passes to the IR.
Fields§
§program: ProgramThe overall program state
allocator: AllocatorAllocator for kernel
ret: NodeIndexThe single return block
root_scope: ScopeRoot scope to allocate variables on
Implementations§
Source§impl Optimizer
impl Optimizer
Sourcepub fn analysis<A: Analysis + Any>(&mut self) -> Rc<A>
pub fn analysis<A: Analysis + Any>(&mut self) -> Rc<A>
Fetch an analysis if cached, or run it if not.
Sourcepub fn invalidate_analysis<A: Analysis + Any>(&self)
pub fn invalidate_analysis<A: Analysis + Any>(&self)
Invalidate an analysis by removing it from the cache. The analysis is rerun when requested again.
Sourcepub fn invalidate_structure(&self)
pub fn invalidate_structure(&self)
Invalidate all analyses that rely on the structure of the control flow graph.
Source§impl Optimizer
impl Optimizer
pub fn visit_out( &mut self, var: &mut Option<Variable>, visit_write: impl FnMut(&mut Self, &mut Variable), )
Sourcepub fn visit_instruction(
&mut self,
inst: &mut Instruction,
visit_read: impl FnMut(&mut Self, &mut Variable),
visit_write: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_instruction( &mut self, inst: &mut Instruction, visit_read: impl FnMut(&mut Self, &mut Variable), visit_write: impl FnMut(&mut Self, &mut Variable), )
Visit an operation with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Sourcepub fn visit_operation(
&mut self,
op: &mut Operation,
out: &mut Option<Variable>,
visit_read: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_operation( &mut self, op: &mut Operation, out: &mut Option<Variable>, visit_read: impl FnMut(&mut Self, &mut Variable), )
Visit an operation with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Sourcepub fn visit_arithmetic(
&mut self,
op: &mut Arithmetic,
visit_read: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_arithmetic( &mut self, op: &mut Arithmetic, visit_read: impl FnMut(&mut Self, &mut Variable), )
Visit an operator with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Sourcepub fn visit_compare(
&mut self,
op: &mut Comparison,
visit_read: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_compare( &mut self, op: &mut Comparison, visit_read: impl FnMut(&mut Self, &mut Variable), )
Visit an operator with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Sourcepub fn visit_bitwise(
&mut self,
op: &mut Bitwise,
visit_read: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_bitwise( &mut self, op: &mut Bitwise, visit_read: impl FnMut(&mut Self, &mut Variable), )
Visit an operator with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Sourcepub fn visit_operator(
&mut self,
op: &mut Operator,
visit_read: impl FnMut(&mut Self, &mut Variable),
)
pub fn visit_operator( &mut self, op: &mut Operator, visit_read: impl FnMut(&mut Self, &mut Variable), )
Visit an operator with a set of read and write visitors. Each visitor will be called with each read or written to variable.
Source§impl Optimizer
impl Optimizer
Sourcepub fn place_phi_nodes(&mut self)
pub fn place_phi_nodes(&mut self)
Places a phi node for each live variable at each frontier
Sourcepub fn insert_phi(&mut self, block: NodeIndex, id: Id, item: Type)
pub fn insert_phi(&mut self, block: NodeIndex, id: Id, item: Type)
Insert a phi node for variable id at block
Source§impl Optimizer
impl Optimizer
Sourcepub fn new(
expand: Scope,
cube_dim: CubeDim,
transformers: Vec<Rc<dyn IrTransformer>>,
processors: Vec<Box<dyn Processor>>,
) -> Self
pub fn new( expand: Scope, cube_dim: CubeDim, transformers: Vec<Rc<dyn IrTransformer>>, processors: Vec<Box<dyn Processor>>, ) -> Self
Create a new optimizer with the scope, CubeDim and execution mode passed into the compiler.
Parses the scope and runs several optimization and analysis loops.
Create a new optimizer with the scope, CubeDim and execution mode passed into the compiler.
Parses the scope and runs several optimization and analysis loops.
Sourcepub fn predecessors(&self, block: NodeIndex) -> Vec<NodeIndex>
pub fn predecessors(&self, block: NodeIndex) -> Vec<NodeIndex>
List of predecessor IDs of the block
Sourcepub fn successors(&self, block: NodeIndex) -> Vec<NodeIndex>
pub fn successors(&self, block: NodeIndex) -> Vec<NodeIndex>
List of successor IDs of the block
Sourcepub fn block(&self, block: NodeIndex) -> &BasicBlock
pub fn block(&self, block: NodeIndex) -> &BasicBlock
Reference to the BasicBlock with ID block
Sourcepub fn block_mut(&mut self, block: NodeIndex) -> &mut BasicBlock
pub fn block_mut(&mut self, block: NodeIndex) -> &mut BasicBlock
Reference to the BasicBlock with ID block
Sourcepub fn parse_scope(&mut self, scope: Scope) -> bool
pub fn parse_scope(&mut self, scope: Scope) -> bool
Recursively parse a scope into the graph
Sourcepub fn local_variable_id(&mut self, variable: &Variable) -> Option<Id>
pub fn local_variable_id(&mut self, variable: &Variable) -> Option<Id>
Gets the id and depth of the variable if it’s a Local and not atomic, None otherwise.