Skip to content

Commit 1c7c16e

Browse files
Chen Zhengtstellar
Chen Zheng
authored andcommitted
[NFC][PowerPC] use script to regenerate the CHECK lines
(cherry picked from commit 3196005)
1 parent c2a5703 commit 1c7c16e

File tree

1 file changed

+279
-45
lines changed

1 file changed

+279
-45
lines changed

llvm/test/CodeGen/PowerPC/crsave.ll

Lines changed: 279 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,106 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
12
; RUN: llc -O0 -frame-pointer=all -mtriple=powerpc-unknown-linux-gnu -mcpu=g5 < %s | FileCheck %s -check-prefix=PPC32
23
; RUN: llc -O0 -mtriple=powerpc64-unknown-linux-gnu -mcpu=g5 < %s | FileCheck %s -check-prefix=PPC64
34
; RUN: llc -O0 -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s | FileCheck %s -check-prefix=PPC64-ELFv2
45

56
declare void @foo()
67

78
define i32 @test_cr2() nounwind uwtable {
9+
; PPC32-LABEL: test_cr2:
10+
; PPC32: # %bb.0: # %entry
11+
; PPC32-NEXT: mflr 0
12+
; PPC32-NEXT: stwu 1, -32(1)
13+
; PPC32-NEXT: stw 31, 28(1)
14+
; PPC32-NEXT: stw 0, 36(1)
15+
; PPC32-NEXT: .cfi_def_cfa_offset 32
16+
; PPC32-NEXT: .cfi_offset r31, -4
17+
; PPC32-NEXT: .cfi_offset lr, 4
18+
; PPC32-NEXT: mr 31, 1
19+
; PPC32-NEXT: .cfi_def_cfa_register r31
20+
; PPC32-NEXT: mfcr 12
21+
; PPC32-NEXT: stw 12, 24(31)
22+
; PPC32-NEXT: li 3, 1
23+
; PPC32-NEXT: li 4, 2
24+
; PPC32-NEXT: li 5, 3
25+
; PPC32-NEXT: li 6, 0
26+
; PPC32-NEXT: #APP
27+
; PPC32-EMPTY:
28+
; PPC32-NEXT: mtcr 6
29+
; PPC32-NEXT: cmpw 2, 4, 3
30+
; PPC32-NEXT: mfcr 3
31+
; PPC32-NEXT: #NO_APP
32+
; PPC32-NEXT: stw 3, 20(31)
33+
; PPC32-NEXT: bl foo
34+
; PPC32-NEXT: lwz 3, 20(31)
35+
; PPC32-NEXT: lwz 12, 24(31)
36+
; PPC32-NEXT: mtocrf 32, 12
37+
; PPC32-NEXT: lwz 0, 36(1)
38+
; PPC32-NEXT: lwz 31, 28(1)
39+
; PPC32-NEXT: addi 1, 1, 32
40+
; PPC32-NEXT: mtlr 0
41+
; PPC32-NEXT: blr
42+
;
43+
; PPC64-LABEL: test_cr2:
44+
; PPC64: # %bb.0: # %entry
45+
; PPC64-NEXT: mflr 0
46+
; PPC64-NEXT: mfcr 12
47+
; PPC64-NEXT: stw 12, 8(1)
48+
; PPC64-NEXT: stdu 1, -128(1)
49+
; PPC64-NEXT: std 0, 144(1)
50+
; PPC64-NEXT: .cfi_def_cfa_offset 128
51+
; PPC64-NEXT: .cfi_offset lr, 16
52+
; PPC64-NEXT: .cfi_offset cr2, 8
53+
; PPC64-NEXT: li 3, 1
54+
; PPC64-NEXT: li 4, 2
55+
; PPC64-NEXT: li 5, 3
56+
; PPC64-NEXT: li 6, 0
57+
; PPC64-NEXT: #APP
58+
; PPC64-EMPTY:
59+
; PPC64-NEXT: mtcr 6
60+
; PPC64-NEXT: cmpw 2, 4, 3
61+
; PPC64-NEXT: mfcr 3
62+
; PPC64-NEXT: #NO_APP
63+
; PPC64-NEXT: stw 3, 124(1)
64+
; PPC64-NEXT: bl foo
65+
; PPC64-NEXT: nop
66+
; PPC64-NEXT: lwz 3, 124(1)
67+
; PPC64-NEXT: addi 1, 1, 128
68+
; PPC64-NEXT: ld 0, 16(1)
69+
; PPC64-NEXT: lwz 12, 8(1)
70+
; PPC64-NEXT: mtocrf 32, 12
71+
; PPC64-NEXT: mtlr 0
72+
; PPC64-NEXT: blr
73+
;
74+
; PPC64-ELFv2-LABEL: test_cr2:
75+
; PPC64-ELFv2: # %bb.0: # %entry
76+
; PPC64-ELFv2-NEXT: mflr 0
77+
; PPC64-ELFv2-NEXT: mfocrf 12, 32
78+
; PPC64-ELFv2-NEXT: stw 12, 8(1)
79+
; PPC64-ELFv2-NEXT: stdu 1, -112(1)
80+
; PPC64-ELFv2-NEXT: std 0, 128(1)
81+
; PPC64-ELFv2-NEXT: .cfi_def_cfa_offset 112
82+
; PPC64-ELFv2-NEXT: .cfi_offset lr, 16
83+
; PPC64-ELFv2-NEXT: .cfi_offset cr2, 8
84+
; PPC64-ELFv2-NEXT: li 3, 1
85+
; PPC64-ELFv2-NEXT: li 4, 2
86+
; PPC64-ELFv2-NEXT: li 5, 3
87+
; PPC64-ELFv2-NEXT: li 6, 0
88+
; PPC64-ELFv2-NEXT: #APP
89+
; PPC64-ELFv2-EMPTY:
90+
; PPC64-ELFv2-NEXT: mtcr 6
91+
; PPC64-ELFv2-NEXT: cmpw 2, 4, 3
92+
; PPC64-ELFv2-NEXT: mfcr 3
93+
; PPC64-ELFv2-NEXT: #NO_APP
94+
; PPC64-ELFv2-NEXT: stw 3, 108(1)
95+
; PPC64-ELFv2-NEXT: bl foo
96+
; PPC64-ELFv2-NEXT: nop
97+
; PPC64-ELFv2-NEXT: lwz 3, 108(1)
98+
; PPC64-ELFv2-NEXT: addi 1, 1, 112
99+
; PPC64-ELFv2-NEXT: ld 0, 16(1)
100+
; PPC64-ELFv2-NEXT: lwz 12, 8(1)
101+
; PPC64-ELFv2-NEXT: mtocrf 32, 12
102+
; PPC64-ELFv2-NEXT: mtlr 0
103+
; PPC64-ELFv2-NEXT: blr
8104
entry:
9105
%ret = alloca i32, align 4
10106
%0 = call i32 asm sideeffect "\0A\09mtcr $4\0A\09cmpw 2,$2,$1\0A\09mfcr $0", "=r,r,r,r,r,~{cr2}"(i32 1, i32 2, i32 3, i32 0) nounwind
@@ -14,27 +110,104 @@ entry:
14110
ret i32 %1
15111
}
16112

