Struct cretonne::Context
[−]
[src]
pub struct Context { pub func: Function, pub cfg: ControlFlowGraph, pub domtree: DominatorTree, pub regalloc: Context, pub loop_analysis: LoopAnalysis, }
Persistent data structures and compilation pipeline.
Fields
func: Function
The function we're compiling.
cfg: ControlFlowGraph
The control flow graph of func
.
domtree: DominatorTree
Dominator tree for func
.
regalloc: Context
Register allocation context.
loop_analysis: LoopAnalysis
Loop analysis of func
.
Methods
impl Context
[src]
pub fn new() -> Self
[src]
Allocate a new compilation context.
The returned instance should be reused for compiling multiple functions in order to avoid needless allocator thrashing.
pub fn for_function(func: Function) -> Self
[src]
Allocate a new compilation context with an existing Function.
The returned instance should be reused for compiling multiple functions in order to avoid needless allocator thrashing.
pub fn clear(&mut self)
[src]
Clear all data structures in this context.
pub fn compile(&mut self, isa: &TargetIsa) -> Result<CodeOffset, CtonError>
[src]
Compile the function.
Run the function through all the passes necessary to generate code for the target ISA
represented by isa
. This does not include the final step of emitting machine code into a
code sink.
Returns the size of the function's code.
pub fn emit_to_memory(
&self,
mem: *mut u8,
relocs: &mut RelocSink,
traps: &mut TrapSink,
isa: &TargetIsa
)
[src]
&self,
mem: *mut u8,
relocs: &mut RelocSink,
traps: &mut TrapSink,
isa: &TargetIsa
)
Emit machine code directly into raw memory.
Write all of the function's machine code to the memory at mem
. The size of the machine
code is returned by compile
above.
The machine code is not relocated. Instead, any relocations are emitted into relocs
.
pub fn verify<'a, FOI: Into<FlagsOrIsa<'a>>>(&self, fisa: FOI) -> Result
[src]
Run the verifier on the function.
Also check that the dominator tree and control flow graph are consistent with the function.
pub fn verify_if<'a, FOI: Into<FlagsOrIsa<'a>>>(&self, fisa: FOI) -> CtonResult
[src]
Run the verifier only if the enable_verifier
setting is true.
pub fn verify_locations(&self, isa: &TargetIsa) -> Result
[src]
Run the locations verifier on the function.
pub fn verify_locations_if(&self, isa: &TargetIsa) -> CtonResult
[src]
Run the locations verifier only if the enable_verifier
setting is true.
pub fn dce<'a, FOI: Into<FlagsOrIsa<'a>>>(&mut self, fisa: FOI) -> CtonResult
[src]
Perform dead-code elimination on the function.
pub fn preopt(&mut self, isa: &TargetIsa) -> CtonResult
[src]
Perform pre-legalization rewrites on the function.
pub fn legalize(&mut self, isa: &TargetIsa) -> CtonResult
[src]
Run the legalizer for isa
on the function.
pub fn postopt(&mut self, isa: &TargetIsa) -> CtonResult
[src]
Perform post-legalization rewrites on the function.
pub fn compute_cfg(&mut self)
[src]
Compute the control flow graph.
pub fn compute_domtree(&mut self)
[src]
Compute dominator tree.
pub fn compute_loop_analysis(&mut self)
[src]
Compute the loop analysis.
pub fn flowgraph(&mut self)
[src]
Compute the control flow graph and dominator tree.
pub fn simple_gvn<'a, FOI: Into<FlagsOrIsa<'a>>>(
&mut self,
fisa: FOI
) -> CtonResult
[src]
&mut self,
fisa: FOI
) -> CtonResult
Perform simple GVN on the function.
pub fn licm<'a, FOI: Into<FlagsOrIsa<'a>>>(&mut self, fisa: FOI) -> CtonResult
[src]
Perform LICM on the function.
pub fn eliminate_unreachable_code<'a, FOI>(&mut self, fisa: FOI) -> CtonResult where
FOI: Into<FlagsOrIsa<'a>>,
[src]
FOI: Into<FlagsOrIsa<'a>>,
Perform unreachable code elimination.
pub fn regalloc(&mut self, isa: &TargetIsa) -> CtonResult
[src]
Run the register allocator.
pub fn prologue_epilogue(&mut self, isa: &TargetIsa) -> CtonResult
[src]
Insert prologue and epilogues after computing the stack frame layout.
pub fn relax_branches(
&mut self,
isa: &TargetIsa
) -> Result<CodeOffset, CtonError>
[src]
&mut self,
isa: &TargetIsa
) -> Result<CodeOffset, CtonError>
Run the branch relaxation pass and return the final code size.