blob: 2c02900aa070535e2fde5dc29e3ec9c75ddd5af9 [file] [log] [blame]
Hal Finkelf5d5c432013-03-29 08:57:48 +00001; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s
2; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -enable-unsafe-fp-math | FileCheck -check-prefix=CHECK-FM %s
3target 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"
4target triple = "powerpc64-unknown-linux-gnu"
5
6define float @test1(float %x) nounwind {
7 %call = tail call float @floorf(float %x) nounwind readnone
8 ret float %call
9
Stephen Linb4dc0232013-07-13 20:38:47 +000010; CHECK-LABEL: test1:
Hal Finkelf5d5c432013-03-29 08:57:48 +000011; CHECK: frim 1, 1
12
Stephen Lin8b2b8a12013-07-14 06:24:09 +000013; CHECK-FM-LABEL: test1:
Hal Finkelf5d5c432013-03-29 08:57:48 +000014; CHECK-FM: frim 1, 1
15}
16
17declare float @floorf(float) nounwind readnone
18
19define double @test2(double %x) nounwind {
20 %call = tail call double @floor(double %x) nounwind readnone
21 ret double %call
22
Stephen Linb4dc0232013-07-13 20:38:47 +000023; CHECK-LABEL: test2:
Hal Finkelf5d5c432013-03-29 08:57:48 +000024; CHECK: frim 1, 1
25
Stephen Lin8b2b8a12013-07-14 06:24:09 +000026; CHECK-FM-LABEL: test2:
Hal Finkelf5d5c432013-03-29 08:57:48 +000027; CHECK-FM: frim 1, 1
28}
29
30declare double @floor(double) nounwind readnone
31
32define float @test3(float %x) nounwind {
33 %call = tail call float @nearbyintf(float %x) nounwind readnone
34 ret float %call
35
Stephen Linb4dc0232013-07-13 20:38:47 +000036; CHECK-LABEL: test3:
Hal Finkelf5d5c432013-03-29 08:57:48 +000037; CHECK-NOT: frin
38
Stephen Lin8b2b8a12013-07-14 06:24:09 +000039; CHECK-FM-LABEL: test3:
Hal Finkelf5d5c432013-03-29 08:57:48 +000040; CHECK-FM: frin 1, 1
41}
42
43declare float @nearbyintf(float) nounwind readnone
44
45define double @test4(double %x) nounwind {
46 %call = tail call double @nearbyint(double %x) nounwind readnone
47 ret double %call
48
Stephen Linb4dc0232013-07-13 20:38:47 +000049; CHECK-LABEL: test4:
Hal Finkelf5d5c432013-03-29 08:57:48 +000050; CHECK-NOT: frin
51
Stephen Lin8b2b8a12013-07-14 06:24:09 +000052; CHECK-FM-LABEL: test4:
Hal Finkelf5d5c432013-03-29 08:57:48 +000053; CHECK-FM: frin 1, 1
54}
55
56declare double @nearbyint(double) nounwind readnone
57
58define float @test5(float %x) nounwind {
59 %call = tail call float @ceilf(float %x) nounwind readnone
60 ret float %call
61
Stephen Linb4dc0232013-07-13 20:38:47 +000062; CHECK-LABEL: test5:
Hal Finkelf5d5c432013-03-29 08:57:48 +000063; CHECK: frip 1, 1
64
Stephen Lin8b2b8a12013-07-14 06:24:09 +000065; CHECK-FM-LABEL: test5:
Hal Finkelf5d5c432013-03-29 08:57:48 +000066; CHECK-FM: frip 1, 1
67}
68
69declare float @ceilf(float) nounwind readnone
70
71define double @test6(double %x) nounwind {
72 %call = tail call double @ceil(double %x) nounwind readnone
73 ret double %call
74
Stephen Linb4dc0232013-07-13 20:38:47 +000075; CHECK-LABEL: test6:
Hal Finkelf5d5c432013-03-29 08:57:48 +000076; CHECK: frip 1, 1
77
Stephen Lin8b2b8a12013-07-14 06:24:09 +000078; CHECK-FM-LABEL: test6:
Hal Finkelf5d5c432013-03-29 08:57:48 +000079; CHECK-FM: frip 1, 1
80}
81
82declare double @ceil(double) nounwind readnone
83
84define float @test9(float %x) nounwind {
85 %call = tail call float @truncf(float %x) nounwind readnone
86 ret float %call
87
Stephen Linb4dc0232013-07-13 20:38:47 +000088; CHECK-LABEL: test9:
Hal Finkelf5d5c432013-03-29 08:57:48 +000089; CHECK: friz 1, 1
90
Stephen Lin8b2b8a12013-07-14 06:24:09 +000091; CHECK-FM-LABEL: test9:
Hal Finkelf5d5c432013-03-29 08:57:48 +000092; CHECK-FM: friz 1, 1
93}
94
95declare float @truncf(float) nounwind readnone
96
97define double @test10(double %x) nounwind {
98 %call = tail call double @trunc(double %x) nounwind readnone
99 ret double %call
100
Stephen Linb4dc0232013-07-13 20:38:47 +0000101; CHECK-LABEL: test10:
Hal Finkelf5d5c432013-03-29 08:57:48 +0000102; CHECK: friz 1, 1
103
Stephen Lin8b2b8a12013-07-14 06:24:09 +0000104; CHECK-FM-LABEL: test10:
Hal Finkelf5d5c432013-03-29 08:57:48 +0000105; CHECK-FM: friz 1, 1
106}
107
108declare double @trunc(double) nounwind readnone
Hal Finkel0882fd62013-03-29 19:41:55 +0000109
Hal Finkel5ee67e82013-04-08 16:24:03 +0000110define void @test11(float %x, float* %y) nounwind {
Hal Finkel0882fd62013-03-29 19:41:55 +0000111 %call = tail call float @rintf(float %x) nounwind readnone
Hal Finkel5ee67e82013-04-08 16:24:03 +0000112 store float %call, float* %y
113 ret void
Hal Finkel0882fd62013-03-29 19:41:55 +0000114
Stephen Linb4dc0232013-07-13 20:38:47 +0000115; CHECK-LABEL: test11:
Hal Finkel0882fd62013-03-29 19:41:55 +0000116; CHECK-NOT: frin
117
Stephen Lin8b2b8a12013-07-14 06:24:09 +0000118; CHECK-FM-LABEL: test11:
Hal Finkel0882fd62013-03-29 19:41:55 +0000119; CHECK-FM: frin [[R2:[0-9]+]], [[R1:[0-9]+]]
120; CHECK-FM: fcmpu [[CR:[0-9]+]], [[R2]], [[R1]]
121; CHECK-FM: beq [[CR]], .LBB[[BB:[0-9]+]]_2
122; CHECK-FM: mtfsb1 6
123; CHECK-FM: .LBB[[BB]]_2:
124; CHECK-FM: blr
125}
126
127declare float @rintf(float) nounwind readnone
128
Hal Finkel5ee67e82013-04-08 16:24:03 +0000129define void @test12(double %x, double* %y) nounwind {
Hal Finkel0882fd62013-03-29 19:41:55 +0000130 %call = tail call double @rint(double %x) nounwind readnone
Hal Finkel5ee67e82013-04-08 16:24:03 +0000131 store double %call, double* %y
132 ret void
Hal Finkel0882fd62013-03-29 19:41:55 +0000133
Stephen Linb4dc0232013-07-13 20:38:47 +0000134; CHECK-LABEL: test12:
Hal Finkel0882fd62013-03-29 19:41:55 +0000135; CHECK-NOT: frin
136
Stephen Lin8b2b8a12013-07-14 06:24:09 +0000137; CHECK-FM-LABEL: test12:
Hal Finkel0882fd62013-03-29 19:41:55 +0000138; CHECK-FM: frin [[R2:[0-9]+]], [[R1:[0-9]+]]
139; CHECK-FM: fcmpu [[CR:[0-9]+]], [[R2]], [[R1]]
140; CHECK-FM: beq [[CR]], .LBB[[BB:[0-9]+]]_2
141; CHECK-FM: mtfsb1 6
142; CHECK-FM: .LBB[[BB]]_2:
143; CHECK-FM: blr
144}
145
146declare double @rint(double) nounwind readnone
147