1 | // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s |
2 | |
3 | |
4 | // CHECK: _Z3fooRi(i32* inreg |
5 | void __attribute__ ((regparm (1))) foo(int &a) { |
6 | } |
7 | |
8 | struct S1 { |
9 | int x; |
10 | S1(const S1 &y); |
11 | }; |
12 | |
13 | void __attribute__((regparm(3))) foo2(S1 a, int b); |
14 | // CHECK: declare void @_Z4foo22S1i(%struct.S1* inreg, i32 inreg) |
15 | void bar2(S1 a, int b) { |
16 | foo2(a, b); |
17 | } |
18 | |
19 | struct S2 { |
20 | int x; |
21 | }; |
22 | |
23 | void __attribute__((regparm(3))) foo3(struct S2 a, int b); |
24 | // CHECK: declare void @_Z4foo32S2i(i32 inreg, i32 inreg) |
25 | void bar3(struct S2 a, int b) { |
26 | foo3(a, b); |
27 | } |
28 | |
29 | struct S3 { |
30 | struct { |
31 | struct {} b[0]; |
32 | } a; |
33 | }; |
34 | __attribute((regparm(2))) void foo4(S3 a, int b); |
35 | // CHECK: declare void @_Z4foo42S3i(%struct.S3* byval align 4, i32 inreg) |
36 | void bar3(S3 a, int b) { |
37 | foo4(a, b); |
38 | } |
39 | |