1
- ; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -O0 < %s | FileCheck %s
2
- ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O0 < %s | FileCheck %s
3
- ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O0 < %s | FileCheck %s
1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2
+ ; RUN: llc -mtriple=powerpc-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC
3
+ ; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC64
4
+ ; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -O0 < %s | FileCheck %s --check-prefix=PPC64LE
4
5
5
6
; Testing operations in soft-float mode
6
7
define double @foo () #0 {
8
+ ; PPC-LABEL: foo:
9
+ ; PPC: # %bb.0: # %entry
10
+ ; PPC-NEXT: mflr 0
11
+ ; PPC-NEXT: stwu 1, -32(1)
12
+ ; PPC-NEXT: stw 0, 36(1)
13
+ ; PPC-NEXT: lwz 3, 24(1)
14
+ ; PPC-NEXT: lwz 4, 28(1)
15
+ ; PPC-NEXT: lwz 5, 16(1)
16
+ ; PPC-NEXT: lwz 6, 20(1)
17
+ ; PPC-NEXT: bl __adddf3
18
+ ; PPC-NEXT: lwz 0, 36(1)
19
+ ; PPC-NEXT: addi 1, 1, 32
20
+ ; PPC-NEXT: mtlr 0
21
+ ; PPC-NEXT: blr
22
+ ;
23
+ ; PPC64-LABEL: foo:
24
+ ; PPC64: # %bb.0: # %entry
25
+ ; PPC64-NEXT: mflr 0
26
+ ; PPC64-NEXT: stdu 1, -128(1)
27
+ ; PPC64-NEXT: std 0, 144(1)
28
+ ; PPC64-NEXT: ld 3, 120(1)
29
+ ; PPC64-NEXT: ld 4, 112(1)
30
+ ; PPC64-NEXT: bl __adddf3
31
+ ; PPC64-NEXT: nop
32
+ ; PPC64-NEXT: addi 1, 1, 128
33
+ ; PPC64-NEXT: ld 0, 16(1)
34
+ ; PPC64-NEXT: mtlr 0
35
+ ; PPC64-NEXT: blr
36
+ ;
37
+ ; PPC64LE-LABEL: foo:
38
+ ; PPC64LE: # %bb.0: # %entry
39
+ ; PPC64LE-NEXT: mflr 0
40
+ ; PPC64LE-NEXT: stdu 1, -48(1)
41
+ ; PPC64LE-NEXT: std 0, 64(1)
42
+ ; PPC64LE-NEXT: ld 3, 40(1)
43
+ ; PPC64LE-NEXT: ld 4, 32(1)
44
+ ; PPC64LE-NEXT: bl __adddf3
45
+ ; PPC64LE-NEXT: nop
46
+ ; PPC64LE-NEXT: addi 1, 1, 48
47
+ ; PPC64LE-NEXT: ld 0, 16(1)
48
+ ; PPC64LE-NEXT: mtlr 0
49
+ ; PPC64LE-NEXT: blr
7
50
entry:
8
51
%a = alloca double , align 8
9
52
%b = alloca double , align 8
10
53
%0 = load double , ptr %a , align 8
11
54
%1 = load double , ptr %b , align 8
12
55
%add = fadd double %0 , %1
13
56
ret double %add
14
-
15
- ; CHECK-LABEL: __adddf3
16
57
}
17
58
18
59
define double @foo1 () #0 {
60
+ ; PPC-LABEL: foo1:
61
+ ; PPC: # %bb.0: # %entry
62
+ ; PPC-NEXT: mflr 0
63
+ ; PPC-NEXT: stwu 1, -32(1)
64
+ ; PPC-NEXT: stw 0, 36(1)
65
+ ; PPC-NEXT: lwz 3, 24(1)
66
+ ; PPC-NEXT: lwz 4, 28(1)
67
+ ; PPC-NEXT: lwz 5, 16(1)
68
+ ; PPC-NEXT: lwz 6, 20(1)
69
+ ; PPC-NEXT: bl __muldf3
70
+ ; PPC-NEXT: lwz 0, 36(1)
71
+ ; PPC-NEXT: addi 1, 1, 32
72
+ ; PPC-NEXT: mtlr 0
73
+ ; PPC-NEXT: blr
74
+ ;
75
+ ; PPC64-LABEL: foo1:
76
+ ; PPC64: # %bb.0: # %entry
77
+ ; PPC64-NEXT: mflr 0
78
+ ; PPC64-NEXT: stdu 1, -128(1)
79
+ ; PPC64-NEXT: std 0, 144(1)
80
+ ; PPC64-NEXT: ld 3, 120(1)
81
+ ; PPC64-NEXT: ld 4, 112(1)
82
+ ; PPC64-NEXT: bl __muldf3
83
+ ; PPC64-NEXT: nop
84
+ ; PPC64-NEXT: addi 1, 1, 128
85
+ ; PPC64-NEXT: ld 0, 16(1)
86
+ ; PPC64-NEXT: mtlr 0
87
+ ; PPC64-NEXT: blr
88
+ ;
89
+ ; PPC64LE-LABEL: foo1:
90
+ ; PPC64LE: # %bb.0: # %entry
91
+ ; PPC64LE-NEXT: mflr 0
92
+ ; PPC64LE-NEXT: stdu 1, -48(1)
93
+ ; PPC64LE-NEXT: std 0, 64(1)
94
+ ; PPC64LE-NEXT: ld 3, 40(1)
95
+ ; PPC64LE-NEXT: ld 4, 32(1)
96
+ ; PPC64LE-NEXT: bl __muldf3
97
+ ; PPC64LE-NEXT: nop
98
+ ; PPC64LE-NEXT: addi 1, 1, 48
99
+ ; PPC64LE-NEXT: ld 0, 16(1)
100
+ ; PPC64LE-NEXT: mtlr 0
101
+ ; PPC64LE-NEXT: blr
19
102
entry:
20
103
%a = alloca double , align 8
21
104
%b = alloca double , align 8
22
105
%0 = load double , ptr %a , align 8
23
106
%1 = load double , ptr %b , align 8
24
107
%mul = fmul double %0 , %1
25
108
ret double %mul
26
-
27
- ; CHECK-LABEL: __muldf3
28
109
}
29
110
30
111
define double @foo2 () #0 {
112
+ ; PPC-LABEL: foo2:
113
+ ; PPC: # %bb.0: # %entry
114
+ ; PPC-NEXT: mflr 0
115
+ ; PPC-NEXT: stwu 1, -32(1)
116
+ ; PPC-NEXT: stw 0, 36(1)
117
+ ; PPC-NEXT: lwz 3, 24(1)
118
+ ; PPC-NEXT: lwz 4, 28(1)
119
+ ; PPC-NEXT: lwz 5, 16(1)
120
+ ; PPC-NEXT: lwz 6, 20(1)
121
+ ; PPC-NEXT: bl __subdf3
122
+ ; PPC-NEXT: lwz 0, 36(1)
123
+ ; PPC-NEXT: addi 1, 1, 32
124
+ ; PPC-NEXT: mtlr 0
125
+ ; PPC-NEXT: blr
126
+ ;
127
+ ; PPC64-LABEL: foo2:
128
+ ; PPC64: # %bb.0: # %entry
129
+ ; PPC64-NEXT: mflr 0
130
+ ; PPC64-NEXT: stdu 1, -128(1)
131
+ ; PPC64-NEXT: std 0, 144(1)
132
+ ; PPC64-NEXT: ld 3, 120(1)
133
+ ; PPC64-NEXT: ld 4, 112(1)
134
+ ; PPC64-NEXT: bl __subdf3
135
+ ; PPC64-NEXT: nop
136
+ ; PPC64-NEXT: addi 1, 1, 128
137
+ ; PPC64-NEXT: ld 0, 16(1)
138
+ ; PPC64-NEXT: mtlr 0
139
+ ; PPC64-NEXT: blr
140
+ ;
141
+ ; PPC64LE-LABEL: foo2:
142
+ ; PPC64LE: # %bb.0: # %entry
143
+ ; PPC64LE-NEXT: mflr 0
144
+ ; PPC64LE-NEXT: stdu 1, -48(1)
145
+ ; PPC64LE-NEXT: std 0, 64(1)
146
+ ; PPC64LE-NEXT: ld 3, 40(1)
147
+ ; PPC64LE-NEXT: ld 4, 32(1)
148
+ ; PPC64LE-NEXT: bl __subdf3
149
+ ; PPC64LE-NEXT: nop
150
+ ; PPC64LE-NEXT: addi 1, 1, 48
151
+ ; PPC64LE-NEXT: ld 0, 16(1)
152
+ ; PPC64LE-NEXT: mtlr 0
153
+ ; PPC64LE-NEXT: blr
31
154
entry:
32
155
%a = alloca double , align 8
33
156
%b = alloca double , align 8
34
157
%0 = load double , ptr %a , align 8
35
158
%1 = load double , ptr %b , align 8
36
159
%sub = fsub double %0 , %1
37
160
ret double %sub
38
-
39
- ; CHECK-LABEL: __subdf3
40
161
}
41
162
42
163
define double @foo3 () #0 {
164
+ ; PPC-LABEL: foo3:
165
+ ; PPC: # %bb.0: # %entry
166
+ ; PPC-NEXT: mflr 0
167
+ ; PPC-NEXT: stwu 1, -32(1)
168
+ ; PPC-NEXT: stw 0, 36(1)
169
+ ; PPC-NEXT: lwz 3, 24(1)
170
+ ; PPC-NEXT: lwz 4, 28(1)
171
+ ; PPC-NEXT: lwz 5, 16(1)
172
+ ; PPC-NEXT: lwz 6, 20(1)
173
+ ; PPC-NEXT: bl __divdf3
174
+ ; PPC-NEXT: lwz 0, 36(1)
175
+ ; PPC-NEXT: addi 1, 1, 32
176
+ ; PPC-NEXT: mtlr 0
177
+ ; PPC-NEXT: blr
178
+ ;
179
+ ; PPC64-LABEL: foo3:
180
+ ; PPC64: # %bb.0: # %entry
181
+ ; PPC64-NEXT: mflr 0
182
+ ; PPC64-NEXT: stdu 1, -128(1)
183
+ ; PPC64-NEXT: std 0, 144(1)
184
+ ; PPC64-NEXT: ld 3, 120(1)
185
+ ; PPC64-NEXT: ld 4, 112(1)
186
+ ; PPC64-NEXT: bl __divdf3
187
+ ; PPC64-NEXT: nop
188
+ ; PPC64-NEXT: addi 1, 1, 128
189
+ ; PPC64-NEXT: ld 0, 16(1)
190
+ ; PPC64-NEXT: mtlr 0
191
+ ; PPC64-NEXT: blr
192
+ ;
193
+ ; PPC64LE-LABEL: foo3:
194
+ ; PPC64LE: # %bb.0: # %entry
195
+ ; PPC64LE-NEXT: mflr 0
196
+ ; PPC64LE-NEXT: stdu 1, -48(1)
197
+ ; PPC64LE-NEXT: std 0, 64(1)
198
+ ; PPC64LE-NEXT: ld 3, 40(1)
199
+ ; PPC64LE-NEXT: ld 4, 32(1)
200
+ ; PPC64LE-NEXT: bl __divdf3
201
+ ; PPC64LE-NEXT: nop
202
+ ; PPC64LE-NEXT: addi 1, 1, 48
203
+ ; PPC64LE-NEXT: ld 0, 16(1)
204
+ ; PPC64LE-NEXT: mtlr 0
205
+ ; PPC64LE-NEXT: blr
43
206
entry:
44
207
%a = alloca double , align 8
45
208
%b = alloca double , align 8
46
209
%0 = load double , ptr %a , align 8
47
210
%1 = load double , ptr %b , align 8
48
211
%div = fdiv double %0 , %1
49
212
ret double %div
50
-
51
- ; CHECK-LABEL: __divdf3
52
213
}
53
214
54
215
; Function Attrs: noinline nounwind optnone uwtable
55
216
define dso_local zeroext i32 @func (double noundef %0 , double noundef %1 ) #0 {
217
+ ; PPC-LABEL: func:
218
+ ; PPC: # %bb.0:
219
+ ; PPC-NEXT: mflr 0
220
+ ; PPC-NEXT: stwu 1, -32(1)
221
+ ; PPC-NEXT: stw 0, 36(1)
222
+ ; PPC-NEXT: # kill: def $r7 killed $r6
223
+ ; PPC-NEXT: # kill: def $r7 killed $r5
224
+ ; PPC-NEXT: # kill: def $r7 killed $r4
225
+ ; PPC-NEXT: # kill: def $r7 killed $r3
226
+ ; PPC-NEXT: stw 4, 28(1)
227
+ ; PPC-NEXT: stw 3, 24(1)
228
+ ; PPC-NEXT: stw 6, 20(1)
229
+ ; PPC-NEXT: stw 5, 16(1)
230
+ ; PPC-NEXT: lwz 3, 24(1)
231
+ ; PPC-NEXT: stw 3, 8(1) # 4-byte Folded Spill
232
+ ; PPC-NEXT: lwz 3, 28(1)
233
+ ; PPC-NEXT: stw 3, 12(1) # 4-byte Folded Spill
234
+ ; PPC-NEXT: lwz 3, 16(1)
235
+ ; PPC-NEXT: lwz 4, 20(1)
236
+ ; PPC-NEXT: lis 5, -15888
237
+ ; PPC-NEXT: li 6, 0
238
+ ; PPC-NEXT: bl __muldf3
239
+ ; PPC-NEXT: mr 5, 3
240
+ ; PPC-NEXT: lwz 3, 8(1) # 4-byte Folded Reload
241
+ ; PPC-NEXT: mr 6, 4
242
+ ; PPC-NEXT: lwz 4, 12(1) # 4-byte Folded Reload
243
+ ; PPC-NEXT: bl __adddf3
244
+ ; PPC-NEXT: bl __fixunsdfsi
245
+ ; PPC-NEXT: lwz 0, 36(1)
246
+ ; PPC-NEXT: addi 1, 1, 32
247
+ ; PPC-NEXT: mtlr 0
248
+ ; PPC-NEXT: blr
249
+ ;
250
+ ; PPC64-LABEL: func:
251
+ ; PPC64: # %bb.0:
252
+ ; PPC64-NEXT: mflr 0
253
+ ; PPC64-NEXT: stdu 1, -144(1)
254
+ ; PPC64-NEXT: std 0, 160(1)
255
+ ; PPC64-NEXT: std 3, 136(1)
256
+ ; PPC64-NEXT: std 4, 128(1)
257
+ ; PPC64-NEXT: ld 3, 136(1)
258
+ ; PPC64-NEXT: std 3, 120(1) # 8-byte Folded Spill
259
+ ; PPC64-NEXT: ld 3, 128(1)
260
+ ; PPC64-NEXT: li 4, 3103
261
+ ; PPC64-NEXT: rldic 4, 4, 52, 0
262
+ ; PPC64-NEXT: bl __muldf3
263
+ ; PPC64-NEXT: nop
264
+ ; PPC64-NEXT: mr 4, 3
265
+ ; PPC64-NEXT: ld 3, 120(1) # 8-byte Folded Reload
266
+ ; PPC64-NEXT: bl __adddf3
267
+ ; PPC64-NEXT: nop
268
+ ; PPC64-NEXT: bl __fixunsdfsi
269
+ ; PPC64-NEXT: nop
270
+ ; PPC64-NEXT: # kill: def $r3 killed $r3 killed $x3
271
+ ; PPC64-NEXT: clrldi 3, 3, 32
272
+ ; PPC64-NEXT: addi 1, 1, 144
273
+ ; PPC64-NEXT: ld 0, 16(1)
274
+ ; PPC64-NEXT: mtlr 0
275
+ ; PPC64-NEXT: blr
276
+ ;
277
+ ; PPC64LE-LABEL: func:
278
+ ; PPC64LE: # %bb.0:
279
+ ; PPC64LE-NEXT: mflr 0
280
+ ; PPC64LE-NEXT: stdu 1, -64(1)
281
+ ; PPC64LE-NEXT: std 0, 80(1)
282
+ ; PPC64LE-NEXT: std 3, 56(1)
283
+ ; PPC64LE-NEXT: std 4, 48(1)
284
+ ; PPC64LE-NEXT: ld 3, 56(1)
285
+ ; PPC64LE-NEXT: std 3, 40(1) # 8-byte Folded Spill
286
+ ; PPC64LE-NEXT: ld 3, 48(1)
287
+ ; PPC64LE-NEXT: li 4, 3103
288
+ ; PPC64LE-NEXT: rldic 4, 4, 52, 0
289
+ ; PPC64LE-NEXT: bl __muldf3
290
+ ; PPC64LE-NEXT: nop
291
+ ; PPC64LE-NEXT: mr 4, 3
292
+ ; PPC64LE-NEXT: ld 3, 40(1) # 8-byte Folded Reload
293
+ ; PPC64LE-NEXT: bl __adddf3
294
+ ; PPC64LE-NEXT: nop
295
+ ; PPC64LE-NEXT: bl __fixunsdfsi
296
+ ; PPC64LE-NEXT: nop
297
+ ; PPC64LE-NEXT: # kill: def $r3 killed $r3 killed $x3
298
+ ; PPC64LE-NEXT: clrldi 3, 3, 32
299
+ ; PPC64LE-NEXT: addi 1, 1, 64
300
+ ; PPC64LE-NEXT: ld 0, 16(1)
301
+ ; PPC64LE-NEXT: mtlr 0
302
+ ; PPC64LE-NEXT: blr
56
303
%3 = alloca double , align 8
57
304
%4 = alloca double , align 8
58
305
store double %0 , ptr %3 , align 8
@@ -63,13 +310,10 @@ define dso_local zeroext i32 @func(double noundef %0, double noundef %1) #0 {
63
310
%8 = call double @llvm.fmuladd.f64 (double %7 , double 0x41F0000000000000 , double %5 )
64
311
%9 = fptoui double %8 to i32
65
312
ret i32 %9
66
-
67
- ; CHECK-LABEL: __muldf3
68
- ; CHECK-LABEL: __adddf3
69
313
}
70
314
71
315
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
72
316
declare double @llvm.fmuladd.f64 (double , double , double ) #1
73
317
74
- attributes #0 = {"use-soft-float" ="true" }
318
+ attributes #0 = {"use-soft-float" ="true" nounwind }
75
319
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
0 commit comments