Skip to content

Commit 0749b01

Browse files
author
Chen Zheng
committed
[PowerPC] modify the frameaddress case, NFC
1 parent 8f11649 commit 0749b01

File tree

1 file changed

+195
-17
lines changed

1 file changed

+195
-17
lines changed

llvm/test/CodeGen/PowerPC/frameaddr.ll

Lines changed: 195 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,217 @@
1-
; RUN: llc -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s
2-
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
3-
target triple = "powerpc64-unknown-linux-gnu"
4-
5-
declare void @llvm.eh.sjlj.longjmp(ptr) #1
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX32
3+
; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX64
4+
; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=LE
65

76
define ptr @main() #0 {
7+
; AIX32-LABEL: main:
8+
; AIX32: # %bb.0: # %entry
9+
; AIX32-NEXT: mr 3, 1
10+
; AIX32-NEXT: blr
11+
;
12+
; AIX64-LABEL: main:
13+
; AIX64: # %bb.0: # %entry
14+
; AIX64-NEXT: mr 3, 1
15+
; AIX64-NEXT: blr
16+
;
17+
; LE-LABEL: main:
18+
; LE: # %bb.0: # %entry
19+
; LE-NEXT: mr 3, 1
20+
; LE-NEXT: blr
821
entry:
922
%0 = call ptr @llvm.frameaddress(i32 0)
1023
ret ptr %0
24+
}
1125

12-
; CHECK: @main
13-
; CHECK: mr 3, 1
26+
define ptr @foo_naked() #3 { ; naked
27+
; AIX32-LABEL: foo_naked:
28+
; AIX32: # %bb.0: # %entry
29+
; AIX32-NEXT: lwz 3, 0(1)
30+
; AIX32-NEXT: blr
31+
;
32+
; AIX64-LABEL: foo_naked:
33+
; AIX64: # %bb.0: # %entry
34+
; AIX64-NEXT: ld 3, 0(1)
35+
; AIX64-NEXT: blr
36+
;
37+
; LE-LABEL: foo_naked:
38+
; LE: # %bb.0: # %entry
39+
; LE-NEXT: ld 3, 0(1)
40+
; LE-NEXT: blr
41+
entry:
42+
%0 = call ptr @llvm.frameaddress(i32 1)
43+
ret ptr %0
1444
}
1545

16-
define ptr @foo() #3 { ; naked
46+
define ptr @foo1() #0 {
47+
; AIX32-LABEL: foo1:
48+
; AIX32: # %bb.0: # %entry
49+
; AIX32-NEXT: lwz 3, 0(1)
50+
; AIX32-NEXT: blr
51+
;
52+
; AIX64-LABEL: foo1:
53+
; AIX64: # %bb.0: # %entry
54+
; AIX64-NEXT: ld 3, 0(1)
55+
; AIX64-NEXT: blr
56+
;
57+
; LE-LABEL: foo1:
58+
; LE: # %bb.0: # %entry
59+
; LE-NEXT: ld 3, 0(1)
60+
; LE-NEXT: blr
1761
entry:
18-
%0 = call ptr @llvm.frameaddress(i32 0)
62+
%0 = call ptr @llvm.frameaddress(i32 1)
1963
ret ptr %0
64+
}
2065

21-
; CHECK: @foo
22-
; CHECK: mr 3, 1
66+
define ptr @foo2() #0 {
67+
; AIX32-LABEL: foo2:
68+
; AIX32: # %bb.0: # %entry
69+
; AIX32-NEXT: lwz 3, 0(1)
70+
; AIX32-NEXT: lwz 3, 0(3)
71+
; AIX32-NEXT: blr
72+
;
73+
; AIX64-LABEL: foo2:
74+
; AIX64: # %bb.0: # %entry
75+
; AIX64-NEXT: ld 3, 0(1)
76+
; AIX64-NEXT: ld 3, 0(3)
77+
; AIX64-NEXT: blr
78+
;
79+
; LE-LABEL: foo2:
80+
; LE: # %bb.0: # %entry
81+
; LE-NEXT: ld 3, 0(1)
82+
; LE-NEXT: ld 3, 0(3)
83+
; LE-NEXT: blr
84+
entry:
85+
%0 = call ptr @llvm.frameaddress(i32 2)
86+
ret ptr %0
2387
}
2488

