xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/cconv/callee-saved.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips < %s | FileCheck --check-prefixes=ALL,O32 %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel < %s | FileCheck --check-prefixes=ALL,O32 %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips < %s | FileCheck --check-prefixes=ALL,O32-INV %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel < %s | FileCheck --check-prefixes=ALL,O32-INV %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; RUN-TODO: llc -march=mips64 -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32 %s
7*9880d681SAndroid Build Coastguard Worker; RUN-TODO: llc -march=mips64el -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32 %s
8*9880d681SAndroid Build Coastguard Worker; RUN-TODO: llc -march=mips64 -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32-INV %s
9*9880d681SAndroid Build Coastguard Worker; RUN-TODO: llc -march=mips64el -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32-INV %s
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32 %s
12*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32 %s
13*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32-INV %s
14*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32-INV %s
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
17*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
18*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64-INV %s
19*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64-INV %s
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; Test the callee-saved registers are callee-saved as specified by section
22*9880d681SAndroid Build Coastguard Worker; 2 of the MIPSpro N32 Handbook and section 3 of the SYSV ABI spec.
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine void @gpr_clobber() nounwind {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker        ; Clobbering the stack pointer is a bad idea so we'll skip that one
27*9880d681SAndroid Build Coastguard Worker        call void asm "# Clobber", "~{$0},~{$1},~{$2},~{$3},~{$4},~{$5},~{$6},~{$7},~{$8},~{$9},~{$10},~{$11},~{$12},~{$13},~{$14},~{$15},~{$16},~{$17},~{$18},~{$19},~{$20},~{$21},~{$22},~{$23},~{$24},~{$25},~{$26},~{$27},~{$28},~{$30},~{$31}"()
28*9880d681SAndroid Build Coastguard Worker        ret void
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: gpr_clobber:
32*9880d681SAndroid Build Coastguard Worker; O32:           addiu $sp, $sp, -40
33*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $0,
34*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $1,
35*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $2,
36*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $3,
37*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $4,
38*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $5,
39*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $6,
40*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $7,
41*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $8,
42*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $9,
43*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $10,
44*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $11,
45*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $12,
46*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $13,
47*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $14,
48*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $15,
49*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G16:\$16]], [[OFF16:[0-9]+]]($sp)
50*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G17:\$17]], [[OFF17:[0-9]+]]($sp)
51*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G18:\$18]], [[OFF18:[0-9]+]]($sp)
52*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G19:\$19]], [[OFF19:[0-9]+]]($sp)
53*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G20:\$20]], [[OFF20:[0-9]+]]($sp)
54*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G21:\$21]], [[OFF21:[0-9]+]]($sp)
55*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G22:\$22]], [[OFF22:[0-9]+]]($sp)
56*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G23:\$23]], [[OFF23:[0-9]+]]($sp)
57*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $24,
58*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $25,
59*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $26,
60*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $27,
61*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $28,
62*9880d681SAndroid Build Coastguard Worker; O32-INV-NOT:   sw $29,
63*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G30:\$fp]], [[OFF30:[0-9]+]]($sp)
64*9880d681SAndroid Build Coastguard Worker; O32-DAG:       sw [[G31:\$fp]], [[OFF31:[0-9]+]]($sp)
65*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G16]], [[OFF16]]($sp)
66*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G17]], [[OFF17]]($sp)
67*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G18]], [[OFF18]]($sp)
68*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G19]], [[OFF19]]($sp)
69*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G20]], [[OFF20]]($sp)
70*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G21]], [[OFF21]]($sp)
71*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G22]], [[OFF22]]($sp)
72*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G23]], [[OFF23]]($sp)
73*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G30]], [[OFF30]]($sp)
74*9880d681SAndroid Build Coastguard Worker; O32-DAG:       lw [[G31]], [[OFF31]]($sp)
75*9880d681SAndroid Build Coastguard Worker; O32:           addiu $sp, $sp, 40
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; N32:           addiu $sp, $sp, -96
78*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $0,
79*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $1,
80*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $2,
81*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $3,
82*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $4,
83*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $5,
84*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $6,
85*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $7,
86*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $8,
87*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $9,
88*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $10,
89*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $11,
90*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $12,
91*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $13,
92*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $14,
93*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $15,
94*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G16:\$16]], [[OFF16:[0-9]+]]($sp)
95*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G17:\$17]], [[OFF17:[0-9]+]]($sp)
96*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G18:\$18]], [[OFF18:[0-9]+]]($sp)
97*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G19:\$19]], [[OFF19:[0-9]+]]($sp)
98*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G20:\$20]], [[OFF20:[0-9]+]]($sp)
99*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G21:\$21]], [[OFF21:[0-9]+]]($sp)
100*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G22:\$22]], [[OFF22:[0-9]+]]($sp)
101*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G23:\$23]], [[OFF23:[0-9]+]]($sp)
102*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $24,
103*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $25,
104*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $26,
105*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $27,
106*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G28:\$gp]], [[OFF28:[0-9]+]]($sp)
107*9880d681SAndroid Build Coastguard Worker; N32-INV-NOT:   sd $29,
108*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G30:\$fp]], [[OFF30:[0-9]+]]($sp)
109*9880d681SAndroid Build Coastguard Worker; N32-DAG:       sd [[G31:\$fp]], [[OFF31:[0-9]+]]($sp)
110*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G16]], [[OFF16]]($sp)
111*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G17]], [[OFF17]]($sp)
112*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G18]], [[OFF18]]($sp)
113*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G19]], [[OFF19]]($sp)
114*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G20]], [[OFF20]]($sp)
115*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G21]], [[OFF21]]($sp)
116*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G22]], [[OFF22]]($sp)
117*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G23]], [[OFF23]]($sp)
118*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G28]], [[OFF28]]($sp)
119*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G30]], [[OFF30]]($sp)
120*9880d681SAndroid Build Coastguard Worker; N32-DAG:       ld [[G31]], [[OFF31]]($sp)
121*9880d681SAndroid Build Coastguard Worker; N32:           addiu $sp, $sp, 96
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; N64:           daddiu $sp, $sp, -96
124*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $0,
125*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $1,
126*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $2,
127*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $3,
128*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $4,
129*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $5,
130*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $6,
131*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $7,
132*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $8,
133*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $9,
134*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $10,
135*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $11,
136*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $12,
137*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $13,
138*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $14,
139*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $15,
140*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G16:\$16]], [[OFF16:[0-9]+]]($sp)
141*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G17:\$17]], [[OFF17:[0-9]+]]($sp)
142*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G18:\$18]], [[OFF18:[0-9]+]]($sp)
143*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G19:\$19]], [[OFF19:[0-9]+]]($sp)
144*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G20:\$20]], [[OFF20:[0-9]+]]($sp)
145*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G21:\$21]], [[OFF21:[0-9]+]]($sp)
146*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G22:\$22]], [[OFF22:[0-9]+]]($sp)
147*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G23:\$23]], [[OFF23:[0-9]+]]($sp)
148*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G30:\$fp]], [[OFF30:[0-9]+]]($sp)
149*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G31:\$fp]], [[OFF31:[0-9]+]]($sp)
150*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $24,
151*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $25,
152*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $26,
153*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $27,
154*9880d681SAndroid Build Coastguard Worker; N64-DAG:       sd [[G28:\$gp]], [[OFF28:[0-9]+]]($sp)
155*9880d681SAndroid Build Coastguard Worker; N64-INV-NOT:   sd $29,
156*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G16]], [[OFF16]]($sp)
157*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G17]], [[OFF17]]($sp)
158*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G18]], [[OFF18]]($sp)
159*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G19]], [[OFF19]]($sp)
160*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G20]], [[OFF20]]($sp)
161*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G21]], [[OFF21]]($sp)
162*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G22]], [[OFF22]]($sp)
163*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G23]], [[OFF23]]($sp)
164*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G28]], [[OFF28]]($sp)
165*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G30]], [[OFF30]]($sp)
166*9880d681SAndroid Build Coastguard Worker; N64-DAG:       ld [[G31]], [[OFF31]]($sp)
167*9880d681SAndroid Build Coastguard Worker; N64:           daddiu $sp, $sp, 96
168