xref: /llvm-project/llvm/test/CodeGen/PowerPC/scalar-rounding-ops.ll (revision dcc5ba4a4d94e9550ff02239c252f446ab3fdf19)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr7 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
3; RUN:   -mtriple=powerpc64-unknown-unknown -verify-machineinstrs < %s | \
4; RUN:   FileCheck %s --check-prefix=BE
5; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
6; RUN:   -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs < %s | \
7; RUN:   FileCheck %s
8; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
9; RUN:   -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs < %s \
10; RUN:   --enable-unsafe-fp-math | FileCheck %s --check-prefix=FAST
11define dso_local i64 @test_lrint(double %d) local_unnamed_addr {
12; BE-LABEL: test_lrint:
13; BE:       # %bb.0: # %entry
14; BE-NEXT:    mflr r0
15; BE-NEXT:    stdu r1, -112(r1)
16; BE-NEXT:    std r0, 128(r1)
17; BE-NEXT:    .cfi_def_cfa_offset 112
18; BE-NEXT:    .cfi_offset lr, 16
19; BE-NEXT:    bl lrint
20; BE-NEXT:    nop
21; BE-NEXT:    addi r1, r1, 112
22; BE-NEXT:    ld r0, 16(r1)
23; BE-NEXT:    mtlr r0
24; BE-NEXT:    blr
25;
26; CHECK-LABEL: test_lrint:
27; CHECK:       # %bb.0: # %entry
28; CHECK-NEXT:    mflr r0
29; CHECK-NEXT:    stdu r1, -32(r1)
30; CHECK-NEXT:    std r0, 48(r1)
31; CHECK-NEXT:    .cfi_def_cfa_offset 32
32; CHECK-NEXT:    .cfi_offset lr, 16
33; CHECK-NEXT:    bl lrint
34; CHECK-NEXT:    nop
35; CHECK-NEXT:    addi r1, r1, 32
36; CHECK-NEXT:    ld r0, 16(r1)
37; CHECK-NEXT:    mtlr r0
38; CHECK-NEXT:    blr
39;
40; FAST-LABEL: test_lrint:
41; FAST:       # %bb.0: # %entry
42; FAST-NEXT:    fctid f0, f1
43; FAST-NEXT:    mffprd r3, f0
44; FAST-NEXT:    blr
45entry:
46  %0 = tail call i64 @llvm.lrint.i64.f64(double %d)
47  ret i64 %0
48}
49
50declare i64 @llvm.lrint.i64.f64(double)
51
52define dso_local i64 @test_lrintf(float %f) local_unnamed_addr {
53; BE-LABEL: test_lrintf:
54; BE:       # %bb.0: # %entry
55; BE-NEXT:    mflr r0
56; BE-NEXT:    stdu r1, -112(r1)
57; BE-NEXT:    std r0, 128(r1)
58; BE-NEXT:    .cfi_def_cfa_offset 112
59; BE-NEXT:    .cfi_offset lr, 16
60; BE-NEXT:    bl lrintf
61; BE-NEXT:    nop
62; BE-NEXT:    addi r1, r1, 112
63; BE-NEXT:    ld r0, 16(r1)
64; BE-NEXT:    mtlr r0
65; BE-NEXT:    blr
66;
67; CHECK-LABEL: test_lrintf:
68; CHECK:       # %bb.0: # %entry
69; CHECK-NEXT:    mflr r0
70; CHECK-NEXT:    stdu r1, -32(r1)
71; CHECK-NEXT:    std r0, 48(r1)
72; CHECK-NEXT:    .cfi_def_cfa_offset 32
73; CHECK-NEXT:    .cfi_offset lr, 16
74; CHECK-NEXT:    bl lrintf
75; CHECK-NEXT:    nop
76; CHECK-NEXT:    addi r1, r1, 32
77; CHECK-NEXT:    ld r0, 16(r1)
78; CHECK-NEXT:    mtlr r0
79; CHECK-NEXT:    blr
80;
81; FAST-LABEL: test_lrintf:
82; FAST:       # %bb.0: # %entry
83; FAST-NEXT:    fctid f0, f1
84; FAST-NEXT:    mffprd r3, f0
85; FAST-NEXT:    blr
86entry:
87  %0 = tail call i64 @llvm.lrint.i64.f32(float %f)
88  ret i64 %0
89}
90
91declare i64 @llvm.lrint.i64.f32(float)
92
93define dso_local i64 @test_llrint(double %d) local_unnamed_addr {
94; BE-LABEL: test_llrint:
95; BE:       # %bb.0: # %entry
96; BE-NEXT:    mflr r0
97; BE-NEXT:    stdu r1, -112(r1)
98; BE-NEXT:    std r0, 128(r1)
99; BE-NEXT:    .cfi_def_cfa_offset 112
100; BE-NEXT:    .cfi_offset lr, 16
101; BE-NEXT:    bl llrint
102; BE-NEXT:    nop
103; BE-NEXT:    addi r1, r1, 112
104; BE-NEXT:    ld r0, 16(r1)
105; BE-NEXT:    mtlr r0
106; BE-NEXT:    blr
107;
108; CHECK-LABEL: test_llrint:
109; CHECK:       # %bb.0: # %entry
110; CHECK-NEXT:    mflr r0
111; CHECK-NEXT:    stdu r1, -32(r1)
112; CHECK-NEXT:    std r0, 48(r1)
113; CHECK-NEXT:    .cfi_def_cfa_offset 32
114; CHECK-NEXT:    .cfi_offset lr, 16
115; CHECK-NEXT:    bl llrint
116; CHECK-NEXT:    nop
117; CHECK-NEXT:    addi r1, r1, 32
118; CHECK-NEXT:    ld r0, 16(r1)
119; CHECK-NEXT:    mtlr r0
120; CHECK-NEXT:    blr
121;
122; FAST-LABEL: test_llrint:
123; FAST:       # %bb.0: # %entry
124; FAST-NEXT:    fctid f0, f1
125; FAST-NEXT:    mffprd r3, f0
126; FAST-NEXT:    blr
127entry:
128  %0 = tail call i64 @llvm.llrint.i64.f64(double %d)
129  ret i64 %0
130}
131
132declare i64 @llvm.llrint.i64.f64(double)
133
134define dso_local i64 @test_llrintf(float %f) local_unnamed_addr {
135; BE-LABEL: test_llrintf:
136; BE:       # %bb.0: # %entry
137; BE-NEXT:    mflr r0
138; BE-NEXT:    stdu r1, -112(r1)
139; BE-NEXT:    std r0, 128(r1)
140; BE-NEXT:    .cfi_def_cfa_offset 112
141; BE-NEXT:    .cfi_offset lr, 16
142; BE-NEXT:    bl llrintf
143; BE-NEXT:    nop
144; BE-NEXT:    addi r1, r1, 112
145; BE-NEXT:    ld r0, 16(r1)
146; BE-NEXT:    mtlr r0
147; BE-NEXT:    blr
148;
149; CHECK-LABEL: test_llrintf:
150; CHECK:       # %bb.0: # %entry
151; CHECK-NEXT:    mflr r0
152; CHECK-NEXT:    stdu r1, -32(r1)
153; CHECK-NEXT:    std r0, 48(r1)
154; CHECK-NEXT:    .cfi_def_cfa_offset 32
155; CHECK-NEXT:    .cfi_offset lr, 16
156; CHECK-NEXT:    bl llrintf
157; CHECK-NEXT:    nop
158; CHECK-NEXT:    addi r1, r1, 32
159; CHECK-NEXT:    ld r0, 16(r1)
160; CHECK-NEXT:    mtlr r0
161; CHECK-NEXT:    blr
162;
163; FAST-LABEL: test_llrintf:
164; FAST:       # %bb.0: # %entry
165; FAST-NEXT:    fctid f0, f1
166; FAST-NEXT:    mffprd r3, f0
167; FAST-NEXT:    blr
168entry:
169  %0 = tail call i64 @llvm.llrint.i64.f32(float %f)
170  ret i64 %0
171}
172
173declare i64 @llvm.llrint.i64.f32(float)
174
175define dso_local i64 @test_lround(double %d) local_unnamed_addr {
176; BE-LABEL: test_lround:
177; BE:       # %bb.0: # %entry
178; BE-NEXT:    mflr r0
179; BE-NEXT:    stdu r1, -112(r1)
180; BE-NEXT:    std r0, 128(r1)
181; BE-NEXT:    .cfi_def_cfa_offset 112
182; BE-NEXT:    .cfi_offset lr, 16
183; BE-NEXT:    bl lround
184; BE-NEXT:    nop
185; BE-NEXT:    addi r1, r1, 112
186; BE-NEXT:    ld r0, 16(r1)
187; BE-NEXT:    mtlr r0
188; BE-NEXT:    blr
189;
190; CHECK-LABEL: test_lround:
191; CHECK:       # %bb.0: # %entry
192; CHECK-NEXT:    mflr r0
193; CHECK-NEXT:    stdu r1, -32(r1)
194; CHECK-NEXT:    std r0, 48(r1)
195; CHECK-NEXT:    .cfi_def_cfa_offset 32
196; CHECK-NEXT:    .cfi_offset lr, 16
197; CHECK-NEXT:    bl lround
198; CHECK-NEXT:    nop
199; CHECK-NEXT:    addi r1, r1, 32
200; CHECK-NEXT:    ld r0, 16(r1)
201; CHECK-NEXT:    mtlr r0
202; CHECK-NEXT:    blr
203;
204; FAST-LABEL: test_lround:
205; FAST:       # %bb.0: # %entry
206; FAST-NEXT:    xsrdpi f0, f1
207; FAST-NEXT:    fctid f0, f0
208; FAST-NEXT:    mffprd r3, f0
209; FAST-NEXT:    blr
210entry:
211  %0 = tail call i64 @llvm.lround.i64.f64(double %d)
212  ret i64 %0
213}
214
215declare i64 @llvm.lround.i64.f64(double)
216
217define dso_local i32 @test_lroundi32f64(double %d) local_unnamed_addr {
218; BE-LABEL: test_lroundi32f64:
219; BE:       # %bb.0: # %entry
220; BE-NEXT:    mflr r0
221; BE-NEXT:    stdu r1, -112(r1)
222; BE-NEXT:    std r0, 128(r1)
223; BE-NEXT:    .cfi_def_cfa_offset 112
224; BE-NEXT:    .cfi_offset lr, 16
225; BE-NEXT:    bl lround
226; BE-NEXT:    nop
227; BE-NEXT:    addi r1, r1, 112
228; BE-NEXT:    ld r0, 16(r1)
229; BE-NEXT:    mtlr r0
230; BE-NEXT:    blr
231;
232; CHECK-LABEL: test_lroundi32f64:
233; CHECK:       # %bb.0: # %entry
234; CHECK-NEXT:    mflr r0
235; CHECK-NEXT:    stdu r1, -32(r1)
236; CHECK-NEXT:    std r0, 48(r1)
237; CHECK-NEXT:    .cfi_def_cfa_offset 32
238; CHECK-NEXT:    .cfi_offset lr, 16
239; CHECK-NEXT:    bl lround
240; CHECK-NEXT:    nop
241; CHECK-NEXT:    addi r1, r1, 32
242; CHECK-NEXT:    ld r0, 16(r1)
243; CHECK-NEXT:    mtlr r0
244; CHECK-NEXT:    blr
245;
246; FAST-LABEL: test_lroundi32f64:
247; FAST:       # %bb.0: # %entry
248; FAST-NEXT:    xsrdpi f0, f1
249; FAST-NEXT:    fctiw f0, f0
250; FAST-NEXT:    mffprwz r3, f0
251; FAST-NEXT:    blr
252entry:
253  %0 = tail call i32 @llvm.lround.i32.f64(double %d)
254  ret i32 %0
255}
256
257declare i32 @llvm.lround.i32.f64(double)
258
259define dso_local i64 @test_lroundf(float %f) local_unnamed_addr {
260; BE-LABEL: test_lroundf:
261; BE:       # %bb.0: # %entry
262; BE-NEXT:    mflr r0
263; BE-NEXT:    stdu r1, -112(r1)
264; BE-NEXT:    std r0, 128(r1)
265; BE-NEXT:    .cfi_def_cfa_offset 112
266; BE-NEXT:    .cfi_offset lr, 16
267; BE-NEXT:    bl lroundf
268; BE-NEXT:    nop
269; BE-NEXT:    addi r1, r1, 112
270; BE-NEXT:    ld r0, 16(r1)
271; BE-NEXT:    mtlr r0
272; BE-NEXT:    blr
273;
274; CHECK-LABEL: test_lroundf:
275; CHECK:       # %bb.0: # %entry
276; CHECK-NEXT:    mflr r0
277; CHECK-NEXT:    stdu r1, -32(r1)
278; CHECK-NEXT:    std r0, 48(r1)
279; CHECK-NEXT:    .cfi_def_cfa_offset 32
280; CHECK-NEXT:    .cfi_offset lr, 16
281; CHECK-NEXT:    bl lroundf
282; CHECK-NEXT:    nop
283; CHECK-NEXT:    addi r1, r1, 32
284; CHECK-NEXT:    ld r0, 16(r1)
285; CHECK-NEXT:    mtlr r0
286; CHECK-NEXT:    blr
287;
288; FAST-LABEL: test_lroundf:
289; FAST:       # %bb.0: # %entry
290; FAST-NEXT:    xsrdpi f0, f1
291; FAST-NEXT:    fctid f0, f0
292; FAST-NEXT:    mffprd r3, f0
293; FAST-NEXT:    blr
294entry:
295  %0 = tail call i64 @llvm.lround.i64.f32(float %f)
296  ret i64 %0
297}
298
299declare i64 @llvm.lround.i64.f32(float)
300
301define dso_local i32 @test_lroundi32f32(float %d) local_unnamed_addr {
302; BE-LABEL: test_lroundi32f32:
303; BE:       # %bb.0: # %entry
304; BE-NEXT:    mflr r0
305; BE-NEXT:    stdu r1, -112(r1)
306; BE-NEXT:    std r0, 128(r1)
307; BE-NEXT:    .cfi_def_cfa_offset 112
308; BE-NEXT:    .cfi_offset lr, 16
309; BE-NEXT:    bl lroundf
310; BE-NEXT:    nop
311; BE-NEXT:    addi r1, r1, 112
312; BE-NEXT:    ld r0, 16(r1)
313; BE-NEXT:    mtlr r0
314; BE-NEXT:    blr
315;
316; CHECK-LABEL: test_lroundi32f32:
317; CHECK:       # %bb.0: # %entry
318; CHECK-NEXT:    mflr r0
319; CHECK-NEXT:    stdu r1, -32(r1)
320; CHECK-NEXT:    std r0, 48(r1)
321; CHECK-NEXT:    .cfi_def_cfa_offset 32
322; CHECK-NEXT:    .cfi_offset lr, 16
323; CHECK-NEXT:    bl lroundf
324; CHECK-NEXT:    nop
325; CHECK-NEXT:    addi r1, r1, 32
326; CHECK-NEXT:    ld r0, 16(r1)
327; CHECK-NEXT:    mtlr r0
328; CHECK-NEXT:    blr
329;
330; FAST-LABEL: test_lroundi32f32:
331; FAST:       # %bb.0: # %entry
332; FAST-NEXT:    xsrdpi f0, f1
333; FAST-NEXT:    fctiw f0, f0
334; FAST-NEXT:    mffprwz r3, f0
335; FAST-NEXT:    blr
336entry:
337  %0 = tail call i32 @llvm.lround.i32.f32(float %d)
338  ret i32 %0
339}
340
341declare i32 @llvm.lround.i32.f32(float)
342
343define dso_local i64 @test_llround(double %d) local_unnamed_addr {
344; BE-LABEL: test_llround:
345; BE:       # %bb.0: # %entry
346; BE-NEXT:    mflr r0
347; BE-NEXT:    stdu r1, -112(r1)
348; BE-NEXT:    std r0, 128(r1)
349; BE-NEXT:    .cfi_def_cfa_offset 112
350; BE-NEXT:    .cfi_offset lr, 16
351; BE-NEXT:    bl llround
352; BE-NEXT:    nop
353; BE-NEXT:    addi r1, r1, 112
354; BE-NEXT:    ld r0, 16(r1)
355; BE-NEXT:    mtlr r0
356; BE-NEXT:    blr
357;
358; CHECK-LABEL: test_llround:
359; CHECK:       # %bb.0: # %entry
360; CHECK-NEXT:    mflr r0
361; CHECK-NEXT:    stdu r1, -32(r1)
362; CHECK-NEXT:    std r0, 48(r1)
363; CHECK-NEXT:    .cfi_def_cfa_offset 32
364; CHECK-NEXT:    .cfi_offset lr, 16
365; CHECK-NEXT:    bl llround
366; CHECK-NEXT:    nop
367; CHECK-NEXT:    addi r1, r1, 32
368; CHECK-NEXT:    ld r0, 16(r1)
369; CHECK-NEXT:    mtlr r0
370; CHECK-NEXT:    blr
371;
372; FAST-LABEL: test_llround:
373; FAST:       # %bb.0: # %entry
374; FAST-NEXT:    xsrdpi f0, f1
375; FAST-NEXT:    fctid f0, f0
376; FAST-NEXT:    mffprd r3, f0
377; FAST-NEXT:    blr
378entry:
379  %0 = tail call i64 @llvm.llround.i64.f64(double %d)
380  ret i64 %0
381}
382
383declare i64 @llvm.llround.i64.f64(double)
384
385define dso_local i64 @test_llroundf(float %f) local_unnamed_addr {
386; BE-LABEL: test_llroundf:
387; BE:       # %bb.0: # %entry
388; BE-NEXT:    mflr r0
389; BE-NEXT:    stdu r1, -112(r1)
390; BE-NEXT:    std r0, 128(r1)
391; BE-NEXT:    .cfi_def_cfa_offset 112
392; BE-NEXT:    .cfi_offset lr, 16
393; BE-NEXT:    bl llroundf
394; BE-NEXT:    nop
395; BE-NEXT:    addi r1, r1, 112
396; BE-NEXT:    ld r0, 16(r1)
397; BE-NEXT:    mtlr r0
398; BE-NEXT:    blr
399;
400; CHECK-LABEL: test_llroundf:
401; CHECK:       # %bb.0: # %entry
402; CHECK-NEXT:    mflr r0
403; CHECK-NEXT:    stdu r1, -32(r1)
404; CHECK-NEXT:    std r0, 48(r1)
405; CHECK-NEXT:    .cfi_def_cfa_offset 32
406; CHECK-NEXT:    .cfi_offset lr, 16
407; CHECK-NEXT:    bl llroundf
408; CHECK-NEXT:    nop
409; CHECK-NEXT:    addi r1, r1, 32
410; CHECK-NEXT:    ld r0, 16(r1)
411; CHECK-NEXT:    mtlr r0
412; CHECK-NEXT:    blr
413;
414; FAST-LABEL: test_llroundf:
415; FAST:       # %bb.0: # %entry
416; FAST-NEXT:    xsrdpi f0, f1
417; FAST-NEXT:    fctid f0, f0
418; FAST-NEXT:    mffprd r3, f0
419; FAST-NEXT:    blr
420entry:
421  %0 = tail call i64 @llvm.llround.i64.f32(float %f)
422  ret i64 %0
423}
424
425declare i64 @llvm.llround.i64.f32(float)
426
427define dso_local double @test_nearbyint(double %d) local_unnamed_addr {
428; BE-LABEL: test_nearbyint:
429; BE:       # %bb.0: # %entry
430; BE-NEXT:    mflr r0
431; BE-NEXT:    stdu r1, -112(r1)
432; BE-NEXT:    std r0, 128(r1)
433; BE-NEXT:    .cfi_def_cfa_offset 112
434; BE-NEXT:    .cfi_offset lr, 16
435; BE-NEXT:    bl nearbyint
436; BE-NEXT:    nop
437; BE-NEXT:    addi r1, r1, 112
438; BE-NEXT:    ld r0, 16(r1)
439; BE-NEXT:    mtlr r0
440; BE-NEXT:    blr
441;
442; CHECK-LABEL: test_nearbyint:
443; CHECK:       # %bb.0: # %entry
444; CHECK-NEXT:    mflr r0
445; CHECK-NEXT:    stdu r1, -32(r1)
446; CHECK-NEXT:    std r0, 48(r1)
447; CHECK-NEXT:    .cfi_def_cfa_offset 32
448; CHECK-NEXT:    .cfi_offset lr, 16
449; CHECK-NEXT:    bl nearbyint
450; CHECK-NEXT:    nop
451; CHECK-NEXT:    addi r1, r1, 32
452; CHECK-NEXT:    ld r0, 16(r1)
453; CHECK-NEXT:    mtlr r0
454; CHECK-NEXT:    blr
455;
456; FAST-LABEL: test_nearbyint:
457; FAST:       # %bb.0: # %entry
458; FAST-NEXT:    xsrdpic f1, f1
459; FAST-NEXT:    blr
460entry:
461  %0 = tail call double @llvm.nearbyint.f64(double %d)
462  ret double %0
463}
464
465declare double @llvm.nearbyint.f64(double)
466
467define dso_local float @test_nearbyintf(float %f) local_unnamed_addr {
468; BE-LABEL: test_nearbyintf:
469; BE:       # %bb.0: # %entry
470; BE-NEXT:    mflr r0
471; BE-NEXT:    stdu r1, -112(r1)
472; BE-NEXT:    std r0, 128(r1)
473; BE-NEXT:    .cfi_def_cfa_offset 112
474; BE-NEXT:    .cfi_offset lr, 16
475; BE-NEXT:    bl nearbyintf
476; BE-NEXT:    nop
477; BE-NEXT:    addi r1, r1, 112
478; BE-NEXT:    ld r0, 16(r1)
479; BE-NEXT:    mtlr r0
480; BE-NEXT:    blr
481;
482; CHECK-LABEL: test_nearbyintf:
483; CHECK:       # %bb.0: # %entry
484; CHECK-NEXT:    mflr r0
485; CHECK-NEXT:    stdu r1, -32(r1)
486; CHECK-NEXT:    std r0, 48(r1)
487; CHECK-NEXT:    .cfi_def_cfa_offset 32
488; CHECK-NEXT:    .cfi_offset lr, 16
489; CHECK-NEXT:    bl nearbyintf
490; CHECK-NEXT:    nop
491; CHECK-NEXT:    addi r1, r1, 32
492; CHECK-NEXT:    ld r0, 16(r1)
493; CHECK-NEXT:    mtlr r0
494; CHECK-NEXT:    blr
495;
496; FAST-LABEL: test_nearbyintf:
497; FAST:       # %bb.0: # %entry
498; FAST-NEXT:    xsrdpic f1, f1
499; FAST-NEXT:    blr
500entry:
501  %0 = tail call float @llvm.nearbyint.f32(float %f)
502  ret float %0
503}
504
505declare float @llvm.nearbyint.f32(float)
506
507define dso_local double @test_round(double %d) local_unnamed_addr {
508; BE-LABEL: test_round:
509; BE:       # %bb.0: # %entry
510; BE-NEXT:    xsrdpi f1, f1
511; BE-NEXT:    blr
512;
513; CHECK-LABEL: test_round:
514; CHECK:       # %bb.0: # %entry
515; CHECK-NEXT:    xsrdpi f1, f1
516; CHECK-NEXT:    blr
517;
518; FAST-LABEL: test_round:
519; FAST:       # %bb.0: # %entry
520; FAST-NEXT:    xsrdpi f1, f1
521; FAST-NEXT:    blr
522entry:
523  %0 = tail call double @llvm.round.f64(double %d)
524  ret double %0
525}
526
527declare double @llvm.round.f64(double)
528
529define dso_local float @test_roundf(float %f) local_unnamed_addr {
530; BE-LABEL: test_roundf:
531; BE:       # %bb.0: # %entry
532; BE-NEXT:    xsrdpi f1, f1
533; BE-NEXT:    blr
534;
535; CHECK-LABEL: test_roundf:
536; CHECK:       # %bb.0: # %entry
537; CHECK-NEXT:    xsrdpi f1, f1
538; CHECK-NEXT:    blr
539;
540; FAST-LABEL: test_roundf:
541; FAST:       # %bb.0: # %entry
542; FAST-NEXT:    xsrdpi f1, f1
543; FAST-NEXT:    blr
544entry:
545  %0 = tail call float @llvm.round.f32(float %f)
546  ret float %0
547}
548
549declare float @llvm.round.f32(float)
550
551define dso_local double @test_trunc(double %d) local_unnamed_addr {
552; BE-LABEL: test_trunc:
553; BE:       # %bb.0: # %entry
554; BE-NEXT:    xsrdpiz f1, f1
555; BE-NEXT:    blr
556;
557; CHECK-LABEL: test_trunc:
558; CHECK:       # %bb.0: # %entry
559; CHECK-NEXT:    xsrdpiz f1, f1
560; CHECK-NEXT:    blr
561;
562; FAST-LABEL: test_trunc:
563; FAST:       # %bb.0: # %entry
564; FAST-NEXT:    xsrdpiz f1, f1
565; FAST-NEXT:    blr
566entry:
567  %0 = tail call double @llvm.trunc.f64(double %d)
568  ret double %0
569}
570
571declare double @llvm.trunc.f64(double)
572
573define dso_local float @test_truncf(float %f) local_unnamed_addr {
574; BE-LABEL: test_truncf:
575; BE:       # %bb.0: # %entry
576; BE-NEXT:    xsrdpiz f1, f1
577; BE-NEXT:    blr
578;
579; CHECK-LABEL: test_truncf:
580; CHECK:       # %bb.0: # %entry
581; CHECK-NEXT:    xsrdpiz f1, f1
582; CHECK-NEXT:    blr
583;
584; FAST-LABEL: test_truncf:
585; FAST:       # %bb.0: # %entry
586; FAST-NEXT:    xsrdpiz f1, f1
587; FAST-NEXT:    blr
588entry:
589  %0 = tail call float @llvm.trunc.f32(float %f)
590  ret float %0
591}
592
593declare float @llvm.trunc.f32(float)
594
595define dso_local double @test_floor(double %d) local_unnamed_addr {
596; BE-LABEL: test_floor:
597; BE:       # %bb.0: # %entry
598; BE-NEXT:    xsrdpim f1, f1
599; BE-NEXT:    blr
600;
601; CHECK-LABEL: test_floor:
602; CHECK:       # %bb.0: # %entry
603; CHECK-NEXT:    xsrdpim f1, f1
604; CHECK-NEXT:    blr
605;
606; FAST-LABEL: test_floor:
607; FAST:       # %bb.0: # %entry
608; FAST-NEXT:    xsrdpim f1, f1
609; FAST-NEXT:    blr
610entry:
611  %0 = tail call double @llvm.floor.f64(double %d)
612  ret double %0
613}
614
615declare double @llvm.floor.f64(double)
616
617define dso_local float @test_floorf(float %f) local_unnamed_addr {
618; BE-LABEL: test_floorf:
619; BE:       # %bb.0: # %entry
620; BE-NEXT:    xsrdpim f1, f1
621; BE-NEXT:    blr
622;
623; CHECK-LABEL: test_floorf:
624; CHECK:       # %bb.0: # %entry
625; CHECK-NEXT:    xsrdpim f1, f1
626; CHECK-NEXT:    blr
627;
628; FAST-LABEL: test_floorf:
629; FAST:       # %bb.0: # %entry
630; FAST-NEXT:    xsrdpim f1, f1
631; FAST-NEXT:    blr
632entry:
633  %0 = tail call float @llvm.floor.f32(float %f)
634  ret float %0
635}
636
637declare float @llvm.floor.f32(float)
638
639define dso_local double @test_ceil(double %d) local_unnamed_addr {
640; BE-LABEL: test_ceil:
641; BE:       # %bb.0: # %entry
642; BE-NEXT:    xsrdpip f1, f1
643; BE-NEXT:    blr
644;
645; CHECK-LABEL: test_ceil:
646; CHECK:       # %bb.0: # %entry
647; CHECK-NEXT:    xsrdpip f1, f1
648; CHECK-NEXT:    blr
649;
650; FAST-LABEL: test_ceil:
651; FAST:       # %bb.0: # %entry
652; FAST-NEXT:    xsrdpip f1, f1
653; FAST-NEXT:    blr
654entry:
655  %0 = tail call double @llvm.ceil.f64(double %d)
656  ret double %0
657}
658
659declare double @llvm.ceil.f64(double)
660
661define dso_local float @test_ceilf(float %f) local_unnamed_addr {
662; BE-LABEL: test_ceilf:
663; BE:       # %bb.0: # %entry
664; BE-NEXT:    xsrdpip f1, f1
665; BE-NEXT:    blr
666;
667; CHECK-LABEL: test_ceilf:
668; CHECK:       # %bb.0: # %entry
669; CHECK-NEXT:    xsrdpip f1, f1
670; CHECK-NEXT:    blr
671;
672; FAST-LABEL: test_ceilf:
673; FAST:       # %bb.0: # %entry
674; FAST-NEXT:    xsrdpip f1, f1
675; FAST-NEXT:    blr
676entry:
677  %0 = tail call float @llvm.ceil.f32(float %f)
678  ret float %0
679}
680
681declare float @llvm.ceil.f32(float)
682
683define dso_local double @test_rint(double %d) local_unnamed_addr {
684; BE-LABEL: test_rint:
685; BE:       # %bb.0: # %entry
686; BE-NEXT:    xsrdpic f1, f1
687; BE-NEXT:    blr
688;
689; CHECK-LABEL: test_rint:
690; CHECK:       # %bb.0: # %entry
691; CHECK-NEXT:    xsrdpic f1, f1
692; CHECK-NEXT:    blr
693;
694; FAST-LABEL: test_rint:
695; FAST:       # %bb.0: # %entry
696; FAST-NEXT:    xsrdpic f1, f1
697; FAST-NEXT:    blr
698entry:
699  %0 = tail call double @llvm.rint.f64(double %d)
700  ret double %0
701}
702
703declare double @llvm.rint.f64(double)
704
705define dso_local float @test_rintf(float %f) local_unnamed_addr {
706; BE-LABEL: test_rintf:
707; BE:       # %bb.0: # %entry
708; BE-NEXT:    xsrdpic f1, f1
709; BE-NEXT:    blr
710;
711; CHECK-LABEL: test_rintf:
712; CHECK:       # %bb.0: # %entry
713; CHECK-NEXT:    xsrdpic f1, f1
714; CHECK-NEXT:    blr
715;
716; FAST-LABEL: test_rintf:
717; FAST:       # %bb.0: # %entry
718; FAST-NEXT:    xsrdpic f1, f1
719; FAST-NEXT:    blr
720entry:
721  %0 = tail call float @llvm.rint.f32(float %f)
722  ret float %0
723}
724
725declare float @llvm.rint.f32(float)
726