Skip to content

Winch: implement rmw and, xor and or for x64#10023

Merged
saulecabrera merged 2 commits into
bytecodealliance:mainfrom
MarinPostma:winch-x64-rmw-and
Jan 19, 2025
Merged

Winch: implement rmw and, xor and or for x64#10023
saulecabrera merged 2 commits into
bytecodealliance:mainfrom
MarinPostma:winch-x64-rmw-and

Conversation

@MarinPostma
Copy link
Copy Markdown
Contributor

@MarinPostma MarinPostma commented Jan 15, 2025

Implement related atomic rmw for winch x64 backend:

  • and:
    • i32.atomic.rmw8.and_u
    • i32.atomic.rmw16.and_u
    • i32.atomic.rmw.and
    • i64.atomic.rmw8.and_u
    • i64.atomic.rmw16.and_u
    • i64.atomic.rmw32.and_u
    • i64.atomic.rmw.and
  • or:
    • i32.atomic.rmw8.or_u
    • i32.atomic.rmw16.or_u
    • i32.atomic.rmw.or
    • i64.atomic.rmw8.or_u
    • i64.atomic.rmw16.or_u
    • i64.atomic.rmw32.or_u
    • i64.atomic.rmw.or
  • xor:
    • i32.atomic.rmw8.xor_u
    • i32.atomic.rmw16.xor_u
    • i32.atomic.rmw.xor
    • i64.atomic.rmw8.xor_u
    • i64.atomic.rmw16.xor_u
    • i64.atomic.rmw32.xor_u
    • i64.atomic.rmw.xor

#9734

@MarinPostma MarinPostma marked this pull request as ready for review January 15, 2025 22:31
@MarinPostma MarinPostma requested review from a team as code owners January 15, 2025 22:31
@MarinPostma MarinPostma requested review from fitzgen and removed request for a team January 15, 2025 22:31
@github-actions github-actions Bot added cranelift Issues related to the Cranelift code generator cranelift:area:x64 Issues related to x64 codegen winch Winch issues or pull requests labels Jan 15, 2025
@github-actions
Copy link
Copy Markdown

Subscribe to Label Action

cc @saulecabrera

Details This issue or pull request has been labeled: "cranelift", "cranelift:area:x64", "winch"

Thus the following users have been cc'd because of the following labels:

  • saulecabrera: winch

To subscribe or unsubscribe from this label, edit the .github/subscribe-to-label.json configuration file.

Learn more.

@saulecabrera saulecabrera requested review from saulecabrera and removed request for a team and fitzgen January 16, 2025 10:48
@MarinPostma MarinPostma changed the title Winch: implement rmw and, and or for x64 Winch: implement rmw and, xor and or for x64 Jan 16, 2025
@MarinPostma MarinPostma force-pushed the winch-x64-rmw-and branch 3 times, most recently from 3324880 to 3f8c463 Compare January 16, 2025 17:07
Copy link
Copy Markdown
Member

@saulecabrera saulecabrera left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Winch pieces look good to me, modulo the panic comment below.

Comment on lines +1343 to +1423
_ => unreachable!(
"invalid op for atomic_rmw_seq, should be one of `or`, `and` or `xor`"
),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you return an error here instead of panicking?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does it make sense to return an error here? we explicitely check that we only match the right variants above, this branch should be legitmately unreachable. No CodeGenError seem to correspond, so I was reluctant to add an error variant for a trivially unreachable statement.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah you're right, it's probably fine as is. I'm trying to error on the side of caution when it comes to panics, because we've put a lot of effort to make sure that they are minimal, particularly if they affect partial development of features at the visitor/masm layer. Here I got confused by the nested match which led me to think that we were missing an implementation.

// Instructions (top level): definition

// `Inst` is defined inside ISLE as `MInst`. We publicly re-export it here.
pub use super::lower::isle::generated_code::AtomicRmwSeqOp;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see an issue with exposing this. However, given that I'm not deeply familiar with the history of x64 backend in Cranelift, I'll kindly ask @cfallin for confirmation.

@saulecabrera
Copy link
Copy Markdown
Member

@MarinPostma just a heads up that there are a couple of conflicts that need to be resolved before merging.

implement rmw or

implement atomic rmw xor

fix operand sizes

implement and, or, xor

update rmw or tests

update rmw xor tests

fmt

use ad-hoc conversion for AtomicRmwSeqOp

fix test

fix rebae quirks
@MarinPostma
Copy link
Copy Markdown
Contributor Author

@saulecabrera I squashed to make conflict resolution more manageable

@saulecabrera saulecabrera added this pull request to the merge queue Jan 19, 2025
Merged via the queue into bytecodealliance:main with commit 2eb6513 Jan 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cranelift:area:x64 Issues related to x64 codegen cranelift Issues related to the Cranelift code generator winch Winch issues or pull requests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants