diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2025-07-29 20:41:34 -0700 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2025-07-29 20:41:34 -0700 |
| commit | fe08ba0bae44b870fdda45a98ac51f435ddfc044 (patch) | |
| tree | 8ed6d7fc741be527ebb4c93915acb639212ab905 /compiler/rustc_mir_transform/src | |
| parent | ba7e63b63871a429533c189adbfb1d9a6337e000 (diff) | |
| download | rust-fe08ba0bae44b870fdda45a98ac51f435ddfc044.tar.gz rust-fe08ba0bae44b870fdda45a98ac51f435ddfc044.zip | |
Re-block SRoA on SIMD types
Fixes 144621
Diffstat (limited to 'compiler/rustc_mir_transform/src')
| -rw-r--r-- | compiler/rustc_mir_transform/src/sroa.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/rustc_mir_transform/src/sroa.rs b/compiler/rustc_mir_transform/src/sroa.rs index 80c4b58a574..38769885f36 100644 --- a/compiler/rustc_mir_transform/src/sroa.rs +++ b/compiler/rustc_mir_transform/src/sroa.rs @@ -72,8 +72,12 @@ fn escaping_locals<'tcx>( return true; } if let ty::Adt(def, _args) = ty.kind() - && tcx.is_lang_item(def.did(), LangItem::DynMetadata) + && (def.repr().simd() || tcx.is_lang_item(def.did(), LangItem::DynMetadata)) { + // Exclude #[repr(simd)] types so that they are not de-optimized into an array + // (MCP#838 banned projections into SIMD types, but if the value is unused + // this pass sees "all the uses are of the fields" and expands it.) + // codegen wants to see the `DynMetadata<T>`, // not the inner reference-to-opaque-type. return true; |
