MCPcopy Create free account
hub / github.com/Amanieu/regalloc3 / encode_group

Method encode_group

src/internal/allocator/queue.rs:73–94  ·  view source on GitHub ↗

Encodes an entry for a virtual register group.

(group: VirtRegGroup, stage: Stage, virt_regs: &VirtRegs)

Source from the content-addressed store, hash-verified

71
72 /// Encodes an entry for a virtual register group.
73 fn encode_group(group: VirtRegGroup, stage: Stage, virt_regs: &VirtRegs) -> Self {
74 let stage = match stage {
75 Stage::Evict => 1,
76 Stage::Split => 0,
77 };
78 let members = virt_regs.group_members(group);
79 let has_fixed_hint = members.iter().any(|&vreg| virt_regs[vreg].has_fixed_hint) as u64;
80 let group_size = members.len() as u64 - 1;
81 let size: u64 = members
82 .iter()
83 .map(|&vreg| ValueSegment::live_insts(virt_regs.segments(vreg)) as u64)
84 .sum();
85 let size = size.min((1 << 27) - 1);
86 let index = group.index() as u64;
87 Entry {
88 bits: (stage << 63)
89 | (has_fixed_hint << 62)
90 | (group_size << 59)
91 | (size << 32)
92 | index,
93 }
94 }
95
96 /// Decodes an entry.
97 fn decode(self) -> (VirtRegOrGroup, Stage) {

Callers

nothing calls this directly

Calls 6

group_membersMethod · 0.80
mapMethod · 0.80
segmentsMethod · 0.80
iterMethod · 0.45
lenMethod · 0.45
indexMethod · 0.45

Tested by

no test coverage detected