xref: /llvm-project/clang/test/CodeGen/avr/return-value.c (revision 84ef7235732896530564289c8db59291a7d5413e)
1*84ef7235SBen Shi // RUN: %clang_cc1 -triple avr -target-cpu atmega328 -emit-llvm %s -o - \
2*84ef7235SBen Shi // RUN:     | FileCheck %s --check-prefix=AVR
3*84ef7235SBen Shi // RUN: %clang_cc1 -triple avr -target-cpu attiny40 -emit-llvm %s -o - \
4*84ef7235SBen Shi // RUN:     | FileCheck %s --check-prefix=TINY
5*84ef7235SBen Shi 
6*84ef7235SBen Shi // Structure that is more than 8 bytes.
7*84ef7235SBen Shi struct s10 {
8*84ef7235SBen Shi   int a, b, c, d, e;
9*84ef7235SBen Shi };
10*84ef7235SBen Shi 
11*84ef7235SBen Shi // Structure that is less than 8 bytes but more than 4 bytes.
12*84ef7235SBen Shi struct s06 {
13*84ef7235SBen Shi   int a, b, c;
14*84ef7235SBen Shi };
15*84ef7235SBen Shi 
16*84ef7235SBen Shi // Structure that is less than 4 bytes.
17*84ef7235SBen Shi struct s04 {
18*84ef7235SBen Shi   int a, b;
19*84ef7235SBen Shi };
20*84ef7235SBen Shi 
foo10(int a,int b,int c)21*84ef7235SBen Shi struct s10 foo10(int a, int b, int c) {
22*84ef7235SBen Shi   struct s10 a0;
23*84ef7235SBen Shi   return a0;
24*84ef7235SBen Shi }
25*84ef7235SBen Shi 
foo06(int a,int b,int c)26*84ef7235SBen Shi struct s06 foo06(int a, int b, int c) {
27*84ef7235SBen Shi   struct s06 a0;
28*84ef7235SBen Shi   return a0;
29*84ef7235SBen Shi }
30*84ef7235SBen Shi 
foo04(int a,int b)31*84ef7235SBen Shi struct s04 foo04(int a, int b) {
32*84ef7235SBen Shi   struct s04 a0;
33*84ef7235SBen Shi   return a0;
34*84ef7235SBen Shi }
35*84ef7235SBen Shi 
fooi64(void)36*84ef7235SBen Shi long long fooi64(void) {
37*84ef7235SBen Shi   return 0xaa5533;
38*84ef7235SBen Shi }
39*84ef7235SBen Shi 
40*84ef7235SBen Shi // AVR: %struct.s10 = type { i16, i16, i16, i16, i16 }
41*84ef7235SBen Shi // AVR: %struct.s06 = type { i16, i16, i16 }
42*84ef7235SBen Shi // AVR: %struct.s04 = type { i16, i16 }
43*84ef7235SBen Shi // AVR: define{{.*}} void @foo10(ptr {{.*}}, i16 noundef %a, i16 noundef %b, i16 noundef %c)
44*84ef7235SBen Shi // AVR: define{{.*}} %struct.s06 @foo06(i16 noundef %a, i16 noundef %b, i16 noundef %c)
45*84ef7235SBen Shi // AVR: define{{.*}} %struct.s04 @foo04(i16 noundef %a, i16 noundef %b)
46*84ef7235SBen Shi // AVR: define{{.*}} i64 @fooi64()
47*84ef7235SBen Shi 
48*84ef7235SBen Shi // TINY: %struct.s10 = type { i16, i16, i16, i16, i16 }
49*84ef7235SBen Shi // TINY: %struct.s06 = type { i16, i16, i16 }
50*84ef7235SBen Shi // TINY: %struct.s04 = type { i16, i16 }
51*84ef7235SBen Shi // TINY: define{{.*}} void @foo10(ptr {{.*}}, i16 noundef %a, i16 noundef %b, i16 noundef %c)
52*84ef7235SBen Shi // TINY: define{{.*}} void @foo06(ptr {{.*}}, i16 noundef %a, i16 noundef %b, i16 noundef %c)
53*84ef7235SBen Shi // TINY: define{{.*}} %struct.s04 @foo04(i16 noundef %a, i16 noundef %b)
54*84ef7235SBen Shi // TINY: define{{.*}} void @fooi64(ptr {{.*}})
55