|
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