xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/cconv/arguments-varargs-small-structs-multiple-args.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc --march=mips64 -mcpu=mips64r2 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Generated from the C program:
4*9880d681SAndroid Build Coastguard Worker;
5*9880d681SAndroid Build Coastguard Worker; #include <stdio.h>
6*9880d681SAndroid Build Coastguard Worker; #include <string.h>
7*9880d681SAndroid Build Coastguard Worker;
8*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_1b {
9*9880d681SAndroid Build Coastguard Worker;  char x1;
10*9880d681SAndroid Build Coastguard Worker; };
11*9880d681SAndroid Build Coastguard Worker;
12*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_2b {
13*9880d681SAndroid Build Coastguard Worker;  char x1;
14*9880d681SAndroid Build Coastguard Worker;  char x2;
15*9880d681SAndroid Build Coastguard Worker; };
16*9880d681SAndroid Build Coastguard Worker;
17*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_3b {
18*9880d681SAndroid Build Coastguard Worker;  char x1;
19*9880d681SAndroid Build Coastguard Worker;  char x2;
20*9880d681SAndroid Build Coastguard Worker;  char x3;
21*9880d681SAndroid Build Coastguard Worker; };
22*9880d681SAndroid Build Coastguard Worker;
23*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_4b {
24*9880d681SAndroid Build Coastguard Worker;  char x1;
25*9880d681SAndroid Build Coastguard Worker;  char x2;
26*9880d681SAndroid Build Coastguard Worker;  char x3;
27*9880d681SAndroid Build Coastguard Worker;  char x4;
28*9880d681SAndroid Build Coastguard Worker; };
29*9880d681SAndroid Build Coastguard Worker;
30*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_5b {
31*9880d681SAndroid Build Coastguard Worker;  char x1;
32*9880d681SAndroid Build Coastguard Worker;  char x2;
33*9880d681SAndroid Build Coastguard Worker;  char x3;
34*9880d681SAndroid Build Coastguard Worker;  char x4;
35*9880d681SAndroid Build Coastguard Worker;  char x5;
36*9880d681SAndroid Build Coastguard Worker; };
37*9880d681SAndroid Build Coastguard Worker;
38*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_6b {
39*9880d681SAndroid Build Coastguard Worker;  char x1;
40*9880d681SAndroid Build Coastguard Worker;  char x2;
41*9880d681SAndroid Build Coastguard Worker;  char x3;
42*9880d681SAndroid Build Coastguard Worker;  char x4;
43*9880d681SAndroid Build Coastguard Worker;  char x5;
44*9880d681SAndroid Build Coastguard Worker;  char x6;
45*9880d681SAndroid Build Coastguard Worker; };
46*9880d681SAndroid Build Coastguard Worker;
47*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_7b {
48*9880d681SAndroid Build Coastguard Worker;  char x1;
49*9880d681SAndroid Build Coastguard Worker;  char x2;
50*9880d681SAndroid Build Coastguard Worker;  char x3;
51*9880d681SAndroid Build Coastguard Worker;  char x4;
52*9880d681SAndroid Build Coastguard Worker;  char x5;
53*9880d681SAndroid Build Coastguard Worker;  char x6;
54*9880d681SAndroid Build Coastguard Worker;  char x7;
55*9880d681SAndroid Build Coastguard Worker; };
56*9880d681SAndroid Build Coastguard Worker;
57*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_8b {
58*9880d681SAndroid Build Coastguard Worker;  char x1;
59*9880d681SAndroid Build Coastguard Worker;  char x2;
60*9880d681SAndroid Build Coastguard Worker;  char x3;
61*9880d681SAndroid Build Coastguard Worker;  char x4;
62*9880d681SAndroid Build Coastguard Worker;  char x5;
63*9880d681SAndroid Build Coastguard Worker;  char x6;
64*9880d681SAndroid Build Coastguard Worker;  char x7;
65*9880d681SAndroid Build Coastguard Worker;  char x8;
66*9880d681SAndroid Build Coastguard Worker; };
67*9880d681SAndroid Build Coastguard Worker;
68*9880d681SAndroid Build Coastguard Worker; struct SmallStruct_9b {
69*9880d681SAndroid Build Coastguard Worker;  char x1;
70*9880d681SAndroid Build Coastguard Worker;  char x2;
71*9880d681SAndroid Build Coastguard Worker;  char x3;
72*9880d681SAndroid Build Coastguard Worker;  char x4;
73*9880d681SAndroid Build Coastguard Worker;  char x5;
74*9880d681SAndroid Build Coastguard Worker;  char x6;
75*9880d681SAndroid Build Coastguard Worker;  char x7;
76*9880d681SAndroid Build Coastguard Worker;  char x8;
77*9880d681SAndroid Build Coastguard Worker;  char x9;
78*9880d681SAndroid Build Coastguard Worker; };
79*9880d681SAndroid Build Coastguard Worker;
80*9880d681SAndroid Build Coastguard Worker; void varArgF_SmallStruct(char* c, ...);
81*9880d681SAndroid Build Coastguard Worker;
82*9880d681SAndroid Build Coastguard Worker; void smallStruct_1b_x9(struct SmallStruct_1b* ss1,  struct SmallStruct_1b* ss2, struct SmallStruct_1b* ss3, struct SmallStruct_1b* ss4, struct SmallStruct_1b* ss5, struct SmallStruct_1b* ss6, struct SmallStruct_1b* ss7, struct SmallStruct_1b* ss8, struct SmallStruct_1b* ss9)
83*9880d681SAndroid Build Coastguard Worker; {
84*9880d681SAndroid Build Coastguard Worker;  varArgF_SmallStruct("", *ss1, *ss2, *ss3, *ss4, *ss5, *ss6, *ss7, *ss8, *ss9);
85*9880d681SAndroid Build Coastguard Worker; }
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker%struct.SmallStruct_1b = type { i8 }
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker@.str = private unnamed_addr constant [3 x i8] c"01\00", align 1
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerdeclare void @varArgF_SmallStruct(i8* %c, ...)
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine void @smallStruct_1b_x9(%struct.SmallStruct_1b* %ss1, %struct.SmallStruct_1b* %ss2, %struct.SmallStruct_1b* %ss3, %struct.SmallStruct_1b* %ss4, %struct.SmallStruct_1b* %ss5, %struct.SmallStruct_1b* %ss6, %struct.SmallStruct_1b* %ss7, %struct.SmallStruct_1b* %ss8, %struct.SmallStruct_1b* %ss9) #0 {
94*9880d681SAndroid Build Coastguard Workerentry:
95*9880d681SAndroid Build Coastguard Worker  %ss1.addr = alloca %struct.SmallStruct_1b*, align 8
96*9880d681SAndroid Build Coastguard Worker  %ss2.addr = alloca %struct.SmallStruct_1b*, align 8
97*9880d681SAndroid Build Coastguard Worker  %ss3.addr = alloca %struct.SmallStruct_1b*, align 8
98*9880d681SAndroid Build Coastguard Worker  %ss4.addr = alloca %struct.SmallStruct_1b*, align 8
99*9880d681SAndroid Build Coastguard Worker  %ss5.addr = alloca %struct.SmallStruct_1b*, align 8
100*9880d681SAndroid Build Coastguard Worker  %ss6.addr = alloca %struct.SmallStruct_1b*, align 8
101*9880d681SAndroid Build Coastguard Worker  %ss7.addr = alloca %struct.SmallStruct_1b*, align 8
102*9880d681SAndroid Build Coastguard Worker  %ss8.addr = alloca %struct.SmallStruct_1b*, align 8
103*9880d681SAndroid Build Coastguard Worker  %ss9.addr = alloca %struct.SmallStruct_1b*, align 8
104*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss1, %struct.SmallStruct_1b** %ss1.addr, align 8
105*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss2, %struct.SmallStruct_1b** %ss2.addr, align 8
106*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss3, %struct.SmallStruct_1b** %ss3.addr, align 8
107*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss4, %struct.SmallStruct_1b** %ss4.addr, align 8
108*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss5, %struct.SmallStruct_1b** %ss5.addr, align 8
109*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss6, %struct.SmallStruct_1b** %ss6.addr, align 8
110*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss7, %struct.SmallStruct_1b** %ss7.addr, align 8
111*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss8, %struct.SmallStruct_1b** %ss8.addr, align 8
112*9880d681SAndroid Build Coastguard Worker  store %struct.SmallStruct_1b* %ss9, %struct.SmallStruct_1b** %ss9.addr, align 8
113*9880d681SAndroid Build Coastguard Worker  %0 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss1.addr, align 8
114*9880d681SAndroid Build Coastguard Worker  %1 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss2.addr, align 8
115*9880d681SAndroid Build Coastguard Worker  %2 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss3.addr, align 8
116*9880d681SAndroid Build Coastguard Worker  %3 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss4.addr, align 8
117*9880d681SAndroid Build Coastguard Worker  %4 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss5.addr, align 8
118*9880d681SAndroid Build Coastguard Worker  %5 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss6.addr, align 8
119*9880d681SAndroid Build Coastguard Worker  %6 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss7.addr, align 8
120*9880d681SAndroid Build Coastguard Worker  %7 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss8.addr, align 8
121*9880d681SAndroid Build Coastguard Worker  %8 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss9.addr, align 8
122*9880d681SAndroid Build Coastguard Worker  %9 = bitcast %struct.SmallStruct_1b* %0 to { i8 }*
123*9880d681SAndroid Build Coastguard Worker  %10 = getelementptr { i8 }, { i8 }* %9, i32 0, i32 0
124*9880d681SAndroid Build Coastguard Worker  %11 = load i8, i8* %10, align 1
125*9880d681SAndroid Build Coastguard Worker  %12 = bitcast %struct.SmallStruct_1b* %1 to { i8 }*
126*9880d681SAndroid Build Coastguard Worker  %13 = getelementptr { i8 }, { i8 }* %12, i32 0, i32 0
127*9880d681SAndroid Build Coastguard Worker  %14 = load i8, i8* %13, align 1
128*9880d681SAndroid Build Coastguard Worker  %15 = bitcast %struct.SmallStruct_1b* %2 to { i8 }*
129*9880d681SAndroid Build Coastguard Worker  %16 = getelementptr { i8 }, { i8 }* %15, i32 0, i32 0
130*9880d681SAndroid Build Coastguard Worker  %17 = load i8, i8* %16, align 1
131*9880d681SAndroid Build Coastguard Worker  %18 = bitcast %struct.SmallStruct_1b* %3 to { i8 }*
132*9880d681SAndroid Build Coastguard Worker  %19 = getelementptr { i8 }, { i8 }* %18, i32 0, i32 0
133*9880d681SAndroid Build Coastguard Worker  %20 = load i8, i8* %19, align 1
134*9880d681SAndroid Build Coastguard Worker  %21 = bitcast %struct.SmallStruct_1b* %4 to { i8 }*
135*9880d681SAndroid Build Coastguard Worker  %22 = getelementptr { i8 }, { i8 }* %21, i32 0, i32 0
136*9880d681SAndroid Build Coastguard Worker  %23 = load i8, i8* %22, align 1
137*9880d681SAndroid Build Coastguard Worker  %24 = bitcast %struct.SmallStruct_1b* %5 to { i8 }*
138*9880d681SAndroid Build Coastguard Worker  %25 = getelementptr { i8 }, { i8 }* %24, i32 0, i32 0
139*9880d681SAndroid Build Coastguard Worker  %26 = load i8, i8* %25, align 1
140*9880d681SAndroid Build Coastguard Worker  %27 = bitcast %struct.SmallStruct_1b* %6 to { i8 }*
141*9880d681SAndroid Build Coastguard Worker  %28 = getelementptr { i8 }, { i8 }* %27, i32 0, i32 0
142*9880d681SAndroid Build Coastguard Worker  %29 = load i8, i8* %28, align 1
143*9880d681SAndroid Build Coastguard Worker  %30 = bitcast %struct.SmallStruct_1b* %7 to { i8 }*
144*9880d681SAndroid Build Coastguard Worker  %31 = getelementptr { i8 }, { i8 }* %30, i32 0, i32 0
145*9880d681SAndroid Build Coastguard Worker  %32 = load i8, i8* %31, align 1
146*9880d681SAndroid Build Coastguard Worker  %33 = bitcast %struct.SmallStruct_1b* %8 to { i8 }*
147*9880d681SAndroid Build Coastguard Worker  %34 = getelementptr { i8 }, { i8 }* %33, i32 0, i32 0
148*9880d681SAndroid Build Coastguard Worker  %35 = load i8, i8* %34, align 1
149*9880d681SAndroid Build Coastguard Worker  call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %11, i8 inreg %14, i8 inreg %17, i8 inreg %20, i8 inreg %23, i8 inreg %26, i8 inreg %29, i8 inreg %32, i8 inreg %35)
150*9880d681SAndroid Build Coastguard Worker  ret void
151*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: smallStruct_1b_x9:
152*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
153*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
154*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
155*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
156*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
157*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
158*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
159*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
160*9880d681SAndroid Build Coastguard Worker ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
161*9880d681SAndroid Build Coastguard Worker}
162