Merging r261039:
[oota-llvm.git] / test / CodeGen / X86 / vec_floor.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -march=x86 -mcpu=corei7-avx | FileCheck %s
2
3
4 define <2 x double> @floor_v2f64(<2 x double> %p)
5 {
6   ; CHECK: floor_v2f64
7   ; CHECK: vroundpd
8   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)
9   ret <2 x double> %t
10 }
11 declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)
12
13 define <4 x float> @floor_v4f32(<4 x float> %p)
14 {
15   ; CHECK: floor_v4f32
16   ; CHECK: vroundps
17   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)
18   ret <4 x float> %t
19 }
20 declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)
21
22 define <4 x double> @floor_v4f64(<4 x double> %p)
23 {
24   ; CHECK: floor_v4f64
25   ; CHECK: vroundpd
26   %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)
27   ret <4 x double> %t
28 }
29 declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)
30
31 define <8 x float> @floor_v8f32(<8 x float> %p)
32 {
33   ; CHECK: floor_v8f32
34   ; CHECK: vroundps
35   %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)
36   ret <8 x float> %t
37 }
38 declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)
39
40 define <2 x double> @ceil_v2f64(<2 x double> %p)
41 {
42   ; CHECK: ceil_v2f64
43   ; CHECK: vroundpd
44   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
45   ret <2 x double> %t
46 }
47 declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
48
49 define <4 x float> @ceil_v4f32(<4 x float> %p)
50 {
51   ; CHECK: ceil_v4f32
52   ; CHECK: vroundps
53   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
54   ret <4 x float> %t
55 }
56 declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
57
58 define <4 x double> @ceil_v4f64(<4 x double> %p)
59 {
60   ; CHECK: ceil_v4f64
61   ; CHECK: vroundpd
62   %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
63   ret <4 x double> %t
64 }
65 declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
66
67 define <8 x float> @ceil_v8f32(<8 x float> %p)
68 {
69   ; CHECK: ceil_v8f32
70   ; CHECK: vroundps
71   %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
72   ret <8 x float> %t
73 }
74 declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
75
76 define <2 x double> @trunc_v2f64(<2 x double> %p)
77 {
78   ; CHECK: trunc_v2f64
79   ; CHECK: vroundpd
80   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
81   ret <2 x double> %t
82 }
83 declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
84
85 define <4 x float> @trunc_v4f32(<4 x float> %p)
86 {
87   ; CHECK: trunc_v4f32
88   ; CHECK: vroundps
89   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
90   ret <4 x float> %t
91 }
92 declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
93
94 define <4 x double> @trunc_v4f64(<4 x double> %p)
95 {
96   ; CHECK: trunc_v4f64
97   ; CHECK: vroundpd
98   %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
99   ret <4 x double> %t
100 }
101 declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
102
103 define <8 x float> @trunc_v8f32(<8 x float> %p)
104 {
105   ; CHECK: trunc_v8f32
106   ; CHECK: vroundps
107   %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
108   ret <8 x float> %t
109 }
110 declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
111
112 define <2 x double> @rint_v2f64(<2 x double> %p)
113 {
114   ; CHECK: rint_v2f64
115   ; CHECK: vroundpd
116   %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)
117   ret <2 x double> %t
118 }
119 declare <2 x double> @llvm.rint.v2f64(<2 x double> %p)
120
121 define <4 x float> @rint_v4f32(<4 x float> %p)
122 {
123   ; CHECK: rint_v4f32
124   ; CHECK: vroundps
125   %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)
126   ret <4 x float> %t
127 }
128 declare <4 x float> @llvm.rint.v4f32(<4 x float> %p)
129
130 define <4 x double> @rint_v4f64(<4 x double> %p)
131 {
132   ; CHECK: rint_v4f64
133   ; CHECK: vroundpd
134   %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)
135   ret <4 x double> %t
136 }
137 declare <4 x double> @llvm.rint.v4f64(<4 x double> %p)
138
139 define <8 x float> @rint_v8f32(<8 x float> %p)
140 {
141   ; CHECK: rint_v8f32
142   ; CHECK: vroundps
143   %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)
144   ret <8 x float> %t
145 }
146 declare <8 x float> @llvm.rint.v8f32(<8 x float> %p)
147
148 define <2 x double> @nearbyint_v2f64(<2 x double> %p)
149 {
150   ; CHECK: nearbyint_v2f64
151   ; CHECK: vroundpd
152   %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
153   ret <2 x double> %t
154 }
155 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
156
157 define <4 x float> @nearbyint_v4f32(<4 x float> %p)
158 {
159   ; CHECK: nearbyint_v4f32
160   ; CHECK: vroundps
161   %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
162   ret <4 x float> %t
163 }
164 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
165
166 define <4 x double> @nearbyint_v4f64(<4 x double> %p)
167 {
168   ; CHECK: nearbyint_v4f64
169   ; CHECK: vroundpd
170   %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
171   ret <4 x double> %t
172 }
173 declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
174
175 define <8 x float> @nearbyint_v8f32(<8 x float> %p)
176 {
177   ; CHECK: nearbyint_v8f32
178   ; CHECK: vroundps
179   %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
180   ret <8 x float> %t
181 }
182 declare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
183
184 ;
185 ; Constant Folding
186 ;
187
188 define <2 x double> @const_floor_v2f64() {
189   ; CHECK: const_floor_v2f64
190   ; CHECK: movaps {{.*#+}} xmm0 = [-2.000000e+00,2.000000e+00]
191   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> <double -1.5, double 2.5>)
192   ret <2 x double> %t
193 }
194
195 define <4 x float> @const_floor_v4f32() {
196   ; CHECK: const_floor_v4f32
197   ; CHECK: movaps {{.*#+}} xmm0 = [-4.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
198   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
199   ret <4 x float> %t
200 }
201
202 define <2 x double> @const_ceil_v2f64() {
203   ; CHECK: const_ceil_v2f64
204   ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,3.000000e+00]
205   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> <double -1.5, double 2.5>)
206   ret <2 x double> %t
207 }
208
209 define <4 x float> @const_ceil_v4f32() {
210   ; CHECK: const_ceil_v4f32
211   ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,3.000000e+00]
212   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
213   ret <4 x float> %t
214 }
215
216 define <2 x double> @const_trunc_v2f64() {
217   ; CHECK: const_trunc_v2f64
218   ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,2.000000e+00]
219   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> <double -1.5, double 2.5>)
220   ret <2 x double> %t
221 }
222
223 define <4 x float> @const_trunc_v4f32() {
224   ; CHECK: const_trunc_v4f32
225   ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
226   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
227   ret <4 x float> %t
228 }