[−][src]Struct cranelift_codegen::Context
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_and_emit(
&mut self,
isa: &dyn TargetIsa,
mem: &mut Vec<u8>,
relocs: &mut dyn RelocSink,
traps: &mut dyn TrapSink
) -> CodegenResult<()>
[src]
&mut self,
isa: &dyn TargetIsa,
mem: &mut Vec<u8>,
relocs: &mut dyn RelocSink,
traps: &mut dyn TrapSink
) -> CodegenResult<()>
Compile the function, and emit machine code into a Vec<u8>
.
Run the function through all the passes necessary to generate code for the target ISA
represented by isa
, as well as the final step of emitting machine code into a
Vec<u8>
. The machine code is not relocated. Instead, any relocations are emitted
into relocs
.
This function calls compile
and emit_to_memory
, taking care to resize mem
as
needed, so it provides a safe interface.
pub fn compile(&mut self, isa: &dyn TargetIsa) -> CodegenResult<CodeOffset>
[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 unsafe fn emit_to_memory(
&self,
isa: &dyn TargetIsa,
mem: *mut u8,
relocs: &mut dyn RelocSink,
traps: &mut dyn TrapSink
)
[src]
&self,
isa: &dyn TargetIsa,
mem: *mut u8,
relocs: &mut dyn RelocSink,
traps: &mut dyn TrapSink
)
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
.
This function is unsafe since it does not perform bounds checking on the memory buffer,
and it can't guarantee that the mem
pointer is valid.
pub fn verify<'a, FOI: Into<FlagsOrIsa<'a>>>(
&self,
fisa: FOI
) -> VerifierResult<()>
[src]
&self,
fisa: FOI
) -> VerifierResult<()>
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
) -> CodegenResult<()>
[src]
&self,
fisa: FOI
) -> CodegenResult<()>
Run the verifier only if the enable_verifier
setting is true.
pub fn verify_locations(&self, isa: &dyn TargetIsa) -> VerifierResult<()>
[src]
Run the locations verifier on the function.
pub fn verify_locations_if(&self, isa: &dyn TargetIsa) -> CodegenResult<()>
[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
) -> CodegenResult<()>
[src]
&mut self,
fisa: FOI
) -> CodegenResult<()>
Perform dead-code elimination on the function.
pub fn preopt(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Perform pre-legalization rewrites on the function.
pub fn canonicalize_nans(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Perform NaN canonicalizing rewrites on the function.
pub fn legalize(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Run the legalizer for isa
on the function.
pub fn postopt(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[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
) -> CodegenResult<()>
[src]
&mut self,
fisa: FOI
) -> CodegenResult<()>
Perform simple GVN on the function.
pub fn licm(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Perform LICM on the function.
pub fn eliminate_unreachable_code<'a, FOI>(
&mut self,
fisa: FOI
) -> CodegenResult<()> where
FOI: Into<FlagsOrIsa<'a>>,
[src]
&mut self,
fisa: FOI
) -> CodegenResult<()> where
FOI: Into<FlagsOrIsa<'a>>,
Perform unreachable code elimination.
pub fn regalloc(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Run the register allocator.
pub fn prologue_epilogue(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Insert prologue and epilogues after computing the stack frame layout.
pub fn shrink_instructions(&mut self, isa: &dyn TargetIsa) -> CodegenResult<()>
[src]
Run the instruction shrinking pass.
pub fn relax_branches(
&mut self,
isa: &dyn TargetIsa
) -> CodegenResult<CodeOffset>
[src]
&mut self,
isa: &dyn TargetIsa
) -> CodegenResult<CodeOffset>
Run the branch relaxation pass and return the final code size.
Auto Trait Implementations
Blanket Implementations
impl<T> From for T
[src]
impl<T, U> TryFrom for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> Into for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Borrow for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,