os-rust/compiler
bors a2a1206811 Auto merge of #131211 - bjorn3:rust_abi_follow_c_rules, r=nikic,jieyouxu
Return values larger than 2 registers using a return area pointer

LLVM and Cranelift disagree about how to return values that don't fit in the registers designated for return values. LLVM will force the entire return value to be passed by return area pointer, while Cranelift will look at each IR level return value independently and decide to pass it in a register or not, which would result in the return value being passed partially in registers and partially through a return area pointer.

While Cranelift may need to be fixed as the LLVM behavior is generally more correct with respect to the surface language, forcing this behavior in rustc itself makes it easier for other backends to conform to the Rust ABI and for the C ABI rustc already handles this behavior anyway.

In addition LLVM's decision to pass the return value in registers or using a return area pointer depends on how exactly the return type is lowered to an LLVM IR type. For example `Option<u128>` can be lowered as `{ i128, i128 }` in which case the x86_64 backend would use a return area pointer, or it could be passed as `{ i32, i128 }` in which case the x86_64 backend would pass it in registers by taking advantage of an LLVM ABI extension that allows using 3 registers for the x86_64 sysv call conv rather than the officially specified 2 registers.

This adjustment is only necessary for the Rust ABI as for other ABI's the calling convention implementations in rustc_target already ensure any return value which doesn't fit in the available amount of return registers is passed in the right way for the current target.