17-
; PPC32-LABEL: test_cr2:
18-
; PPC32: stwu 1, -32(1)
19-
; PPC32: stw 31, 28(1)
20-
; PPC32: mfcr 12
21-
; PPC32-NEXT: stw 12, 24(31)
22-
; PPC32: lwz 12, 24(31)
23-
; PPC32-NEXT: mtocrf 32, 12
24-
25-
; PPC64: .cfi_startproc
26-
; PPC64: mfcr 12
27-
; PPC64: stw 12, 8(1)
28-
; PPC64: stdu 1, -[[AMT:[0-9]+]](1)
29-
; PPC64: .cfi_def_cfa_offset 128
30-
; PPC64: .cfi_offset lr, 16
31-
; PPC64: .cfi_offset cr2, 8
32-
; PPC64: addi 1, 1, [[AMT]]
33-
; PPC64: lwz 12, 8(1)
34-
; PPC64: mtocrf 32, 12
35-
; PPC64: .cfi_endproc
36-
37113
define i32 @test_cr234() nounwind {
114+
; PPC32-LABEL: test_cr234:
115+
; PPC32: # %bb.0: # %entry
116+
; PPC32-NEXT: mflr 0
117+
; PPC32-NEXT: stwu 1, -32(1)
118+
; PPC32-NEXT: stw 31, 28(1)
119+
; PPC32-NEXT: stw 0, 36(1)
120+
; PPC32-NEXT: mr 31, 1
121+
; PPC32-NEXT: mfcr 12
122+
; PPC32-NEXT: stw 12, 24(31)
123+
; PPC32-NEXT: li 3, 1
124+
; PPC32-NEXT: li 4, 2
125+
; PPC32-NEXT: li 5, 3
126+
; PPC32-NEXT: li 6, 0
127+
; PPC32-NEXT: #APP
128+
; PPC32-EMPTY:
129+
; PPC32-NEXT: mtcr 6
130+
; PPC32-NEXT: cmpw 2, 4, 3
131+
; PPC32-NEXT: cmpw 3, 4, 4
132+
; PPC32-NEXT: cmpw 4, 4, 5
133+
; PPC32-NEXT: mfcr 3
134+
; PPC32-NEXT: #NO_APP
135+
; PPC32-NEXT: stw 3, 20(31)
136+
; PPC32-NEXT: bl foo
137+
; PPC32-NEXT: lwz 3, 20(31)
138+
; PPC32-NEXT: lwz 12, 24(31)
139+
; PPC32-NEXT: mtocrf 32, 12
140+
; PPC32-NEXT: mtocrf 16, 12
141+
; PPC32-NEXT: mtocrf 8, 12
142+
; PPC32-NEXT: lwz 0, 36(1)
143+
; PPC32-NEXT: lwz 31, 28(1)
144+
; PPC32-NEXT: addi 1, 1, 32
145+
; PPC32-NEXT: mtlr 0
146+
; PPC32-NEXT: blr
147+
;
148+
; PPC64-LABEL: test_cr234:
149+
; PPC64: # %bb.0: # %entry
150+
; PPC64-NEXT: mflr 0
151+
; PPC64-NEXT: mfcr 12
152+
; PPC64-NEXT: stw 12, 8(1)
153+
; PPC64-NEXT: stdu 1, -128(1)
154+
; PPC64-NEXT: std 0, 144(1)
155+
; PPC64-NEXT: li 3, 1
156+
; PPC64-NEXT: li 4, 2
157+
; PPC64-NEXT: li 5, 3
158+
; PPC64-NEXT: li 6, 0
159+
; PPC64-NEXT: #APP
160+
; PPC64-EMPTY:
161+
; PPC64-NEXT: mtcr 6
162+
; PPC64-NEXT: cmpw 2, 4, 3
163+
; PPC64-NEXT: cmpw 3, 4, 4
164+
; PPC64-NEXT: cmpw 4, 4, 5
165+
; PPC64-NEXT: mfcr 3
166+
; PPC64-NEXT: #NO_APP
167+
; PPC64-NEXT: stw 3, 124(1)
168+
; PPC64-NEXT: bl foo
169+
; PPC64-NEXT: nop
170+
; PPC64-NEXT: lwz 3, 124(1)
171+
; PPC64-NEXT: addi 1, 1, 128
172+
; PPC64-NEXT: ld 0, 16(1)
173+
; PPC64-NEXT: lwz 12, 8(1)
174+
; PPC64-NEXT: mtocrf 32, 12
175+
; PPC64-NEXT: mtocrf 16, 12
176+
; PPC64-NEXT: mtocrf 8, 12
177+
; PPC64-NEXT: mtlr 0
178+
; PPC64-NEXT: blr
179+
;
180+
; PPC64-ELFv2-LABEL: test_cr234:
181+
; PPC64-ELFv2: # %bb.0: # %entry
182+
; PPC64-ELFv2-NEXT: mflr 0
183+
; PPC64-ELFv2-NEXT: mfcr 12
184+
; PPC64-ELFv2-NEXT: stw 12, 8(1)
185+
; PPC64-ELFv2-NEXT: stdu 1, -112(1)
186+
; PPC64-ELFv2-NEXT: std 0, 128(1)
187+
; PPC64-ELFv2-NEXT: li 3, 1
188+
; PPC64-ELFv2-NEXT: li 4, 2
189+
; PPC64-ELFv2-NEXT: li 5, 3
190+
; PPC64-ELFv2-NEXT: li 6, 0
191+
; PPC64-ELFv2-NEXT: #APP
192+
; PPC64-ELFv2-EMPTY:
193+
; PPC64-ELFv2-NEXT: mtcr 6
194+
; PPC64-ELFv2-NEXT: cmpw 2, 4, 3
195+
; PPC64-ELFv2-NEXT: cmpw 3, 4, 4
196+
; PPC64-ELFv2-NEXT: cmpw 4, 4, 5
197+
; PPC64-ELFv2-NEXT: mfcr 3
198+
; PPC64-ELFv2-NEXT: #NO_APP
199+
; PPC64-ELFv2-NEXT: stw 3, 108(1)
200+
; PPC64-ELFv2-NEXT: bl foo
201+
; PPC64-ELFv2-NEXT: nop
202+
; PPC64-ELFv2-NEXT: lwz 3, 108(1)
203+
; PPC64-ELFv2-NEXT: addi 1, 1, 112
204+
; PPC64-ELFv2-NEXT: ld 0, 16(1)
205+
; PPC64-ELFv2-NEXT: lwz 12, 8(1)
206+
; PPC64-ELFv2-NEXT: mtocrf 32, 12
207+
; PPC64-ELFv2-NEXT: mtocrf 16, 12
208+
; PPC64-ELFv2-NEXT: mtocrf 8, 12
209+
; PPC64-ELFv2-NEXT: mtlr 0
210+
; PPC64-ELFv2-NEXT: blr
38211
entry:
39212
%ret = alloca i32, align 4
40213
%0 = call i32 asm sideeffect "\0A\09mtcr $4\0A\09cmpw 2,$2,$1\0A\09cmpw 3,$2,$2\0A\09cmpw 4,$2,$3\0A\09mfcr $0", "=r,r,r,r,r,~{cr2},~{cr3},~{cr4}"(i32 1, i32 2, i32 3, i32 0) nounwind
@@ -44,41 +217,102 @@ entry:
44217
ret i32 %1
45218
}
46219

