Skip to content

Commit 0d59759

Browse files
add SerializableMachineEnv
1 parent 732bc75 commit 0d59759

File tree

1 file changed

+49
-5
lines changed

1 file changed

+49
-5
lines changed

src/serialize.rs

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::fmt;
33
use alloc::{format, string::ToString, vec::Vec};
44
use serde::{Deserialize, Serialize};
55

6-
use crate::{Block, Function, Inst, InstRange, MachineEnv, Operand, PRegSet, RegClass, VReg};
6+
use crate::{Block, Function, Inst, InstRange, MachineEnv, Operand, PReg, PRegSet, RegClass, VReg};
77

88
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
99
enum InstOpcode {
@@ -37,7 +37,7 @@ struct InstData {
3737
/// was created with.
3838
#[derive(Serialize, Deserialize)]
3939
pub struct SerializableFunction {
40-
machine_env: MachineEnv,
40+
machine_env: SerializableMachineEnv,
4141
entry_block: Block,
4242
insts: Vec<InstData>,
4343
blocks: Vec<InstRange>,
@@ -57,7 +57,7 @@ impl SerializableFunction {
5757
/// `MachineEnv`.
5858
pub fn new(func: &impl Function, machine_env: MachineEnv) -> Self {
5959
Self {
60-
machine_env,
60+
machine_env: SerializableMachineEnv::new(machine_env),
6161
entry_block: func.entry_block(),
6262
insts: (0..func.num_insts())
6363
.map(|i| {
@@ -123,8 +123,8 @@ impl SerializableFunction {
123123
}
124124

125125
/// Returns the `MachineEnv` associated with this function.
126-
pub fn machine_env(&self) -> &MachineEnv {
127-
&self.machine_env
126+
pub fn machine_env(&self) -> MachineEnv {
127+
self.machine_env.machine_env()
128128
}
129129
}
130130

@@ -291,3 +291,47 @@ impl fmt::Debug for SerializableFunction {
291291
Ok(())
292292
}
293293
}
294+
295+
#[derive(Serialize, Deserialize)]
296+
pub struct SerializableMachineEnv {
297+
preferred_regs_by_class: [Vec<PReg>; 3],
298+
non_preferred_regs_by_class: [Vec<PReg>; 3],
299+
scratch_by_class: [Option<PReg>; 3],
300+
fixed_stack_slots: Vec<PReg>,
301+
}
302+
303+
impl SerializableMachineEnv {
304+
pub fn new(machine_env: MachineEnv) -> Self {
305+
Self {
306+
preferred_regs_by_class: [
307+
machine_env.preferred_regs_by_class[0].to_vec(),
308+
machine_env.preferred_regs_by_class[1].to_vec(),
309+
machine_env.preferred_regs_by_class[2].to_vec(),
310+
],
311+
non_preferred_regs_by_class: [
312+
machine_env.non_preferred_regs_by_class[0].to_vec(),
313+
machine_env.non_preferred_regs_by_class[1].to_vec(),
314+
machine_env.non_preferred_regs_by_class[2].to_vec(),
315+
],
316+
scratch_by_class: machine_env.scratch_by_class,
317+
fixed_stack_slots: machine_env.fixed_stack_slots.to_vec(),
318+
}
319+
}
320+
321+
pub fn machine_env(&self) -> MachineEnv {
322+
MachineEnv {
323+
preferred_regs_by_class: [
324+
&self.preferred_regs_by_class[0],
325+
&self.preferred_regs_by_class[1],
326+
&self.preferred_regs_by_class[2],
327+
],
328+
non_preferred_regs_by_class: [
329+
&self.non_preferred_regs_by_class[0],
330+
&self.non_preferred_regs_by_class[1],
331+
&self.non_preferred_regs_by_class[2],
332+
],
333+
scratch_by_class: self.scratch_by_class,
334+
fixed_stack_slots: &self.fixed_stack_slots,
335+
}
336+
}
337+
}

0 commit comments

Comments
 (0)