granite-rust/compiler
bors 97fff1f2ed Auto merge of #114790 - taiki-e:asm-maybe-uninit, r=Amanieu
Allow MaybeUninit in input and output of inline assembly

**Motivation:**

As part of the work to remove UBs from crossbeam's AtomicCell, I'm writing a library to implement atomic operations on MaybeUnint using inline assembly ([atomic-maybe-uninit](https://github.com/taiki-e/atomic-maybe-uninit), https://github.com/crossbeam-rs/crossbeam/pull/1015).

However, currently, MaybeUnint cannot be used in input&output of inline assembly, so when processing MaybeUninit, values must be [passed through memory](https://github.com/taiki-e/atomic-maybe-uninit/blob/main/src/arch/aarch64.rs#L121-L122). It is inefficient and microbenchmarks have [actually shown significant performance degradation](https://github.com/crossbeam-rs/crossbeam/pull/1015#issuecomment-1676549870).

It would be nice if we could allow MaybeUninit in input and output of inline assembly.

---

This PR changed the type check in rustc_hir_analysis to allow `MaybeUnint<int | float | ptr | fn ptr | simd vector>` in input and output of inline assembly and added a simple test.

To be honest, I'm not sure that this is the correct way to do it, because this is like doing transmute to integers/floats/etc from MaybeUninit on the compiler side. EDIT: [this seems fine](https://rust-lang.zulipchat.com/#narrow/stream/216763-project-inline-asm/topic/MaybeUninit.20in.20asm!/near/384662900)

r? `@Amanieu`
cc `@thomcc` (because you [had previously proposed this](https://rust-lang.zulipchat.com/#narrow/stream/216763-project-inline-asm/topic/MaybeUninit.20in.20asm!))
2023-08-23 13:40:41 +00:00
..
rustc inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_abi Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_arena Address comments 2023-08-14 21:29:19 +02:00
rustc_ast Fix a stack overflow with long else if chains 2023-08-19 13:11:16 +02:00
rustc_ast_lowering Move scrutinee HirId into MatchSource::TryDesugar 2023-08-14 21:43:56 +00:00
rustc_ast_passes rustc: Move features from Session to GlobalCtxt 2023-08-11 16:51:50 +08:00
rustc_ast_pretty Add helpful comments to tt_prepend_space. 2023-08-17 09:01:05 +10:00
rustc_attr rustc: Move features from Session to GlobalCtxt 2023-08-11 16:51:50 +08:00
rustc_baked_icu_data Regen baked data 2023-05-02 10:45:16 -07:00
rustc_borrowck give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
rustc_builtin_macros rustc: Move features from Session to GlobalCtxt 2023-08-11 16:51:50 +08:00
rustc_codegen_cranelift give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
rustc_codegen_gcc Auto merge of #114643 - dpaoliello:inlinedebuginfo, r=wesleywiser 2023-08-22 20:15:29 +00:00
rustc_codegen_llvm Auto merge of #114643 - dpaoliello:inlinedebuginfo, r=wesleywiser 2023-08-22 20:15:29 +00:00
rustc_codegen_ssa Auto merge of #114643 - dpaoliello:inlinedebuginfo, r=wesleywiser 2023-08-22 20:15:29 +00:00
rustc_const_eval avoid return in tail position 2023-08-20 15:52:40 +02:00
rustc_data_structures Auto merge of #114339 - ttsugriy:unsafe-utf8, r=davidtwco 2023-08-08 10:25:37 +00:00
rustc_driver Update rustix 2023-07-03 07:20:51 +00:00
rustc_driver_impl rustc: Move crate_types from Session to GlobalCtxt 2023-08-09 14:17:54 +08:00
rustc_error_codes Fix syntax in E0191 explanation. 2023-08-21 18:45:51 +07:00
rustc_error_messages Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_errors fix 2023-08-18 15:19:23 +08:00
rustc_expand Auto merge of #114915 - nnethercote:Nonterminal-cleanups, r=petrochenkov 2023-08-18 16:07:40 +00:00
rustc_feature Add the relocation_model to the cfg 2023-08-18 19:57:28 +02:00
rustc_fluent_macro Fix diagnostics with errors 2023-05-26 10:44:18 +00:00
rustc_fs_util Add try_canonicalize to rustc_fs_util and use it over fs::canonicalize 2023-03-16 21:50:23 +01:00
rustc_graphviz enable rust_2018_idioms for doctests 2023-05-07 00:12:29 +03:00
rustc_hir Move scrutinee HirId into MatchSource::TryDesugar 2023-08-14 21:43:56 +00:00
rustc_hir_analysis Allow MaybeUninit in input and output of inline assembly 2023-08-23 21:57:18 +09:00
rustc_hir_pretty Auto merge of #114545 - fee1-dead-contrib:lower-impl-effect, r=oli-obk 2023-08-08 19:23:41 +00:00
rustc_hir_typeck Auto merge of #115018 - matthiaskrgr:rollup-pxj0qdb, r=matthiaskrgr 2023-08-20 08:11:08 +00:00
rustc_incremental Ignore unexpected incr-comp session dirs 2023-08-18 19:57:41 +02:00
rustc_index Convert it into a warning 2023-08-22 09:17:46 +00:00
rustc_infer Auto merge of #114611 - nnethercote:type-system-chess, r=compiler-errors 2023-08-18 06:29:38 +00:00
rustc_interface Fix review comment 2023-08-14 16:16:51 +00:00
rustc_lexer Update lexer emoji diagnostics to Unicode 15.0 2023-07-29 08:47:21 +08:00
rustc_lint Rollup merge of #115100 - Urgau:invalid_ref_casting-ptr-writes, r=est31 2023-08-23 05:35:17 +00:00
rustc_lint_defs Auto merge of #115104 - compiler-errors:rollup-8235xz5, r=compiler-errors 2023-08-22 16:16:32 +00:00
rustc_llvm add a csky-unknown-linux-gnuabiv2 target 2023-08-14 23:02:36 +08:00
rustc_log inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_macros Make enum decoding errors more informative. 2023-08-18 16:50:41 +10:00
rustc_metadata Remove metadata_loader query 2023-08-13 16:38:50 +00:00
rustc_middle Auto merge of #114993 - RalfJung:panic-nounwind, r=fee1-dead 2023-08-20 22:01:18 +00:00
rustc_mir_build give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
rustc_mir_dataflow give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
rustc_mir_transform Auto merge of #115005 - compiler-errors:passes, r=cjgillot 2023-08-22 22:04:49 +00:00
rustc_monomorphize give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
rustc_parse Fix a stack overflow with long else if chains 2023-08-19 13:11:16 +02:00
rustc_parse_format Fix unit tests 2023-07-19 16:37:09 +00:00
rustc_passes Contents of reachable statics is reachable 2023-08-22 00:00:00 +00:00
rustc_plugin_impl Add rustc_fluent_macro to decouple fluent from rustc_macros 2023-04-18 18:56:22 +00:00
rustc_privacy Use {Local}ModDefId in many queries 2023-08-14 07:22:48 +00:00
rustc_query_impl Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_query_system Remove conditional use of Sharded from query caches 2023-08-16 14:16:05 +02:00
rustc_resolve Rollup merge of #115011 - compiler-errors:warn-on-elided-assoc-ct-lt, r=cjgillot 2023-08-22 09:00:49 -07:00
rustc_serialize Upgrade to indexmap 2.0.0 2023-07-03 13:51:54 -07:00
rustc_session unknown unstable lint command line 2023-08-22 18:58:39 +08:00
rustc_smir add generics_of to smir 2023-08-22 21:47:46 +03:00
rustc_span Add support for ptr::write for the invalid_reference_casting lint 2023-08-22 15:47:29 +02:00
rustc_symbol_mangling Auto merge of #114672 - lenawanel:master, r=compiler-errors 2023-08-11 09:30:41 +00:00
rustc_target Add the relocation_model to the cfg 2023-08-18 19:57:28 +02:00
rustc_trait_selection instantiate response: no unnecessary new universe 2023-08-18 23:55:28 +02:00
rustc_traits refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_transmute Don't attempt to compute layout of type referencing error 2023-07-27 18:24:08 +00:00
rustc_ty_utils Rollup merge of #114670 - compiler-errors:issue-114660, r=cjgillot 2023-08-09 23:00:00 +02:00
rustc_type_ir Revert "Implement references VarDebugInfo." 2023-08-17 17:02:04 +00:00