25-
define ptr @bar() #0 {
89+
define ptr @bar0() #0 {
90+
; AIX32-LABEL: bar0:
91+
; AIX32: # %bb.0: # %entry
92+
; AIX32-NEXT: mflr 0
93+
; AIX32-NEXT: stw 31, -4(1)
94+
; AIX32-NEXT: stw 0, 8(1)
95+
; AIX32-NEXT: lis 0, -2
96+
; AIX32-NEXT: ori 0, 0, 31008
97+
; AIX32-NEXT: stwux 1, 1, 0
98+
; AIX32-NEXT: mr 31, 1
99+
; AIX32-NEXT: addi 3, 31, 60
100+
; AIX32-NEXT: bl .use[PR]
101+
; AIX32-NEXT: nop
102+
; AIX32-NEXT: mr 3, 31
103+
; AIX32-NEXT: lwz 1, 0(1)
104+
; AIX32-NEXT: lwz 0, 8(1)
105+
; AIX32-NEXT: lwz 31, -4(1)
106+
; AIX32-NEXT: mtlr 0
107+
; AIX32-NEXT: blr
108+
;
109+
; AIX64-LABEL: bar0:
110+
; AIX64: # %bb.0: # %entry
111+
; AIX64-NEXT: mflr 0
112+
; AIX64-NEXT: std 31, -8(1)
113+
; AIX64-NEXT: std 0, 16(1)
114+
; AIX64-NEXT: lis 0, -2
115+
; AIX64-NEXT: ori 0, 0, 30944
116+
; AIX64-NEXT: stdux 1, 1, 0
117+
; AIX64-NEXT: mr 31, 1
118+
; AIX64-NEXT: addi 3, 31, 120
119+
; AIX64-NEXT: bl .use[PR]
120+
; AIX64-NEXT: nop
121+
; AIX64-NEXT: mr 3, 31
122+
; AIX64-NEXT: ld 1, 0(1)
123+
; AIX64-NEXT: ld 0, 16(1)
124+
; AIX64-NEXT: ld 31, -8(1)
125+
; AIX64-NEXT: mtlr 0
126+
; AIX64-NEXT: blr
127+
;
128+
; LE-LABEL: bar0:
129+
; LE: # %bb.0: # %entry
130+
; LE-NEXT: mflr 0
131+
; LE-NEXT: std 31, -8(1)
132+
; LE-NEXT: std 0, 16(1)
133+
; LE-NEXT: lis 0, -2
134+
; LE-NEXT: ori 0, 0, 31024
135+
; LE-NEXT: stdux 1, 1, 0
136+
; LE-NEXT: mr 31, 1
137+
; LE-NEXT: addi 3, 31, 40
138+
; LE-NEXT: bl use
139+
; LE-NEXT: nop
140+
; LE-NEXT: mr 3, 31
141+
; LE-NEXT: ld 1, 0(1)
142+
; LE-NEXT: ld 0, 16(1)
143+
; LE-NEXT: ld 31, -8(1)
144+
; LE-NEXT: mtlr 0
145+
; LE-NEXT: blr
26146
entry:
27147
%x = alloca [100000 x i8] ; <ptr> [#uses=1]
28148
call void @use(ptr %x) nounwind
29149
%0 = call ptr @llvm.frameaddress(i32 0)
30150
ret ptr %0
151+
}
31152

32-
; Note that if we start eliminating non-leaf frame pointers by default, this
33-
; will need to be updated.
34-
; CHECK: @bar
35-
; CHECK: mr 3, 31
153+
define ptr @bar1() #0 {
154+
; AIX32-LABEL: bar1:
155+
; AIX32: # %bb.0: # %entry
156+
; AIX32-NEXT: mflr 0
157+
; AIX32-NEXT: stw 31, -4(1)
158+
; AIX32-NEXT: stw 0, 8(1)
159+
; AIX32-NEXT: lis 0, -2
160+
; AIX32-NEXT: ori 0, 0, 31008
161+
; AIX32-NEXT: stwux 1, 1, 0
162+
; AIX32-NEXT: mr 31, 1
163+
; AIX32-NEXT: addi 3, 31, 60
164+
; AIX32-NEXT: bl .use[PR]
165+
; AIX32-NEXT: nop
166+
; AIX32-NEXT: lwz 3, 0(31)
167+
; AIX32-NEXT: lwz 1, 0(1)
168+
; AIX32-NEXT: lwz 0, 8(1)
169+
; AIX32-NEXT: lwz 31, -4(1)
170+
; AIX32-NEXT: mtlr 0
171+
; AIX32-NEXT: blr
172+
;
173+
; AIX64-LABEL: bar1:
174+
; AIX64: # %bb.0: # %entry
175+
; AIX64-NEXT: mflr 0
176+
; AIX64-NEXT: std 31, -8(1)
177+
; AIX64-NEXT: std 0, 16(1)
178+
; AIX64-NEXT: lis 0, -2
179+
; AIX64-NEXT: ori 0, 0, 30944
180+
; AIX64-NEXT: stdux 1, 1, 0
181+
; AIX64-NEXT: mr 31, 1
182+
; AIX64-NEXT: addi 3, 31, 120
183+
; AIX64-NEXT: bl .use[PR]
184+
; AIX64-NEXT: nop
185+
; AIX64-NEXT: ld 3, 0(31)
186+
; AIX64-NEXT: ld 1, 0(1)
187+
; AIX64-NEXT: ld 0, 16(1)
188+
; AIX64-NEXT: ld 31, -8(1)
189+
; AIX64-NEXT: mtlr 0
190+
; AIX64-NEXT: blr
191+
;
192+
; LE-LABEL: bar1:
193+
; LE: # %bb.0: # %entry
194+
; LE-NEXT: mflr 0
195+
; LE-NEXT: std 31, -8(1)
196+
; LE-NEXT: std 0, 16(1)
197+
; LE-NEXT: lis 0, -2
198+
; LE-NEXT: ori 0, 0, 31024
199+
; LE-NEXT: stdux 1, 1, 0
200+
; LE-NEXT: mr 31, 1
201+
; LE-NEXT: addi 3, 31, 40
202+
; LE-NEXT: bl use
203+
; LE-NEXT: nop
204+
; LE-NEXT: ld 3, 0(31)
205+
; LE-NEXT: ld 1, 0(1)
206+
; LE-NEXT: ld 0, 16(1)
207+
; LE-NEXT: ld 31, -8(1)
208+
; LE-NEXT: mtlr 0
209+
; LE-NEXT: blr
210+
entry:
211+
%x = alloca [100000 x i8] ; <ptr> [#uses=1]
212+
call void @use(ptr %x) nounwind
213+
%0 = call ptr @llvm.frameaddress(i32 1)
214+
ret ptr %0
36215
}
37216

38217
declare void @use(ptr)
@@ -43,4 +222,3 @@ attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="non-lea
43222
attributes #1 = { noreturn nounwind }
44223
attributes #2 = { nounwind readnone }
45224
attributes #3 = { nounwind naked "less-precise-fpmad"="false" "frame-pointer"="non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
46-

0 commit comments

Comments
 (0)