47-
; PPC32-LABEL: test_cr234:
48-
; PPC32: stwu 1, -32(1)
49-
; PPC32: stw 31, 28(1)
50-
; PPC32: mfcr 12
51-
; PPC32-NEXT: stw 12, 24(31)
52-
; PPC32: lwz 12, 24(31)
53-
; PPC32-NEXT: mtocrf 32, 12
54-
; PPC32-NEXT: mtocrf 16, 12
55-
; PPC32-NEXT: mtocrf 8, 12
56-
57-
; PPC64: mfcr 12
58-
; PPC64: stw 12, 8(1)
59-
; PPC64: stdu 1, -[[AMT:[0-9]+]](1)
60-
; PPC64: addi 1, 1, [[AMT]]
61-
; PPC64: lwz 12, 8(1)
62-
; PPC64: mtocrf 32, 12
63-
; PPC64: mtocrf 16, 12
64-
; PPC64: mtocrf 8, 12
65-
66220
; Generate mfocrf in prologue when we need to save 1 nonvolatile CR field
67221
define void @cloberOneNvCrField() {
222+
; PPC32-LABEL: cloberOneNvCrField:
223+
; PPC32: # %bb.0: # %entry
224+
; PPC32-NEXT: stwu 1, -32(1)
225+
; PPC32-NEXT: stw 31, 28(1)
226+
; PPC32-NEXT: .cfi_def_cfa_offset 32
227+
; PPC32-NEXT: .cfi_offset r31, -4
228+
; PPC32-NEXT: mr 31, 1
229+
; PPC32-NEXT: .cfi_def_cfa_register r31
230+
; PPC32-NEXT: mfcr 12
231+
; PPC32-NEXT: stw 12, 24(31)
232+
; PPC32-NEXT: #APP
233+
; PPC32-NEXT: # clobbers
234+
; PPC32-NEXT: #NO_APP
235+
; PPC32-NEXT: lwz 12, 24(31)
236+
; PPC32-NEXT: mtocrf 32, 12
237+
; PPC32-NEXT: lwz 31, 28(1)
238+
; PPC32-NEXT: addi 1, 1, 32
239+
; PPC32-NEXT: blr
240+
;
241+
; PPC64-LABEL: cloberOneNvCrField:
242+
; PPC64: # %bb.0: # %entry
243+
; PPC64-NEXT: mfcr 12
244+
; PPC64-NEXT: stw 12, 8(1)
245+
; PPC64-NEXT: #APP
246+
; PPC64-NEXT: # clobbers
247+
; PPC64-NEXT: #NO_APP
248+
; PPC64-NEXT: lwz 12, 8(1)
249+
; PPC64-NEXT: mtocrf 32, 12
250+
; PPC64-NEXT: blr
251+
;
252+
; PPC64-ELFv2-LABEL: cloberOneNvCrField:
253+
; PPC64-ELFv2: # %bb.0: # %entry
254+
; PPC64-ELFv2-NEXT: mfocrf 12, 32
255+
; PPC64-ELFv2-NEXT: stw 12, 8(1)
256+
; PPC64-ELFv2-NEXT: #APP
257+
; PPC64-ELFv2-NEXT: # clobbers
258+
; PPC64-ELFv2-NEXT: #NO_APP
259+
; PPC64-ELFv2-NEXT: lwz 12, 8(1)
260+
; PPC64-ELFv2-NEXT: mtocrf 32, 12
261+
; PPC64-ELFv2-NEXT: blr
68262
entry:
69263
tail call void asm sideeffect "# clobbers", "~{cr2}"()
70264
ret void
71-
72-
; PPC64-ELFv2-LABEL: @cloberOneNvCrField
73-
; PPC64-ELFv2: mfocrf [[REG1:[0-9]+]], 32
74265
}
75266

