-
Notifications
You must be signed in to change notification settings - Fork 13.2k
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
use indirect return for i128
and f128
on wasm32
#135534
Conversation
This comment has been minimized.
This comment has been minimized.
Given that I was the one who actually suggested this: r? compiler |
b401404
to
cafb35c
Compare
r? compiler |
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.
Could this get a codegen test? I recently wrote a similar one that you could probably copy part of https://github.com/rust-lang/rust/blob/3557d39ce2c8ae3b2fb57e9d900ce47796f0a13e/tests/codegen/i128-x86-callconv.rs
cafb35c
to
fef3dd4
Compare
I added codegen tests for |
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.
r=me with green CI
@bors r=tgross35 |
@folkertdev: 🔑 Insufficient privileges: Not in reviewers |
@bors r=tgross35 without the @ maybe? or is something else messed up? |
@folkertdev: 🔑 Insufficient privileges: Not in reviewers |
Bors still requires permissions to r=somebody, a reviewer commenting r=me doesn’t actually do anything @bors r+ |
ah, I see this from time to time but the person actually doing |
…gross35 use indirect return for `i128` and `f128` on wasm32 fixes rust-lang#135532 Based on https://github.com/WebAssembly/tool-conventions/blob/main/BasicCABI.md we now use an indirect return for `i128`, `u128` and `f128`. That is what LLVM ended up doing anyway. r? `@bjorn3`
Rollup of 5 pull requests Successful merges: - rust-lang#134286 (Enable `unreachable_pub` lint in core) - rust-lang#135249 (Fix overflows in the implementation of `overflowing_literals` lint's help) - rust-lang#135534 (use indirect return for `i128` and `f128` on wasm32) - rust-lang#135556 (Clarify note in `std::sync::LazyLock` example) - rust-lang#135560 (Update `compiler-builtins` to 0.1.144) r? `@ghost` `@rustbot` modify labels: rollup
…gross35 use indirect return for `i128` and `f128` on wasm32 fixes rust-lang#135532 Based on https://github.com/WebAssembly/tool-conventions/blob/main/BasicCABI.md we now use an indirect return for `i128`, `u128` and `f128`. That is what LLVM ended up doing anyway. r? ``@bjorn3``
…iaskrgr Rollup of 4 pull requests Successful merges: - rust-lang#135249 (Fix overflows in the implementation of `overflowing_literals` lint's help) - rust-lang#135534 (use indirect return for `i128` and `f128` on wasm32) - rust-lang#135556 (Clarify note in `std::sync::LazyLock` example) - rust-lang#135560 (Update `compiler-builtins` to 0.1.144) r? `@ghost` `@rustbot` modify labels: rollup
@bors r- rollup=iffy |
|
fef3dd4
to
702134a
Compare
I think just adding I do wonder whether it makes sense to lint for codegen tests that don't set the opt level in some way, because I think in most cases you'd want the stability of the output that that provides (and some @rustbot ready |
@bors r=tgross35 |
☀️ Test successful - checks-actions |
Finished benchmarking commit (bcd0683): comparison URL. Overall result: no relevant changes - no action needed@rustbot label: -perf-regression Instruction countThis benchmark run did not return any relevant results for this metric. Max RSS (memory usage)Results (secondary 2.7%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResults (secondary 2.5%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Binary sizeThis benchmark run did not return any relevant results for this metric. Bootstrap: 764.673s -> 763.784s (-0.12%) |
This seems to have broken the multivalue ABI where LLVM expects u128 / i128 to be passed as two i64 values. Though considering there's no real spec for the multivalue ABI yet, maybe that's fine? It definitely broke my multivalue target though. |
Are you patching rustc to add a multivalue target? If so you probably want to patch the ABI calculation too to use whatever multivalue ABI you are trying to use when compiling for this target. |
No, just a custom target spec json that activates the ABI (and is otherwise identical to the normal |
Even before this PR that would almost certainly not have been enough to fully match the multivalue ABI of clang. Pretty much every ABI change needs a change to the ABI calculation code in rustc. LLVM expects the frontend to do a bunch of ABI adjustments before generating LLVM IR. It only handles the lower half of the ABI implementation. |
Yeah it probably just "happened to work" because crates targeting the It's probably fine not to fix anything in rustc, considering the ABI is considered heavily experimental anyway, with no real spec. |
fixes #135532
Based on https://github.com/WebAssembly/tool-conventions/blob/main/BasicCABI.md we now use an indirect return for
i128
,u128
andf128
. That is what LLVM ended up doing anyway.r? @bjorn3