WIP: Handle moves between realregs (pregs) and vregs somewhat specially, by converting into operand constraints

Still has a fuzzbug in interaction between R->R and V->R moves. Will
likely rework to make pinned-vreg handling more general but want to save
a checkpoint here; idea for rework:
- set allocs immediately if an Operand is a pinned vreg;
- reserve preg ranges;
- then, in rest of liveness computation / LR construction, convert
  pinned-vregs to operands with constraints, but otherwise do not
  special-case as we do in this commit.
This commit is contained in:
Chris Fallin
2021-05-20 19:53:16 -07:00
parent f0b24cf9fa
commit 2a5f571b80
3 changed files with 356 additions and 119 deletions

View File

@@ -589,6 +589,12 @@ impl<'a, F: Function> Checker<'a, F> {
.unwrap()
.push(CheckerInst::Move { into: to, from });
}
&Edit::DefAlloc { .. } => {
unimplemented!(concat!(
"DefAlloc is used only when dealing with pinned vregs, ",
"which are only used by regalloc.rs shim; use checker at that level!"
));
}
&Edit::BlockParams {
ref vregs,
ref allocs,