76267
; Generate mfcr in prologue when we need to save all nonvolatile CR field
77268
define void @cloberAllNvCrField() {
269+
; PPC32-LABEL: cloberAllNvCrField:
270+
; PPC32: # %bb.0: # %entry
271+
; PPC32-NEXT: stwu 1, -32(1)
272+
; PPC32-NEXT: stw 31, 28(1)
273+
; PPC32-NEXT: .cfi_def_cfa_offset 32
274+
; PPC32-NEXT: .cfi_offset r31, -4
275+
; PPC32-NEXT: mr 31, 1
276+
; PPC32-NEXT: .cfi_def_cfa_register r31
277+
; PPC32-NEXT: mfcr 12
278+
; PPC32-NEXT: stw 12, 24(31)
279+
; PPC32-NEXT: #APP
280+
; PPC32-NEXT: # clobbers
281+
; PPC32-NEXT: #NO_APP
282+
; PPC32-NEXT: lwz 12, 24(31)
283+
; PPC32-NEXT: mtocrf 32, 12
284+
; PPC32-NEXT: mtocrf 16, 12
285+
; PPC32-NEXT: mtocrf 8, 12
286+
; PPC32-NEXT: lwz 31, 28(1)
287+
; PPC32-NEXT: addi 1, 1, 32
288+
; PPC32-NEXT: blr
289+
;
290+
; PPC64-LABEL: cloberAllNvCrField:
291+
; PPC64: # %bb.0: # %entry
292+
; PPC64-NEXT: mfcr 12
293+
; PPC64-NEXT: stw 12, 8(1)
294+
; PPC64-NEXT: #APP
295+
; PPC64-NEXT: # clobbers
296+
; PPC64-NEXT: #NO_APP
297+
; PPC64-NEXT: lwz 12, 8(1)
298+
; PPC64-NEXT: mtocrf 32, 12
299+
; PPC64-NEXT: mtocrf 16, 12
300+
; PPC64-NEXT: mtocrf 8, 12
301+
; PPC64-NEXT: blr
302+
;
303+
; PPC64-ELFv2-LABEL: cloberAllNvCrField:
304+
; PPC64-ELFv2: # %bb.0: # %entry
305+
; PPC64-ELFv2-NEXT: mfcr 12
306+
; PPC64-ELFv2-NEXT: stw 12, 8(1)
307+
; PPC64-ELFv2-NEXT: #APP
308+
; PPC64-ELFv2-NEXT: # clobbers
309+
; PPC64-ELFv2-NEXT: #NO_APP
310+
; PPC64-ELFv2-NEXT: lwz 12, 8(1)
311+
; PPC64-ELFv2-NEXT: mtocrf 32, 12
312+
; PPC64-ELFv2-NEXT: mtocrf 16, 12
313+
; PPC64-ELFv2-NEXT: mtocrf 8, 12
314+
; PPC64-ELFv2-NEXT: blr
78315
entry:
79316
tail call void asm sideeffect "# clobbers", "~{cr2},~{cr3},~{cr4}"()
80317
ret void
81-
82-
; PPC64-ELFv2-LABEL: @cloberAllNvCrField
83-
; PPC64-ELFv2: mfcr [[REG1:[0-9]+]]
84318
}

0 commit comments

Comments
 (0)