blob: 27143459dde2f2103e87f50a8de3392c7aea0944 [file] [log] [blame]
David Truby44aa4762024-12-18 07:43:221// Test AArch64 ABI rewrite of struct passed by value (BIND(C), VALUE derived types).
2// RUN: fir-opt --target-rewrite="target=aarch64-unknown-linux-gnu" %s | FileCheck %s
3
4// CHECK-LABEL: func.func private @small_i32(!fir.array<2xi64>)
5func.func private @small_i32(!fir.type<small_i32{i:i32,j:i32,k:i32}>)
6// CHECK-LABEL: func.func private @small_i64(!fir.array<2xi64>)
7func.func private @small_i64(!fir.type<small_i64{i:i64,j:i64}>)
8// CHECK-LABEL: func.func private @small_mixed(!fir.array<2xi64>)
9func.func private @small_mixed(!fir.type<small_mixed{i:i64,j:f32,k:i32}>)
10// CHECK-LABEL: func.func private @small_non_hfa(!fir.array<2xi64>)
11func.func private @small_non_hfa(!fir.type<small_non_hfa{i:f64,j:f32,k:f16}>)
12
13// CHECK-LABEL: func.func private @hfa_f16(!fir.type<hfa_f16{i:f16,j:f16}>)
14func.func private @hfa_f16(!fir.type<hfa_f16{i:f16,j:f16}>)
15// CHECK-LABEL: func.func private @hfa_bf16(!fir.type<hfa_bf16{i:bf16,j:bf16,k:bf16,l:bf16}>)
16func.func private @hfa_bf16(!fir.type<hfa_bf16{i:bf16,j:bf16,k:bf16,l:bf16}>)
17// CHECK-LABEL: func.func private @hfa_f32(!fir.type<hfa_f32{i:f32,j:f32}>)
18func.func private @hfa_f32(!fir.type<hfa_f32{i:f32,j:f32}>)
19// CHECK-LABEL: func.func private @hfa_f64(!fir.type<hfa_f64{i:f64,j:f64,k:f64}>)
20func.func private @hfa_f64(!fir.type<hfa_f64{i:f64,j:f64,k:f64}>)
21// CHECK-LABEL: func.func private @hfa_f128(!fir.type<hfa_f128{i:f128,j:f128,k:f128,l:f128}>)
22func.func private @hfa_f128(!fir.type<hfa_f128{i:f128,j:f128,k:f128,l:f128}>)
23
24// CHECK-LABEL: func.func private @multi_small_integer(!fir.array<2xi64>, !fir.array<2xi64>)
25func.func private @multi_small_integer(!fir.type<small_i32{i:i32,j:i32,k:i32}>, !fir.type<small_i64{i:i64,j:i64}>)
26// CHECK-LABEL: func.func private @multi_hfas(!fir.type<hfa_f16{i:f16,j:f16}>, !fir.type<hfa_f128{i:f128,j:f128,k:f128,l:f128}>)
27func.func private @multi_hfas(!fir.type<hfa_f16{i:f16,j:f16}>, !fir.type<hfa_f128{i:f128,j:f128,k:f128,l:f128}>)
28// CHECK-LABEL: func.func private @multi_mixed(!fir.type<hfa_f64{i:f64,j:f64,k:f64}>, !fir.array<2xi64>, !fir.type<hfa_f32{i:f32,j:f32}>, !fir.array<2xi64>)
29func.func private @multi_mixed(!fir.type<hfa_f64{i:f64,j:f64,k:f64}>,!fir.type<small_non_hfa{i:f64,j:f32,k:f16}>,!fir.type<hfa_f32{i:f32,j:f32}>,!fir.type<small_i64{i:i64,j:i64}>)
30
31// CHECK-LABEL: func.func private @int_max(!fir.array<2xi64>,
32// CHECK-SAME: !fir.array<2xi64>,
33// CHECK-SAME: !fir.array<2xi64>,
34// CHECK-SAME: !fir.array<2xi64>)
35func.func private @int_max(!fir.type<int_max{i:i64,j:i64}>,
36 !fir.type<int_max{i:i64,j:i64}>,
37 !fir.type<int_max{i:i64,j:i64}>,
38 !fir.type<int_max{i:i64,j:i64}>)
39// CHECK-LABEL: func.func private @hfa_max(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>, !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>)
40func.func private @hfa_max(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>, !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>)
41// CHECK-LABEL: func.func private @max(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
42// CHECK-SAME: !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
43// CHECK-SAME: !fir.array<2xi64>,
44// CHECK-SAME: !fir.array<2xi64>,
45// CHECK-SAME: !fir.array<2xi64>,
46// CHECK-SAME: !fir.array<2xi64>)
47func.func private @max(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
48 !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
49 !fir.type<int_max{i:i64,j:i64}>,
50 !fir.type<int_max{i:i64,j:i64}>,
51 !fir.type<int_max{i:i64,j:i64}>,
52 !fir.type<int_max{i:i64,j:i64}>)
53
54
55// CHECK-LABEL: func.func private @too_many_int(!fir.array<2xi64>,
56// CHECK-SAME: !fir.array<2xi64>,
57// CHECK-SAME: !fir.array<2xi64>,
58// CHECK-SAME: !fir.array<2xi64>,
59// CHECK-SAME: !fir.ref<!fir.type<int_max{i:i64,j:i64}>> {{{.*}}, llvm.byval = !fir.type<int_max{i:i64,j:i64}>})
60func.func private @too_many_int(!fir.type<int_max{i:i64,j:i64}>,
61 !fir.type<int_max{i:i64,j:i64}>,
62 !fir.type<int_max{i:i64,j:i64}>,
63 !fir.type<int_max{i:i64,j:i64}>,
64 !fir.type<int_max{i:i64,j:i64}>)
65// CHECK-LABEL: func.func private @too_many_hfa(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
66// CHECK-SAME: !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
67// CHECK-SAME: !fir.ref<!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>> {{{.*}}, llvm.byval = !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>})
68func.func private @too_many_hfa(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
69 !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
70 !fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>)
71
72// CHECK-LABEL: func.func private @too_big(!fir.ref<!fir.type<too_big{i:!fir.array<5xi32>}>> {{{.*}}, llvm.byval = !fir.type<too_big{i:!fir.array<5xi32>}>})
73func.func private @too_big(!fir.type<too_big{i:!fir.array<5xi32>}>)