Open
Description
It's possible for vregs to be used or defined in branch instructions, but the fuzzer doesn't seem to check for these operands.
The following doesn't pass the fuzzer:
block0:
0. branch(1). operands: [def v0 (fixed: p0)] // Allocation: [v0: p0]
block1:
1. operands: [use v0 (fixed: p0)] // Allocation: [v0: p0]
And this does:
block0:
0. operand: [def v0 (fixed: p0)] // Allocation: [v0: p0]
1. branch(1). operands: [use v0 (fixed: p1)] // Allocation: [v0: p9]
block1:
2. operands: [use v0 (fixed: p0)] // Allocation: [v0: p0]
Which is incorrect.
To reproduce this, run the tests in src/fastalloc/tests.rs
at https://github.com/d-sonuga/regalloc2/tree/975dee0ceb56bbc6cbd21554a237babe1e388573.
To resolve this issue, one of the following could be done:
- Disallow operands in branch instructions.
- Update the fuzzer to check for these operands.
Metadata
Metadata
Assignees
Labels
No labels