Merge pull request #21 from cfallin/fuzzbug-20211204
Fix fuzzbug: add checker metadata for new vreg on multi-fixed-reg fixup move.
This commit is contained in:
@@ -331,7 +331,7 @@ pub struct Env<'a, F: Function> {
|
||||
// was to the approprate PReg.
|
||||
//
|
||||
// (progpoint, copy-from-preg, copy-to-preg, to-slot)
|
||||
pub multi_fixed_reg_fixups: Vec<(ProgPoint, PRegIndex, PRegIndex, usize)>,
|
||||
pub multi_fixed_reg_fixups: Vec<(ProgPoint, PRegIndex, PRegIndex, VRegIndex, usize)>,
|
||||
|
||||
pub inserted_moves: Vec<InsertedMove>,
|
||||
|
||||
|
||||
@@ -1167,6 +1167,7 @@ impl<'a, F: Function> Env<'a, F> {
|
||||
ProgPoint,
|
||||
PRegIndex,
|
||||
PRegIndex,
|
||||
VRegIndex,
|
||||
usize,
|
||||
)>| {
|
||||
if last_point.is_some() && Some(pos) != last_point {
|
||||
@@ -1189,7 +1190,7 @@ impl<'a, F: Function> Env<'a, F> {
|
||||
let orig_preg = first_preg[idx];
|
||||
if orig_preg != preg_idx {
|
||||
log::trace!(" -> duplicate; switching to constraint Reg");
|
||||
fixups.push((pos, orig_preg, preg_idx, slot));
|
||||
fixups.push((pos, orig_preg, preg_idx, vreg_idx, slot));
|
||||
*op = Operand::new(
|
||||
op.vreg(),
|
||||
OperandConstraint::Reg,
|
||||
|
||||
@@ -685,21 +685,22 @@ impl<'a, F: Function> Env<'a, F> {
|
||||
}
|
||||
|
||||
// Handle multi-fixed-reg constraints by copying.
|
||||
for (progpoint, from_preg, to_preg, slot) in
|
||||
for (progpoint, from_preg, to_preg, to_vreg, slot) in
|
||||
std::mem::replace(&mut self.multi_fixed_reg_fixups, vec![])
|
||||
{
|
||||
log::trace!(
|
||||
"multi-fixed-move constraint at {:?} from p{} to p{}",
|
||||
"multi-fixed-move constraint at {:?} from p{} to p{} for v{}",
|
||||
progpoint,
|
||||
from_preg.index(),
|
||||
to_preg.index()
|
||||
to_preg.index(),
|
||||
to_vreg.index(),
|
||||
);
|
||||
self.insert_move(
|
||||
progpoint,
|
||||
InsertMovePrio::MultiFixedReg,
|
||||
Allocation::reg(self.pregs[from_preg.index()].reg),
|
||||
Allocation::reg(self.pregs[to_preg.index()].reg),
|
||||
None,
|
||||
Some(self.vreg_regs[to_vreg.index()]),
|
||||
);
|
||||
self.set_alloc(
|
||||
progpoint.inst(),
|
||||
|
||||
Reference in New Issue
Block a user