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
6
5
7
6
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
8
21
entry:
9
22
%0 = call ptr @llvm.frameaddress (i32 0 )
10
23
ret ptr %0
24
+ }
11
25
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
14
44
}
15
45
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
17
61
entry:
18
- %0 = call ptr @llvm.frameaddress (i32 0 )
62
+ %0 = call ptr @llvm.frameaddress (i32 1 )
19
63
ret ptr %0
64
+ }
20
65
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
23
87
}
24
88
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
26
146
entry:
27
147
%x = alloca [100000 x i8 ] ; <ptr> [#uses=1]
28
148
call void @use (ptr %x ) nounwind
29
149
%0 = call ptr @llvm.frameaddress (i32 0 )
30
150
ret ptr %0
151
+ }
31
152
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
36
215
}
37
216
38
217
declare void @use (ptr )
@@ -43,4 +222,3 @@ attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="non-lea
43
222
attributes #1 = { noreturn nounwind }
44
223
attributes #2 = { nounwind readnone }
45
224
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