Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 67028ce

Browse files
committed
Use PassMode::ByVal for Abi::Vector
1 parent 08fc673 commit 67028ce

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/abi/pass_mode.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,13 @@ pub(super) fn get_pass_mode<'tcx>(tcx: TyCtxt<'tcx>, layout: TyAndLayout<'tcx>)
100100
}
101101

102102
// FIXME implement Vector Abi in a cg_llvm compatible way
103-
Abi::Vector { .. } => PassMode::ByRef { size: Some(layout.size) },
103+
Abi::Vector { .. } => {
104+
if let Some(vector_ty) = crate::intrinsics::clif_vector_type(tcx, layout) {
105+
PassMode::ByVal(vector_ty)
106+
} else {
107+
PassMode::ByRef { size: Some(layout.size) }
108+
}
109+
}
104110

105111
Abi::Aggregate { sized: true } => PassMode::ByRef { size: Some(layout.size) },
106112
Abi::Aggregate { sized: false } => PassMode::ByRef { size: None },

src/intrinsics/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ fn lane_type_and_count<'tcx>(
175175
(lane_layout, lane_count)
176176
}
177177

178-
fn clif_vector_type<'tcx>(tcx: TyCtxt<'tcx>, layout: TyAndLayout<'tcx>) -> Option<Type> {
178+
pub(crate) fn clif_vector_type<'tcx>(tcx: TyCtxt<'tcx>, layout: TyAndLayout<'tcx>) -> Option<Type> {
179179
let (element, count) = match &layout.abi {
180180
Abi::Vector { element, count } => (element.clone(), *count),
181181
_ => unreachable!(),

0 commit comments

Comments
 (0)