Skip to content

Commit ce1f946

Browse files
committed
[NFC] Pre-commit case of ppcf128 extractelt soften
1 parent cd1d344 commit ce1f946

File tree

1 file changed

+259
-15
lines changed

1 file changed

+259
-15
lines changed
Lines changed: 259 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,305 @@
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
45

56
; Testing operations in soft-float mode
67
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
750
entry:
851
%a = alloca double, align 8
952
%b = alloca double, align 8
1053
%0 = load double, ptr %a, align 8
1154
%1 = load double, ptr %b, align 8
1255
%add = fadd double %0, %1
1356
ret double %add
14-
15-
; CHECK-LABEL: __adddf3
1657
}
1758

1859
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
19102
entry:
20103
%a = alloca double, align 8
21104
%b = alloca double, align 8
22105
%0 = load double, ptr %a, align 8
23106
%1 = load double, ptr %b, align 8
24107
%mul = fmul double %0, %1
25108
ret double %mul
26-
27-
; CHECK-LABEL: __muldf3
28109
}
29110

30111
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
31154
entry:
32155
%a = alloca double, align 8
33156
%b = alloca double, align 8
34157
%0 = load double, ptr %a, align 8
35158
%1 = load double, ptr %b, align 8
36159
%sub = fsub double %0, %1
37160
ret double %sub
38-
39-
; CHECK-LABEL: __subdf3
40161
}
41162

42163
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
43206
entry:
44207
%a = alloca double, align 8
45208
%b = alloca double, align 8
46209
%0 = load double, ptr %a, align 8
47210
%1 = load double, ptr %b, align 8
48211
%div = fdiv double %0, %1
49212
ret double %div
50-
51-
; CHECK-LABEL: __divdf3
52213
}
53214

54215
; Function Attrs: noinline nounwind optnone uwtable
55216
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
56303
%3 = alloca double, align 8
57304
%4 = alloca double, align 8
58305
store double %0, ptr %3, align 8
@@ -63,13 +310,10 @@ define dso_local zeroext i32 @func(double noundef %0, double noundef %1) #0 {
63310
%8 = call double @llvm.fmuladd.f64(double %7, double 0x41F0000000000000, double %5)
64311
%9 = fptoui double %8 to i32
65312
ret i32 %9
66-
67-
; CHECK-LABEL: __muldf3
68-
; CHECK-LABEL: __adddf3
69313
}
70314

71315
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
72316
declare double @llvm.fmuladd.f64(double, double, double) #1
73317

74-
attributes #0 = {"use-soft-float"="true" }
318+
attributes #0 = {"use-soft-float"="true" nounwind }
75319
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

0 commit comments

Comments
 (0)