llvm/test/Object/ar-error.test: Don't check the message "No such file or directory".
[oota-llvm.git] / test / CodeGen / AArch64 / neon-scalar-fcvt.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2 ; arm64 duplicates these tests in cvt.ll
3
4 ;; Scalar Floating-point Convert
5
6 define float @test_vcvtxn(double %a) {
7 ; CHECK: test_vcvtxn
8 ; CHECK: fcvtxn {{s[0-9]}}, {{d[0-9]}}
9 entry:
10   %vcvtf = call float @llvm.aarch64.neon.fcvtxn(double %a)
11   ret float %vcvtf
12 }
13
14 declare float @llvm.aarch64.neon.fcvtxn(double)
15
16 define i32 @test_vcvtass(float %a) {
17 ; CHECK: test_vcvtass
18 ; CHECK: fcvtas {{s[0-9]}}, {{s[0-9]}}
19 entry:
20   %vcvtas1.i = call <1 x i32> @llvm.aarch64.neon.fcvtas.v1i32.f32(float %a)
21   %0 = extractelement <1 x i32> %vcvtas1.i, i32 0
22   ret i32 %0
23 }
24
25 declare <1 x i32> @llvm.aarch64.neon.fcvtas.v1i32.f32(float)
26
27 define i64 @test_test_vcvtasd(double %a) {
28 ; CHECK: test_test_vcvtasd
29 ; CHECK: fcvtas {{d[0-9]}}, {{d[0-9]}}
30 entry:
31   %vcvtas1.i = call <1 x i64> @llvm.aarch64.neon.fcvtas.v1i64.f64(double %a)
32   %0 = extractelement <1 x i64> %vcvtas1.i, i32 0
33   ret i64 %0
34 }
35
36 declare <1 x i64> @llvm.aarch64.neon.fcvtas.v1i64.f64(double)
37
38 define i32 @test_vcvtaus(float %a) {
39 ; CHECK: test_vcvtaus
40 ; CHECK: fcvtau {{s[0-9]}}, {{s[0-9]}}
41 entry:
42   %vcvtau1.i = call <1 x i32> @llvm.aarch64.neon.fcvtau.v1i32.f32(float %a)
43   %0 = extractelement <1 x i32> %vcvtau1.i, i32 0
44   ret i32 %0
45 }
46
47 declare <1 x i32> @llvm.aarch64.neon.fcvtau.v1i32.f32(float)
48
49 define i64 @test_vcvtaud(double %a) {
50 ; CHECK: test_vcvtaud
51 ; CHECK: fcvtau {{d[0-9]}}, {{d[0-9]}}
52 entry:
53   %vcvtau1.i = call <1 x i64> @llvm.aarch64.neon.fcvtau.v1i64.f64(double %a)
54   %0 = extractelement <1 x i64> %vcvtau1.i, i32 0
55   ret i64 %0
56 }
57
58 declare <1 x i64> @llvm.aarch64.neon.fcvtau.v1i64.f64(double) 
59
60 define i32 @test_vcvtmss(float %a) {
61 ; CHECK: test_vcvtmss
62 ; CHECK: fcvtms {{s[0-9]}}, {{s[0-9]}}
63 entry:
64   %vcvtms1.i = call <1 x i32> @llvm.aarch64.neon.fcvtms.v1i32.f32(float %a)
65   %0 = extractelement <1 x i32> %vcvtms1.i, i32 0
66   ret i32 %0
67 }
68
69 declare <1 x i32> @llvm.aarch64.neon.fcvtms.v1i32.f32(float)
70
71 define i64 @test_vcvtmd_s64_f64(double %a) {
72 ; CHECK: test_vcvtmd_s64_f64
73 ; CHECK: fcvtms {{d[0-9]}}, {{d[0-9]}}
74 entry:
75   %vcvtms1.i = call <1 x i64> @llvm.aarch64.neon.fcvtms.v1i64.f64(double %a)
76   %0 = extractelement <1 x i64> %vcvtms1.i, i32 0
77   ret i64 %0
78 }
79
80 declare <1 x i64> @llvm.aarch64.neon.fcvtms.v1i64.f64(double)
81
82 define i32 @test_vcvtmus(float %a) {
83 ; CHECK: test_vcvtmus
84 ; CHECK: fcvtmu {{s[0-9]}}, {{s[0-9]}}
85 entry:
86   %vcvtmu1.i = call <1 x i32> @llvm.aarch64.neon.fcvtmu.v1i32.f32(float %a)
87   %0 = extractelement <1 x i32> %vcvtmu1.i, i32 0
88   ret i32 %0
89 }
90
91 declare <1 x i32> @llvm.aarch64.neon.fcvtmu.v1i32.f32(float)
92
93 define i64 @test_vcvtmud(double %a) {
94 ; CHECK: test_vcvtmud
95 ; CHECK: fcvtmu {{d[0-9]}}, {{d[0-9]}}
96 entry:
97   %vcvtmu1.i = call <1 x i64> @llvm.aarch64.neon.fcvtmu.v1i64.f64(double %a)
98   %0 = extractelement <1 x i64> %vcvtmu1.i, i32 0
99   ret i64 %0
100 }
101
102 declare <1 x i64> @llvm.aarch64.neon.fcvtmu.v1i64.f64(double)
103
104 define i32 @test_vcvtnss(float %a) {
105 ; CHECK: test_vcvtnss
106 ; CHECK: fcvtns {{s[0-9]}}, {{s[0-9]}}
107 entry:
108   %vcvtns1.i = call <1 x i32> @llvm.aarch64.neon.fcvtns.v1i32.f32(float %a)
109   %0 = extractelement <1 x i32> %vcvtns1.i, i32 0
110   ret i32 %0
111 }
112
113 declare <1 x i32> @llvm.aarch64.neon.fcvtns.v1i32.f32(float)
114
115 define i64 @test_vcvtnd_s64_f64(double %a) {
116 ; CHECK: test_vcvtnd_s64_f64
117 ; CHECK: fcvtns {{d[0-9]}}, {{d[0-9]}}
118 entry:
119   %vcvtns1.i = call <1 x i64> @llvm.aarch64.neon.fcvtns.v1i64.f64(double %a)
120   %0 = extractelement <1 x i64> %vcvtns1.i, i32 0
121   ret i64 %0
122 }
123
124 declare <1 x i64> @llvm.aarch64.neon.fcvtns.v1i64.f64(double)
125
126 define i32 @test_vcvtnus(float %a) {
127 ; CHECK: test_vcvtnus
128 ; CHECK: fcvtnu {{s[0-9]}}, {{s[0-9]}}
129 entry:
130   %vcvtnu1.i = call <1 x i32> @llvm.aarch64.neon.fcvtnu.v1i32.f32(float %a)
131   %0 = extractelement <1 x i32> %vcvtnu1.i, i32 0
132   ret i32 %0
133 }
134
135 declare <1 x i32> @llvm.aarch64.neon.fcvtnu.v1i32.f32(float)
136
137 define i64 @test_vcvtnud(double %a) {
138 ; CHECK: test_vcvtnud
139 ; CHECK: fcvtnu {{d[0-9]}}, {{d[0-9]}}
140 entry:
141   %vcvtnu1.i = call <1 x i64> @llvm.aarch64.neon.fcvtnu.v1i64.f64(double %a)
142   %0 = extractelement <1 x i64> %vcvtnu1.i, i32 0
143   ret i64 %0
144 }
145
146 declare <1 x i64> @llvm.aarch64.neon.fcvtnu.v1i64.f64(double)
147
148 define i32 @test_vcvtpss(float %a) {
149 ; CHECK: test_vcvtpss
150 ; CHECK: fcvtps {{s[0-9]}}, {{s[0-9]}}
151 entry:
152   %vcvtps1.i = call <1 x i32> @llvm.aarch64.neon.fcvtps.v1i32.f32(float %a)
153   %0 = extractelement <1 x i32> %vcvtps1.i, i32 0
154   ret i32 %0
155 }
156
157 declare <1 x i32> @llvm.aarch64.neon.fcvtps.v1i32.f32(float)
158
159 define i64 @test_vcvtpd_s64_f64(double %a) {
160 ; CHECK: test_vcvtpd_s64_f64
161 ; CHECK: fcvtps {{d[0-9]}}, {{d[0-9]}}
162 entry:
163   %vcvtps1.i = call <1 x i64> @llvm.aarch64.neon.fcvtps.v1i64.f64(double %a)
164   %0 = extractelement <1 x i64> %vcvtps1.i, i32 0
165   ret i64 %0
166 }
167
168 declare <1 x i64> @llvm.aarch64.neon.fcvtps.v1i64.f64(double)
169
170 define i32 @test_vcvtpus(float %a) {
171 ; CHECK: test_vcvtpus
172 ; CHECK: fcvtpu {{s[0-9]}}, {{s[0-9]}}
173 entry:
174   %vcvtpu1.i = call <1 x i32> @llvm.aarch64.neon.fcvtpu.v1i32.f32(float %a)
175   %0 = extractelement <1 x i32> %vcvtpu1.i, i32 0
176   ret i32 %0
177 }
178
179 declare <1 x i32> @llvm.aarch64.neon.fcvtpu.v1i32.f32(float)
180
181 define i64 @test_vcvtpud(double %a) {
182 ; CHECK: test_vcvtpud
183 ; CHECK: fcvtpu {{d[0-9]}}, {{d[0-9]}}
184 entry:
185   %vcvtpu1.i = call <1 x i64> @llvm.aarch64.neon.fcvtpu.v1i64.f64(double %a)
186   %0 = extractelement <1 x i64> %vcvtpu1.i, i32 0
187   ret i64 %0
188 }
189
190 declare <1 x i64> @llvm.aarch64.neon.fcvtpu.v1i64.f64(double)
191
192 define i32 @test_vcvtss(float %a) {
193 ; CHECK: test_vcvtss
194 ; CHECK: fcvtzs {{s[0-9]}}, {{s[0-9]}}
195 entry:
196   %vcvtzs1.i = call <1 x i32> @llvm.aarch64.neon.fcvtzs.v1i32.f32(float %a)
197   %0 = extractelement <1 x i32> %vcvtzs1.i, i32 0
198   ret i32 %0
199 }
200
201 declare <1 x i32> @llvm.aarch64.neon.fcvtzs.v1i32.f32(float)
202
203 define i64 @test_vcvtd_s64_f64(double %a) {
204 ; CHECK: test_vcvtd_s64_f64
205 ; CHECK: fcvtzs {{d[0-9]}}, {{d[0-9]}}
206 entry:
207   %vcvzs1.i = call <1 x i64> @llvm.aarch64.neon.fcvtzs.v1i64.f64(double %a)
208   %0 = extractelement <1 x i64> %vcvzs1.i, i32 0
209   ret i64 %0
210 }
211
212 declare <1 x i64> @llvm.aarch64.neon.fcvtzs.v1i64.f64(double)
213
214 define i32 @test_vcvtus(float %a) {
215 ; CHECK: test_vcvtus
216 ; CHECK: fcvtzu {{s[0-9]}}, {{s[0-9]}}
217 entry:
218   %vcvtzu1.i = call <1 x i32> @llvm.aarch64.neon.fcvtzu.v1i32.f32(float %a)
219   %0 = extractelement <1 x i32> %vcvtzu1.i, i32 0
220   ret i32 %0
221 }
222
223 declare <1 x i32> @llvm.aarch64.neon.fcvtzu.v1i32.f32(float)
224
225 define i64 @test_vcvtud(double %a) {
226 ; CHECK: test_vcvtud
227 ; CHECK: fcvtzu {{d[0-9]}}, {{d[0-9]}}
228 entry:
229   %vcvtzu1.i = call <1 x i64> @llvm.aarch64.neon.fcvtzu.v1i64.f64(double %a)
230   %0 = extractelement <1 x i64> %vcvtzu1.i, i32 0
231   ret i64 %0
232 }
233
234 declare <1 x i64> @llvm.aarch64.neon.fcvtzu.v1i64.f64(double)