Decouple MachBufferFinalized<Stencil> from ir::FunctionParameters (#5419)
This commit allows retrieving a `MachBufferFinalized<Final>` from a `MachBufferFinalized<Stencil>` without relying on `ir::FunctionParameters`. Instead it uses the function's base source location, which is the only piece used by the previous `apply_params` definition. This change allows other uses cases (e.g. Winch) to use an opaque, common concept, exposed outside of `cranelift-codegen` to get the finalized state of the machine buffer. This change implies that Winch will transitively know about the `Stencil` compilation phase, but the `Stencil` phase is not exposed to Winch. Other alternatives considered: Parametrizing `MachBufferFinzalized` in a way such that it allows specifying which compilation phase the caller is targetting. Such approach would require also parametrizing the `MachSrcLoc` definition. One of the main drawbacks of this approach is that it also requires changing how the `MachBuffer`'s `start_srcloc` works: for caller requesting a `Final` `MachBufferFinalized`, the `MachBuffer` will need to work in terms of `SourceLoc` rather than in `RelSourceLoc` terms. This approach doesn't necessarily present more advantages than the approach presented in this change, in which there's no need to make any fundamental changes and in which all the `cranelift-codegen` primitives are already exposed.
This commit is contained in:
@@ -323,7 +323,7 @@ impl CompiledCodeStencil {
|
||||
/// Apply function parameters to finalize a stencil into its final form.
|
||||
pub fn apply_params(self, params: &FunctionParameters) -> CompiledCode {
|
||||
CompiledCode {
|
||||
buffer: self.buffer.apply_params(params),
|
||||
buffer: self.buffer.apply_base_srcloc(params.base_srcloc()),
|
||||
frame_size: self.frame_size,
|
||||
disasm: self.disasm,
|
||||
value_labels_ranges: self.value_labels_ranges,
|
||||
|
||||
Reference in New Issue
Block a user