Skip to content

Fuzzer Not Detecting Incorrect Allocation #191

@d-sonuga

Description

@d-sonuga

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions