@@ -72,29 +72,247 @@ pub struct Three32s {
72
72
c : u32 ,
73
73
}
74
74
75
- extern "C" {
76
- fn receives_twou16s ( x : TwoU16s ) ;
77
- fn returns_twou16s ( ) -> TwoU16s ;
75
+ // CHECK-LABEL: @receives_twou16s
76
+ // aarch64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
77
+ // loongarch64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
78
+ // powerpc64-SAME: ([[ABI_TYPE:i32]] {{.*}}[[ABI_VALUE:%.+]])
79
+ // sparc64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
80
+ // x86_64-SAME: ([[ABI_TYPE:i32]] {{.*}}[[ABI_VALUE:%.+]])
81
+ #[ no_mangle]
82
+ #[ inline( never) ]
83
+ pub extern "C" fn receives_twou16s ( x : TwoU16s ) {
84
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
85
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
86
+ // powerpc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
87
+ // sparc64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
88
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
89
+
90
+ // CHECK: [[RUST_ALLOCA:%.+]] = alloca [4 x i8], align [[RUST_ALIGN:2]]
91
+
92
+ // CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
93
+
94
+ // CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 4, i1 false)
95
+ }
96
+
97
+ // CHECK-LABEL: @returns_twou16s
98
+ // powerpc64-SAME: sret([4 x i8]) align [[RUST_ALIGN:2]] {{.*}}[[RET_PTR:%.*]])
99
+ #[ no_mangle]
100
+ #[ inline( never) ]
101
+ pub extern "C" fn returns_twou16s ( ) -> TwoU16s {
102
+ // powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
103
+ // The other targets copy the cast ABI type to an alloca.
104
+
105
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
106
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
107
+ // sparc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
108
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
109
+
110
+ // aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
111
+ // loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
112
+ // sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
113
+ // x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i32]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
114
+
115
+ // aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
116
+ // loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
117
+ // sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
118
+ // x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
119
+ TwoU16s { a : 0 , b : 1 }
120
+ }
121
+
122
+ // CHECK-LABEL: @receives_fiveu16s
123
+ // aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
124
+ // loongarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
125
+ // powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
126
+ // sparc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
127
+ // x86_64-SAME: ([[ABI_TYPE:{ i64, i16 }]] {{.*}}[[ABI_VALUE:%.+]])
128
+ #[ no_mangle]
129
+ #[ inline( never) ]
130
+ pub extern "C" fn receives_fiveu16s ( x : FiveU16s ) {
131
+ // CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
132
+
133
+ // CHECK: [[RUST_ALLOCA:%.+]] = alloca [10 x i8], align [[RUST_ALIGN:2]]
134
+
135
+ // CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
136
+
137
+ // CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 10, i1 false)
138
+ }
139
+
140
+ // CHECK-LABEL: @returns_fiveu16s
141
+ // powerpc64-SAME: sret([10 x i8]) align [[RUST_ALIGN:2]] {{.*}}[[RET_PTR:%.*]])
142
+ #[ no_mangle]
143
+ #[ inline( never) ]
144
+ pub extern "C" fn returns_fiveu16s ( ) -> FiveU16s {
145
+ // powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
146
+ // The other targets copy the cast ABI type to an alloca.
147
+
148
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
149
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
150
+ // sparc64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
151
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
152
+
153
+ // aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
154
+ // loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
155
+ // sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
156
+ // x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ i64, i16 }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
157
+
158
+ // aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
159
+ // loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
160
+ // sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
161
+ // x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
162
+ FiveU16s { a : 0 , b : 1 , c : 2 , d : 3 , e : 4 }
163
+ }
164
+
165
+ // CHECK-LABEL: @receives_doubledouble
166
+ // aarch64-SAME: ([[ABI_TYPE:\[2 x double\]]] {{.*}}[[ABI_VALUE:%.+]])
167
+ // loongarch64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
168
+ // powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
169
+ // sparc64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
170
+ // x86_64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
171
+ #[ no_mangle]
172
+ #[ inline( never) ]
173
+ pub extern "C" fn receives_doubledouble ( x : DoubleDouble ) {
174
+ // CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
175
+
176
+ // CHECK: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
177
+
178
+ // CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
179
+
180
+ // CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
181
+ }
182
+
183
+ // CHECK-LABEL: @returns_doubledouble
184
+ // powerpc64-SAME: sret([16 x i8]) align [[RUST_ALIGN:8]] {{.*}}[[RET_PTR:%.*]])
185
+ #[ no_mangle]
186
+ #[ inline( never) ]
187
+ pub extern "C" fn returns_doubledouble ( ) -> DoubleDouble {
188
+ // powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
189
+ // The other targets copy the cast ABI type to an alloca.
190
+
191
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
192
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
193
+ // sparc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
194
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
78
195
79
- fn receives_fiveu16s ( x : FiveU16s ) ;
80
- fn returns_fiveu16s ( ) -> FiveU16s ;
196
+ // aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x double\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
197
+ // loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
198
+ // sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
199
+ // x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
200
+
201
+ // aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
202
+ // loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
203
+ // sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
204
+ // x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
205
+ DoubleDouble { f : 0. , g : 1. }
206
+ }
207
+
208
+ // CHECK-LABEL: @receives_three32s
209
+ // aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
210
+ // loongarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
211
+ // powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
212
+ // sparc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
213
+ // x86_64-SAME: ([[ABI_TYPE:{ i64, i32 }]] {{.*}}[[ABI_VALUE:%.+]])
214
+ #[ no_mangle]
215
+ #[ inline( never) ]
216
+ pub extern "C" fn receives_three32s ( x : Three32s ) {
217
+ // CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
218
+
219
+ // CHECK: [[RUST_ALLOCA:%.+]] = alloca [12 x i8], align [[RUST_ALIGN:4]]
220
+
221
+ // CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
222
+
223
+ // CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 12, i1 false)
224
+ }
225
+
226
+ // CHECK-LABEL: @returns_three32s
227
+ // powerpc64-SAME: sret([12 x i8]) align [[RUST_ALIGN:4]] {{.*}}[[RET_PTR:%.*]])
228
+ #[ no_mangle]
229
+ #[ inline( never) ]
230
+ pub extern "C" fn returns_three32s ( ) -> Three32s {
231
+ // powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
232
+ // The other targets copy the cast ABI type to an alloca.
233
+
234
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
235
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
236
+ // sparc64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
237
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
81
238
82
- fn receives_doubledouble ( x : DoubleDouble ) ;
83
- fn returns_doubledouble ( ) -> DoubleDouble ;
239
+ // aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
240
+ // loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
241
+ // sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
242
+ // x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ i64, i32 }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
84
243
85
- fn receives_three32s ( x : Three32s ) ;
86
- fn returns_three32s ( ) -> Three32s ;
244
+ // aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
245
+ // loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
246
+ // sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
247
+ // x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
248
+ Three32s { a : 0 , b : 0 , c : 0 }
249
+ }
250
+
251
+ // These functions cause an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
252
+ #[ cfg( not( target_arch = "sparc64" ) ) ]
253
+ // aarch64-LABEL: @receives_doublefloat
254
+ // loongarch64-LABEL: @receives_doublefloat
255
+ // powerpc64-LABEL: @receives_doublefloat
256
+ // x86_64-LABEL: @receives_doublefloat
257
+
258
+ // aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
259
+ // loongarch64-SAME: ([[ABI_TYPE:{ double, float }]] {{.*}}[[ABI_VALUE:%.+]])
260
+ // powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
261
+ // x86_64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
262
+ #[ no_mangle]
263
+ #[ inline( never) ]
264
+ pub extern "C" fn receives_doublefloat ( x : DoubleFloat ) {
265
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
266
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
267
+ // powerpc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
268
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
269
+
270
+ // aarch64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
271
+ // loongarch64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
272
+ // powerpc64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
273
+ // x86_64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
274
+
275
+ // aarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
276
+ // loongarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
277
+ // powerpc64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
278
+ // x86_64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
279
+
280
+ // aarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
281
+ // loongarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 12, i1 false)
282
+ // powerpc64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
283
+ // x86_64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
284
+ }
285
+
286
+ #[ cfg( not( target_arch = "sparc64" ) ) ]
287
+ // aarch64-LABEL: @returns_doublefloat
288
+ // loongarch64-LABEL: @returns_doublefloat
289
+ // powerpc64-LABEL: @returns_doublefloat
290
+ // x86_64-LABEL: @returns_doublefloat
291
+
292
+ // powerpc64-SAME: sret([16 x i8]) align [[RUST_ALIGN:8]] {{.*}}[[RET_PTR:%.*]])
293
+ #[ no_mangle]
294
+ #[ inline( never) ]
295
+ pub extern "C" fn returns_doublefloat ( ) -> DoubleFloat {
296
+ // powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
297
+ // The other targets copy the cast ABI type to an alloca.
298
+
299
+ // aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
300
+ // loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
301
+ // x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
302
+
303
+ // aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
304
+ // loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, float }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
305
+ // x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
87
306
88
- // These functions cause an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
89
- #[ cfg( not( target_arch = "sparc64" ) ) ]
90
- fn receives_doublefloat ( x : DoubleFloat ) ;
91
- #[ cfg( not( target_arch = "sparc64" ) ) ]
92
- fn returns_doublefloat ( ) -> DoubleFloat ;
307
+ // aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
308
+ // loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
309
+ // x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
310
+ DoubleFloat { f : 0. , g : 0. }
93
311
}
94
312
95
313
// CHECK-LABEL: @call_twou16s
96
314
#[ no_mangle]
97
- pub unsafe fn call_twou16s ( ) {
315
+ pub fn call_twou16s ( ) {
98
316
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
99
317
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
100
318
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
@@ -118,7 +336,7 @@ pub unsafe fn call_twou16s() {
118
336
119
337
// CHECK-LABEL: @return_twou16s
120
338
#[ no_mangle]
121
- pub unsafe fn return_twou16s ( ) -> TwoU16s {
339
+ pub fn return_twou16s ( ) -> TwoU16s {
122
340
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
123
341
124
342
// powerpc64: [[RETVAL:%.+]] = alloca [4 x i8], align 2
@@ -155,7 +373,7 @@ pub unsafe fn return_twou16s() -> TwoU16s {
155
373
156
374
// CHECK-LABEL: @call_fiveu16s
157
375
#[ no_mangle]
158
- pub unsafe fn call_fiveu16s ( ) {
376
+ pub fn call_fiveu16s ( ) {
159
377
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
160
378
161
379
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [10 x i8], align 2
@@ -176,7 +394,7 @@ pub unsafe fn call_fiveu16s() {
176
394
// CHECK-LABEL: @return_fiveu16s
177
395
// CHECK-SAME: (ptr {{.+}} sret([10 x i8]) align [[RUST_ALIGN:2]] dereferenceable(10) [[RET_PTR:%.+]])
178
396
#[ no_mangle]
179
- pub unsafe fn return_fiveu16s ( ) -> FiveU16s {
397
+ pub fn return_fiveu16s ( ) -> FiveU16s {
180
398
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
181
399
182
400
// powerpc64: call void @returns_fiveu16s(ptr {{.+}} [[RET_PTR]])
@@ -207,7 +425,7 @@ pub unsafe fn return_fiveu16s() -> FiveU16s {
207
425
208
426
// CHECK-LABEL: @call_doubledouble
209
427
#[ no_mangle]
210
- pub unsafe fn call_doubledouble ( ) {
428
+ pub fn call_doubledouble ( ) {
211
429
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
212
430
213
431
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
@@ -227,7 +445,7 @@ pub unsafe fn call_doubledouble() {
227
445
228
446
// CHECK-LABEL: @return_doubledouble
229
447
#[ no_mangle]
230
- pub unsafe fn return_doubledouble ( ) -> DoubleDouble {
448
+ pub fn return_doubledouble ( ) -> DoubleDouble {
231
449
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
232
450
233
451
// powerpc64: [[RETVAL:%.+]] = alloca [16 x i8], align 8
@@ -269,7 +487,7 @@ pub unsafe fn return_doubledouble() -> DoubleDouble {
269
487
// powerpc64-LABEL: @call_doublefloat
270
488
// x86_64-LABEL: @call_doublefloat
271
489
#[ no_mangle]
272
- pub unsafe fn call_doublefloat ( ) {
490
+ pub fn call_doublefloat ( ) {
273
491
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
274
492
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
275
493
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
@@ -305,7 +523,7 @@ pub unsafe fn call_doublefloat() {
305
523
// powerpc64-LABEL: @return_doublefloat
306
524
// x86_64-LABEL: @return_doublefloat
307
525
#[ no_mangle]
308
- pub unsafe fn return_doublefloat ( ) -> DoubleFloat {
526
+ pub fn return_doublefloat ( ) -> DoubleFloat {
309
527
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
310
528
311
529
// powerpc64: [[RETVAL:%.+]] = alloca [16 x i8], align 8
@@ -337,7 +555,7 @@ pub unsafe fn return_doublefloat() -> DoubleFloat {
337
555
338
556
// CHECK-LABEL: @call_three32s
339
557
#[ no_mangle]
340
- pub unsafe fn call_three32s ( ) {
558
+ pub fn call_three32s ( ) {
341
559
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
342
560
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [12 x i8], align [[RUST_ALIGN:4]]
343
561
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 12, i1 false)
@@ -357,7 +575,7 @@ pub unsafe fn call_three32s() {
357
575
// CHECK-LABEL: @return_three32s(
358
576
// CHECK-SAME: sret([12 x i8]) align [[RUST_ALIGN:4]] {{.*}}[[RUST_RETVAL:%.*]])
359
577
#[ no_mangle]
360
- pub unsafe fn return_three32s ( ) -> Three32s {
578
+ pub fn return_three32s ( ) -> Three32s {
361
579
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
362
580
363
581
// powerpc64: call void @returns_three32s(ptr {{.+}} [[RUST_RETVAL]])
0 commit comments