blob: e3d3a0a3d12df79d6a46fdfb6d2bac7dde2ffaa7 [file] [log] [blame]
Simon Atanasyan7f643002016-12-08 22:10:44 +00001; RUN: llc -asm-verbose=false -mtriple=mipsel-linux-gnu -relocation-model=pic < %s | FileCheck %s -check-prefix=CHECK-LIBCALL
Pirama Arumuga Nainar34056de2015-04-20 20:15:36 +00002
3; CHECK-LIBCALL-LABEL: test_fadd:
4; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
5; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
6; CHECK-LIBCALL-DAG: add.s
7; CHECK-LIBCALL-DAG: %call16(__gnu_f2h_ieee)
8define void @test_fadd(half* %p, half* %q) #0 {
9 %a = load half, half* %p, align 2
10 %b = load half, half* %q, align 2
11 %r = fadd half %a, %b
12 store half %r, half* %p
13 ret void
14}
15
16; CHECK-LIBCALL-LABEL: test_fpext_float:
17; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
18define float @test_fpext_float(half* %p) {
19 %a = load half, half* %p, align 2
20 %r = fpext half %a to float
21 ret float %r
22}
23
24; CHECK-LIBCALL-LABEL: test_fpext_double:
25; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
26; CHECK-LIBCALL: cvt.d.s
27define double @test_fpext_double(half* %p) {
28 %a = load half, half* %p, align 2
29 %r = fpext half %a to double
30 ret double %r
31}
32
33; CHECK-LIBCALL-LABEL: test_fptrunc_float:
34; CHECK-LIBCALL: %call16(__gnu_f2h_ieee)
35define void @test_fptrunc_float(float %f, half* %p) #0 {
36 %a = fptrunc float %f to half
37 store half %a, half* %p
38 ret void
39}
40
41; CHECK-LIBCALL-LABEL: test_fptrunc_double:
42; CHECK-LIBCALL: %call16(__truncdfhf2)
43define void @test_fptrunc_double(double %d, half* %p) #0 {
44 %a = fptrunc double %d to half
45 store half %a, half* %p
46 ret void
47}
48
49; CHECK-LIBCALL-LABEL: test_vec_fpext_float:
50; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
51; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
52; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
53; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
54define <4 x float> @test_vec_fpext_float(<4 x half>* %p) #0 {
55 %a = load <4 x half>, <4 x half>* %p, align 8
56 %b = fpext <4 x half> %a to <4 x float>
57 ret <4 x float> %b
58}
59
Pirama Arumuga Nainar67e82482015-04-22 18:04:12 +000060; This test is not robust against variations in instruction scheduling.
61; See the discussion in http://reviews.llvm.org/D8804
Pirama Arumuga Nainar34056de2015-04-20 20:15:36 +000062; CHECK-LIBCALL-LABEL: test_vec_fpext_double:
Pirama Arumuga Nainar67e82482015-04-22 18:04:12 +000063; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
64; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
65; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
66; CHECK-LIBCALL: cvt.d.s
67; CHECK-LIBCALL: cvt.d.s
68; CHECK-LIBCALL: cvt.d.s
69; CHECK-LIBCALL: %call16(__gnu_h2f_ieee)
Pirama Arumuga Nainar34056de2015-04-20 20:15:36 +000070; CHECK-LIBCALL: cvt.d.s
71define <4 x double> @test_vec_fpext_double(<4 x half>* %p) #0 {
72 %a = load <4 x half>, <4 x half>* %p, align 8
73 %b = fpext <4 x half> %a to <4 x double>
74 ret <4 x double> %b
75}
76
77; CHECK-LIBCALL-LABEL: test_vec_fptrunc_float:
78; CHECK-LIBCALL: %call16(__gnu_f2h_ieee)
79; CHECK-LIBCALL: %call16(__gnu_f2h_ieee)
80; CHECK-LIBCALL: %call16(__gnu_f2h_ieee)
81; CHECK-LIBCALL: %call16(__gnu_f2h_ieee)
82define void @test_vec_fptrunc_float(<4 x float> %a, <4 x half>* %p) #0 {
83 %b = fptrunc <4 x float> %a to <4 x half>
84 store <4 x half> %b, <4 x half>* %p, align 8
85 ret void
86}
87
88; CHECK-LIBCALL-LABEL: test_vec_fptrunc_double:
89; CHECK-LIBCALL: %call16(__truncdfhf2)
90; CHECK-LIBCALL: %call16(__truncdfhf2)
91; CHECK-LIBCALL: %call16(__truncdfhf2)
92; CHECK-LIBCALL: %call16(__truncdfhf2)
93define void @test_vec_fptrunc_double(<4 x double> %a, <4 x half>* %p) #0 {
94 %b = fptrunc <4 x double> %a to <4 x half>
95 store <4 x half> %b, <4 x half>* %p, align 8
96 ret void
97}
98