Skip to content

Cranelift: Use Uimm64 for UnaryImm::imm instead of Imm64 #6958

@ghost

Description

Feature

Use Uimm64 for UnaryImm::imm instead of Imm64, since UnaryImm::imm is now always encoding an unsigned integer; following #6850 & #3059.

Benefit

Make it clear that UnaryImm::imm must be interpreted as an unsigned integer; or that it should be reinterpreted as a signed integer with respect to the actual bit-length of the encoded value. For example, since #6850, the immediate of iconst.i32 -2 is encoded in UnaryImm::imm as 0xffff_fffe, and not -2, despite being stored in a signed 64-bit integer.

Implementation

Change the type, listen to the complaints of the type checker, and address tests breakage.

I would like to try to address this issue, if it's suitable for a compiler beginner with limited time resource.

Alternatives

Keep using Imm64 since the verifier is already rejecting incorrect encodings.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions