1 // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
3 __attribute__((regparm(3))) void f1(int a
, int b
, int c
, int d
);
4 // CHECK: declare void @f1(i32 inreg noundef, i32 inreg noundef, i32 inreg noundef, i32 noundef)
12 __attribute__((regparm(3))) void f2(int a
, int b
, struct s1 c
, int d
);
13 // CHECK: declare void @f2(i32 inreg noundef, i32 inreg noundef, i32 inreg, i32 noundef)
23 __attribute__((regparm(3))) void f3(int a
, int b
, struct s2 c
, int d
);
24 // CHECK: declare void @f3(i32 inreg noundef, i32 inreg noundef, i32, i32, i32 noundef)
26 struct s2 x
= {43, 44};
29 __attribute__((regparm(3))) void f4(int a
, struct s2 b
, int c
);
30 // CHECK: declare void @f4(i32 inreg noundef, i32 inreg, i32 inreg, i32 noundef)
32 struct s2 x
= {42, 43};
41 __attribute__((regparm(3))) void f5(int a
, struct s3 b
, int c
);
42 // CHECK: declare void @f5(i32 inreg noundef, i32, i32, i32, i32 noundef)
44 struct s3 x
= {42, 43, 44};
47 __attribute__((regparm(3))) void f6(struct s3 a
, int b
);
48 // CHECK: declare void @f6(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
50 struct s3 x
= {41, 42, 43};
60 __attribute__((regparm(3))) void f7(struct s4 a
, int b
);
61 // CHECK: declare void @f7(i32, i32, i32, i32, i32 noundef)
63 struct s4 x
= {41, 42, 43, 44};
67 __attribute__((regparm(3))) void f8(float a
, int b
);
68 // CHECK: declare void @f8(float noundef, i32 inreg noundef)
76 __attribute__((regparm(3))) void f9(struct s5 a
, int b
);
77 // CHECK: declare void @f9(float, i32 inreg noundef)
87 __attribute__((regparm(3))) void f10(struct s6 a
, int b
);
88 // CHECK: declare void @f10(i32 inreg, i32 inreg, i32 inreg noundef)
90 struct s6 x
= {41, 42};
99 __attribute__((regparm(3))) void f11(struct s7 a
, int b
);
100 // CHECK: declare void @f11(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
102 struct s7 x
= {41, 42, 43};
110 __attribute__((regparm(3))) void f12(struct s8 a
, int b
);
111 // CHECK: declare void @f12(i32 inreg, i32 inreg, i32 inreg noundef)
113 struct s8 x
= {41, 42};
122 __attribute__((regparm(3))) void f13(struct s9 a
, int b
);
123 // CHECK: declare void @f13(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
125 struct s9 x
= {41, 42, 43};
132 __attribute__((regparm(3))) void f14(struct s10 a
, int b
, int c
);
133 // CHECK: declare void @f14(double, i32 inreg noundef, i32 inreg noundef)
135 struct s10 x
= { 41 };
143 __attribute__((regparm(3))) void f15(struct s11 a
, int b
);
144 // CHECK: declare void @f15(double, double, i32 noundef)
146 struct s11 x
= { 41, 42 };
154 __attribute__((regparm(3))) void f16(struct s12 a
, int b
);
155 // CHECK: declare void @f16(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
157 struct s12 x
= { 41, 42 };
161 __attribute__((regparm(3))) struct s12
f17(int a
, int b
, int c
);
162 // CHECK: declare void @f17(ptr dead_on_unwind inreg writable sret(%struct.s12) align 4, i32 inreg noundef, i32 inreg noundef, i32 noundef)
172 __attribute__((regparm(3))) void f18(struct s13 a
, int b
, int c
, int d
);
173 // CHECK: declare void @f18(ptr noundef byval(%struct.s13) align 4, i32 inreg noundef, i32 inreg noundef, i32 inreg noundef)
175 struct s13 x
= {{41}};