Helps with https://github.com/rust-lang/rustc_codegen_cranelift/issues/1525
cc https://github.com/bytecodealliance/wasmtime/issues/9250
2024-10-19 14:21:46 +00:00
..
rustc disable size asserts in the compiler when randomizing layouts 2024-08-31 23:56:45 +02:00
rustc_abi compiler: Wire {TyAnd,}Layout into rustc_abi 2024-10-11 17:41:52 -07:00
rustc_arena Remove unnecessary lifetimes from Arena. 2024-09-13 15:33:19 +10:00
rustc_ast Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_ast_ir Add sugar for &pin (const|mut) types 2024-10-07 11:15:04 -07:00
rustc_ast_lowering Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_ast_passes Auto merge of #130654 - lcnr:stabilize-coherence-again, r=compiler-errors 2024-10-15 14:21:34 +00:00
rustc_ast_pretty Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_attr Handle gracefully true/false in cfg(target(..)) compact 2024-10-16 09:41:49 +02:00
rustc_baked_icu_data Don't add warn(unreachable_pub) to rustc_baked_icu. 2024-08-16 08:46:52 +10:00
rustc_borrowck move defining_opaque_types out of Canonical 2024-10-17 10:22:52 +02:00
rustc_builtin_macros Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_codegen_cranelift Allow dropping dyn principal 2024-10-17 20:43:31 +02:00
rustc_codegen_gcc intrinsics.fmuladdf{16,32,64,128}: expose llvm.fmuladd.* semantics 2024-10-11 15:32:56 -06:00
rustc_codegen_llvm llvm: Match aarch64 data layout to new LLVM layout 2024-10-16 01:16:44 +00:00
rustc_codegen_ssa Allow dropping dyn principal 2024-10-17 20:43:31 +02:00
rustc_const_eval Auto merge of #131767 - cuviper:bump-stage0, r=Mark-Simulacrum 2024-10-16 14:40:08 +00:00
rustc_data_structures Auto merge of #131767 - cuviper:bump-stage0, r=Mark-Simulacrum 2024-10-16 14:40:08 +00:00
rustc_driver Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_driver_impl Rollup merge of #130899 - bjorn3:wasi_bootstrap_fixes, r=davidtwco 2024-10-07 11:10:53 -07:00
rustc_error_codes Fix typo in E0793 2024-10-09 10:28:16 -07:00
rustc_error_messages Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_errors Rollup merge of #131344 - nnethercote:ref-Lrc, r=compiler-errors 2024-10-07 12:23:54 +02:00
rustc_expand Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_feature replace placeholder version 2024-10-15 20:13:55 -07:00
rustc_fluent_macro Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_fs_util Couple of changes to make it easier to compile rustc for wasm 2024-09-26 19:51:14 +00:00
rustc_graphviz Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_hir Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_hir_analysis Rollup merge of #128391 - cafce25:issue-128390, r=lcnr 2024-10-17 12:07:19 +02:00
rustc_hir_pretty Move trait bound modifiers into hir::PolyTraitRef 2024-10-14 09:20:38 -04:00
rustc_hir_typeck Rollup merge of #131822 - lcnr:typeck-error-reporting, r=jieyouxu 2024-10-17 12:07:23 +02:00
rustc_incremental Rename NestedMetaItem to MetaItemInner 2024-10-06 23:28:30 +09:00
rustc_index Rollup merge of #130625 - heiseish:issue-124028-fix, r=jieyouxu 2024-10-10 12:49:18 +02:00
rustc_index_macros Remove 'apostrophes' from rustc_parse_format 2024-10-14 23:22:51 +02:00
rustc_infer move defining_opaque_types out of Canonical 2024-10-17 10:22:52 +02:00
rustc_interface stabilize -Znext-solver=coherence 2024-10-15 13:11:00 +02:00
rustc_lexer Reserve guarded string literals (RFC 3593) 2024-10-08 18:21:16 -06:00
rustc_lint update bootstrap configs 2024-10-15 20:30:23 -07:00
rustc_lint_defs Auto merge of #131792 - matthiaskrgr:rollup-480nwg4, r=matthiaskrgr 2024-10-16 17:58:25 +00:00
rustc_llvm clang-format 2024-10-16 21:46:52 +00:00
rustc_log Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_macros Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_metadata rustc_metadata: reduce repetition 2024-10-17 11:13:28 -04:00
rustc_middle Rollup merge of #131802 - compiler-errors:fnonce-coverage, r=Zalathar 2024-10-18 12:00:51 +01:00
rustc_mir_build Rollup merge of #131381 - Nadrieril:min-match-ergonomics, r=pnkfelix 2024-10-16 19:18:30 +02:00
rustc_mir_dataflow Add defaults for Analysis::apply_{call_return_effect,terminator_effect}. 2024-10-14 16:35:47 +11:00
rustc_mir_transform Rollup merge of #131802 - compiler-errors:fnonce-coverage, r=Zalathar 2024-10-18 12:00:51 +01:00
rustc_monomorphize Add fast-path when computing the default visibility 2024-10-14 16:37:54 +02:00
rustc_next_trait_solver Rollup merge of #131857 - WaffleLapkin:dyn-drop-principal-3, r=compiler-errors 2024-10-18 06:59:07 +02:00
rustc_parse Auto merge of #131723 - matthiaskrgr:rollup-krcslig, r=matthiaskrgr 2024-10-15 11:50:31 +00:00
rustc_parse_format Remove 'apostrophes' from rustc_parse_format 2024-10-14 23:22:51 +02:00
rustc_passes Unify secondary_span and swap_secondary_and_primary 2024-10-15 14:39:49 -04:00
rustc_pattern_analysis cleanup: don't clone types that are Copy 2024-09-29 13:31:30 +02:00
rustc_privacy Visit opaques for visibilities. 2024-10-04 23:31:55 +00:00
rustc_query_impl Handle rustc_query_impl cases of rustc::potential_query_instability lint 2024-10-03 12:47:08 +03:00
rustc_query_system add unstable support for outputting file checksums for use in cargo 2024-10-01 21:23:20 -06:00
rustc_resolve compiler: use is_none_or where it is clearly better 2024-10-16 23:50:13 -07:00
rustc_sanitizers Fix some pub(crate) that were undetected bc of instrument 2024-10-04 14:02:09 -04:00
rustc_serialize Fix explicit_iter_loop in rustc_serialize 2024-10-16 15:44:16 +02:00
rustc_session stabilize -Znext-solver=coherence 2024-10-15 13:11:00 +02:00
rustc_smir various fixes for naked_asm! implementation 2024-10-06 19:00:09 +02:00
rustc_span Auto merge of #129458 - EnzymeAD:enzyme-frontend, r=jieyouxu 2024-10-15 01:30:01 +00:00
rustc_symbol_mangling Rollup merge of #130344 - Jaic1:fix-116306, r=BoxyUwU 2024-09-23 06:45:33 +02:00
rustc_target Default to the medium code model on OpenHarmony LoongArch target 2024-10-18 14:16:51 +08:00
rustc_trait_selection Rollup merge of #131864 - lrh2000:upcast_reorder, r=WaffleLapkin 2024-10-18 14:52:25 +01:00
rustc_traits move defining_opaque_types out of Canonical 2024-10-17 10:22:52 +02:00
rustc_transmute Fix some pub(crate) that were undetected bc of instrument 2024-10-04 14:02:09 -04:00
rustc_ty_utils Auto merge of #131211 - bjorn3:rust_abi_follow_c_rules, r=nikic,jieyouxu 2024-10-19 14:21:46 +00:00
rustc_type_ir Rollup merge of #131815 - workingjubilee:did-you-mean-is-none-or, r=jieyouxu 2024-10-17 12:07:22 +02:00
rustc_type_ir_macros Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
stable_mir Rollup merge of #131778 - practicalrs:fix_needless_lifetimes, r=jieyouxu 2024-10-16 20:15:56 +02:00