-
Notifications
You must be signed in to change notification settings - Fork 14.1k
rustc_scalable_vector(N)
#143924
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
rustc_scalable_vector(N)
#143924
Conversation
|
rustbot has assigned @compiler-errors. Use |
|
Some changes occurred in compiler/rustc_attr_parsing Some changes occurred in compiler/rustc_attr_data_structures Some changes occurred in compiler/rustc_passes/src/check_attr.rs Some changes occurred to the intrinsics. Make sure the CTFE / Miri interpreter cc @rust-lang/miri, @RalfJung, @oli-obk, @lcnr Some changes occurred to the CTFE / Miri interpreter cc @rust-lang/miri Some changes occurred to the platform-builtins intrinsics. Make sure the cc @antoyo, @GuillaumeGomez, @bjorn3, @calebzulawski, @programmerjake Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt Some changes occurred in compiler/rustc_codegen_ssa Some changes occurred in compiler/rustc_codegen_gcc changes to the core type system Some changes occurred to the CTFE machinery |
|
I've changed this back to a draft and marked it as |
cf9474d to
d58c634
Compare
This comment was marked as resolved.
This comment was marked as resolved.
0c22701 to
3ad0898
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
5c92874 to
3edf1b6
Compare
This comment has been minimized.
This comment has been minimized.
3edf1b6 to
4f6b823
Compare
workingjubilee
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not intend to have repr(simd) survive this year, so I do not think this should be added.
Could you elaborate? |
|
I intend to replace it with an approach based on lang items for a variety of reasons, one of them being that to start with, the |
This comment was marked as outdated.
This comment was marked as outdated.
|
Updated this reflecting changes in rust-lang/rfcs#3838. It doesn't implement everything in it yet, and is definitely incomplete, but it's a starting point. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
6df93d3 to
26fb3ae
Compare
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as outdated.
This comment was marked as outdated.
Extend parsing of `ReprOptions` with `rustc_scalable_vector(N)` which optionally accepts a single literal integral value - the base multiple of lanes that are in a scalable vector. Can only be applied to structs. Co-authored-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com>
Extend well-formedness checking and HIR analysis to prohibit the use of scalable vectors in structs, enums, unions, tuples and arrays. LLVM does not support scalable vectors being members of other types, so these restrictions are necessary. Co-authored-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com>
`simd_reinterpret` is a replacement for `transmute`, specifically for use with scalable SIMD types. It is used in the tests for scalable vectors and in stdarch. Co-authored-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com>
26fb3ae to
8a0189a
Compare
|
@workingjubilee are you open to reviewing this so that we can land it as an incomplete feature? There's clearly still missing bits and ways that one could use the vectors defined using this incorrectly, but it's a lot easier to experiment with solutions and iterate when there's something landed and we can do those experiments in individual PRs. None of the details are set in stone, we're happy to change the attribute name, etc - can discuss some of that on the RFC. I've rebased and this should pass CI. cc @Amanieu |
This comment has been minimized.
This comment has been minimized.
Introduces `BackendRepr::ScalableVector` corresponding to scalable vector types annotated with `repr(scalable)` which lowers to a scalable vector type in LLVM. Co-authored-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com>
LLVM doesn't handle stores on `<vscale x N x i1>` for `N != 16`, a type used internally in SVE intrinsics. Spilling to the stack to create debuginfo will cause errors during instruction selection. These types that are an internal implementation detail to the intrinsic, so users should never see them types and won't need any debuginfo. Co-authored-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com>
Scalable vectors cannot be members of ADTs and thus cannot be kept over await points in async functions.
Scalable vector types only work with the relevant target features enabled, so require this for any function with the types in its signature.
8a0189a to
6cdc8f7
Compare
|
That test has subtly different output for me locally (it was passing), but none of the differences seem important to so I've added a wildcard for the parts that seem to change. |
|
@davidtwco Yes, I hadn't prioritized it because it became unclear how many changes it would receive from its then-current draft. As you have addressed my main request that I have seen, I'm happy for this to land in incomplete form. I'll try to take a look soon. |
|
Changes to the size of AST and/or HIR nodes. cc @nnethercote Some changes occurred in compiler/rustc_hir/src/attrs This PR changes rustc_public |
| RustcScalableVector { | ||
| /// The base multiple of lanes that are in a scalable vector, if provided. `element_count` | ||
| /// is not provided for representing tuple types. | ||
| element_count: Option<u128>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The size of Attribute jumps from 200 to 240. Probably worth boxing this to avoid that.
Supercedes #118917.
Initial experimental implementation of rust-lang/rfcs#3838. Introduces a
rustc_scalable_vector(N)attribute that can be applied to types with a single[$ty]field (foru{16,32,64},i{16,32,64},f{32,64},bool).rustc_scalable_vectortypes are lowered to scalable vectors in the codegen backend.As with any unstable feature, there will necessarily be follow-ups as we experiment and find cases that we've not considered or still need some logic to handle, but this aims to be a decent baseline to start from.
See #145052 for request for a lang experiment.