2 // compile-flags: -C no-prepopulate-passes
7 // CHECK: define void @f_fpr_tracking(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 zeroext %i)
9 pub extern "C" fn f_fpr_tracking(
28 pub struct FloatFloat {
33 // CHECK: define void @f_float_s_arg(float %0)
35 pub extern "C" fn f_float_s_arg(a: Float) {}
37 // CHECK: define float @f_ret_float_s()
39 pub extern "C" fn f_ret_float_s() -> Float {
43 // CHECK: define void @f_float_float_s_arg({ float, float } %0)
45 pub extern "C" fn f_float_float_s_arg(a: FloatFloat) {}
47 // CHECK: define { float, float } @f_ret_float_float_s()
49 pub extern "C" fn f_ret_float_float_s() -> FloatFloat {
50 FloatFloat { f: 1., g: 2. }
53 // CHECK: define void @f_float_float_s_arg_insufficient_fprs(float %0, float %1, float %2, float %3, float %4, float %5, float %6, i64 %7)
55 pub extern "C" fn f_float_float_s_arg_insufficient_fprs(
68 pub struct FloatInt8 {
74 pub struct FloatUInt8 {
80 pub struct FloatInt32 {
86 pub struct FloatInt64 {
91 // CHECK: define void @f_float_int8_s_arg({ float, i8 } %0)
93 pub extern "C" fn f_float_int8_s_arg(a: FloatInt8) {}
95 // CHECK: define { float, i8 } @f_ret_float_int8_s()
97 pub extern "C" fn f_ret_float_int8_s() -> FloatInt8 {
98 FloatInt8 { f: 1., i: 2 }
101 // CHECK: define void @f_float_int32_s_arg({ float, i32 } %0)
103 pub extern "C" fn f_float_int32_s_arg(a: FloatInt32) {}
105 // CHECK: define { float, i32 } @f_ret_float_int32_s()
107 pub extern "C" fn f_ret_float_int32_s() -> FloatInt32 {
108 FloatInt32 { f: 1., i: 2 }
111 // CHECK: define void @f_float_uint8_s_arg({ float, i8 } %0)
113 pub extern "C" fn f_float_uint8_s_arg(a: FloatUInt8) {}
115 // CHECK: define { float, i8 } @f_ret_float_uint8_s()
117 pub extern "C" fn f_ret_float_uint8_s() -> FloatUInt8 {
118 FloatUInt8 { f: 1., i: 2 }
121 // CHECK: define void @f_float_int64_s_arg({ float, i64 } %0)
123 pub extern "C" fn f_float_int64_s_arg(a: FloatInt64) {}
125 // CHECK: define { float, i64 } @f_ret_float_int64_s()
127 pub extern "C" fn f_ret_float_int64_s() -> FloatInt64 {
128 FloatInt64 { f: 1., i: 2 }
131 // CHECK: define void @f_float_int8_s_arg_insufficient_gprs(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i64 %0)
133 pub extern "C" fn f_float_int8_s_arg_insufficient_gprs(
146 // CHECK: define void @f_struct_float_int8_insufficient_fprs(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i64 %8)
148 pub extern "C" fn f_struct_float_int8_insufficient_fprs(
162 pub struct FloatArr1 {
166 // CHECK: define void @f_floatarr1_s_arg(float %0)
168 pub extern "C" fn f_floatarr1_s_arg(a: FloatArr1) {}
170 // CHECK: define float @f_ret_floatarr1_s()
172 pub extern "C" fn f_ret_floatarr1_s() -> FloatArr1 {
173 FloatArr1 { a: [1.] }
177 pub struct FloatArr2 {
181 // CHECK: define void @f_floatarr2_s_arg({ float, float } %0)
183 pub extern "C" fn f_floatarr2_s_arg(a: FloatArr2) {}
185 // CHECK: define { float, float } @f_ret_floatarr2_s()
187 pub extern "C" fn f_ret_floatarr2_s() -> FloatArr2 {
188 FloatArr2 { a: [1., 2.] }
197 pub struct FloatArr2Tricky1 {
201 // CHECK: define void @f_floatarr2_tricky1_s_arg({ float, float } %0)
203 pub extern "C" fn f_floatarr2_tricky1_s_arg(a: FloatArr2Tricky1) {}
205 // CHECK: define { float, float } @f_ret_floatarr2_tricky1_s()
207 pub extern "C" fn f_ret_floatarr2_tricky1_s() -> FloatArr2Tricky1 {
208 FloatArr2Tricky1 { g: [Tricky1 { f: [1.] }, Tricky1 { f: [2.] }] }
212 pub struct EmptyStruct {}
215 pub struct FloatArr2Tricky2 {
220 // CHECK: define void @f_floatarr2_tricky2_s_arg({ float, float } %0)
222 pub extern "C" fn f_floatarr2_tricky2_s_arg(a: FloatArr2Tricky2) {}
224 // CHECK: define { float, float } @f_ret_floatarr2_tricky2_s()
226 pub extern "C" fn f_ret_floatarr2_tricky2_s() -> FloatArr2Tricky2 {
227 FloatArr2Tricky2 { s: EmptyStruct {}, g: [Tricky1 { f: [1.] }, Tricky1 { f: [2.] }] }
231 pub struct IntFloatInt {
237 // CHECK: define void @f_int_float_int_s_arg([2 x i64] %0)
239 pub extern "C" fn f_int_float_int_s_arg(a: IntFloatInt) {}
241 // CHECK: define [2 x i64] @f_ret_int_float_int_s()
243 pub extern "C" fn f_ret_int_float_int_s() -> IntFloatInt {
244 IntFloatInt { a: 1, b: 2., c: 3 }
248 pub struct CharCharFloat {
254 // CHECK: define void @f_char_char_float_s_arg(i64 %0)
256 pub extern "C" fn f_char_char_float_s_arg(a: CharCharFloat) {}
258 // CHECK: define i64 @f_ret_char_char_float_s()
260 pub extern "C" fn f_ret_char_char_float_s() -> CharCharFloat {
261 CharCharFloat { a: 1, b: 2, c: 3. }
269 // CHECK: define void @f_float_u_arg(i64 %0)
271 pub extern "C" fn f_float_u_arg(a: FloatU) {}
273 // CHECK: define i64 @f_ret_float_u()
275 pub extern "C" fn f_ret_float_u() -> FloatU {
276 unsafe { FloatU { a: 1. } }