|
5 | 5 | // can be fixed to work with the correct ABI. See #63649 for further |
6 | 6 | // discussion. |
7 | 7 |
|
8 | | -use rustc_data_structures::stable_set::FxHashSet; |
9 | | -use rustc_span::Symbol; |
| 8 | +use crate::abi::call::{ArgAbi, FnAbi}; |
10 | 9 |
|
11 | | -use crate::abi::call::{ArgAbi, FnAbi, Uniform}; |
12 | | -use crate::abi::{HasDataLayout, LayoutOf, TyAndLayout, TyAndLayoutMethods}; |
13 | | - |
14 | | -fn classify_ret<'a, Ty, C>(cx: &C, target_features: &FxHashSet<Symbol>, ret: &mut ArgAbi<'a, Ty>) |
15 | | -where |
16 | | - Ty: TyAndLayoutMethods<'a, C> + Copy, |
17 | | - C: LayoutOf<Ty = Ty, TyAndLayout = TyAndLayout<'a, Ty>> + HasDataLayout, |
18 | | -{ |
19 | | - if ret.layout.is_aggregate() { |
20 | | - if let Some(unit) = ret.layout.homogeneous_aggregate(cx).ok().and_then(|ha| ha.unit()) { |
21 | | - let size = ret.layout.size; |
22 | | - if unit.size == size || target_features.contains(&Symbol::intern("multivalue")) { |
23 | | - ret.cast_to(Uniform { unit, total: size }); |
24 | | - } |
25 | | - } |
26 | | - } |
| 10 | +fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) { |
27 | 11 | ret.extend_integer_width_to(32); |
28 | 12 | } |
29 | 13 |
|
30 | | -fn classify_arg<'a, Ty, C>(cx: &C, arg: &mut ArgAbi<'a, Ty>) |
31 | | -where |
32 | | - Ty: TyAndLayoutMethods<'a, C> + Copy, |
33 | | - C: LayoutOf<Ty = Ty, TyAndLayout = TyAndLayout<'a, Ty>> + HasDataLayout, |
34 | | -{ |
35 | | - if arg.layout.is_aggregate() { |
36 | | - if let Some(unit) = arg.layout.homogeneous_aggregate(cx).ok().and_then(|ha| ha.unit()) { |
37 | | - let size = arg.layout.size; |
38 | | - arg.cast_to(Uniform { unit, total: size }); |
39 | | - } |
40 | | - } |
| 14 | +fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) { |
41 | 15 | arg.extend_integer_width_to(32); |
42 | 16 | } |
43 | 17 |
|
44 | | -pub fn compute_abi_info<'a, Ty, C>( |
45 | | - cx: &C, |
46 | | - target_features: &FxHashSet<Symbol>, |
47 | | - fn_abi: &mut FnAbi<'a, Ty>, |
48 | | -) where |
49 | | - Ty: TyAndLayoutMethods<'a, C> + Copy, |
50 | | - C: LayoutOf<Ty = Ty, TyAndLayout = TyAndLayout<'a, Ty>> + HasDataLayout, |
51 | | -{ |
| 18 | +pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) { |
52 | 19 | if !fn_abi.ret.is_ignore() { |
53 | | - classify_ret(cx, target_features, &mut fn_abi.ret); |
| 20 | + classify_ret(&mut fn_abi.ret); |
54 | 21 | } |
55 | 22 |
|
56 | 23 | for arg in &mut fn_abi.args { |
57 | 24 | if arg.is_ignore() { |
58 | 25 | continue; |
59 | 26 | } |
60 | | - classify_arg(cx, arg); |
| 27 | + classify_arg(arg); |
61 | 28 | } |
62 | 29 | } |
0 commit comments