[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / regparm-struct.c
bloba533f6cedbba2432550bfa1852542ba5040dfe4b
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)
5 void g1(void) {
6 f1(41, 42, 43, 44);
9 struct s1 {
10 int x1;
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)
14 void g2(void) {
15 struct s1 x = {43};
16 f2(41, 42, x, 44);
19 struct s2 {
20 int x1;
21 int x2;
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)
25 void g3(void) {
26 struct s2 x = {43, 44};
27 f3(41, 42, x, 45);
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)
31 void g4(void) {
32 struct s2 x = {42, 43};
33 f4(41, x, 44);
36 struct s3 {
37 int x1;
38 int x2;
39 int x3;
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)
43 void g5(void) {
44 struct s3 x = {42, 43, 44};
45 f5(41, x, 45);
47 __attribute__((regparm(3))) void f6(struct s3 a, int b);
48 // CHECK: declare void @f6(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
49 void g6(void) {
50 struct s3 x = {41, 42, 43};
51 f6(x, 44);
54 struct s4 {
55 int x1;
56 int x2;
57 int x3;
58 int x4;
60 __attribute__((regparm(3))) void f7(struct s4 a, int b);
61 // CHECK: declare void @f7(i32, i32, i32, i32, i32 noundef)
62 void g7(void) {
63 struct s4 x = {41, 42, 43, 44};
64 f7(x, 45);
67 __attribute__((regparm(3))) void f8(float a, int b);
68 // CHECK: declare void @f8(float noundef, i32 inreg noundef)
69 void g8(void) {
70 f8(41, 42);
73 struct s5 {
74 float x1;
76 __attribute__((regparm(3))) void f9(struct s5 a, int b);
77 // CHECK: declare void @f9(float, i32 inreg noundef)
78 void g9(void) {
79 struct s5 x = {41};
80 f9(x, 42);
83 struct s6 {
84 float x1;
85 int x2;
87 __attribute__((regparm(3))) void f10(struct s6 a, int b);
88 // CHECK: declare void @f10(i32 inreg, i32 inreg, i32 inreg noundef)
89 void g10(void) {
90 struct s6 x = {41, 42};
91 f10(x, 43);
94 struct s7 {
95 float x1;
96 int x2;
97 float x3;
99 __attribute__((regparm(3))) void f11(struct s7 a, int b);
100 // CHECK: declare void @f11(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
101 void g11(void) {
102 struct s7 x = {41, 42, 43};
103 f11(x, 44);
106 struct s8 {
107 float x1;
108 float x2;
110 __attribute__((regparm(3))) void f12(struct s8 a, int b);
111 // CHECK: declare void @f12(i32 inreg, i32 inreg, i32 inreg noundef)
112 void g12(void) {
113 struct s8 x = {41, 42};
114 f12(x, 43);
117 struct s9 {
118 float x1;
119 float x2;
120 float x3;
122 __attribute__((regparm(3))) void f13(struct s9 a, int b);
123 // CHECK: declare void @f13(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
124 void g13(void) {
125 struct s9 x = {41, 42, 43};
126 f13(x, 44);
129 struct s10 {
130 double x1;
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)
134 void g14(void) {
135 struct s10 x = { 41 };
136 f14(x, 42, 43);
139 struct s11 {
140 double x1;
141 double x2;
143 __attribute__((regparm(3))) void f15(struct s11 a, int b);
144 // CHECK: declare void @f15(double, double, i32 noundef)
145 void g15(void) {
146 struct s11 x = { 41, 42 };
147 f15(x, 43);
150 struct s12 {
151 double x1;
152 float x2;
154 __attribute__((regparm(3))) void f16(struct s12 a, int b);
155 // CHECK: declare void @f16(i32 inreg, i32 inreg, i32 inreg, i32 noundef)
156 void g16(void) {
157 struct s12 x = { 41, 42 };
158 f16(x, 43);
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)
163 void g17(void) {
164 f17(41, 42, 43);
167 struct s13 {
168 struct inner {
169 float x;
170 } y;
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)
174 void g18(void) {
175 struct s13 x = {{41}};
176 f18(x, 42, 43, 44);