[AArch64] Fix bug in prolog clobbering live reg when shrink wrapping.
[oota-llvm.git] / test / CodeGen / AArch64 / complex-fp-to-int.ll
1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
2
3 define <2 x i64> @test_v2f32_to_signed_v2i64(<2 x float> %in) {
4 ; CHECK-LABEL: test_v2f32_to_signed_v2i64:
5 ; CHECK: fcvtl [[VAL64:v[0-9]+]].2d, v0.2s
6 ; CHECK: fcvtzs.2d v0, [[VAL64]]
7
8   %val = fptosi <2 x float> %in to <2 x i64>
9   ret <2 x i64> %val
10 }
11
12 define <2 x i64> @test_v2f32_to_unsigned_v2i64(<2 x float> %in) {
13 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i64:
14 ; CHECK: fcvtl [[VAL64:v[0-9]+]].2d, v0.2s
15 ; CHECK: fcvtzu.2d v0, [[VAL64]]
16
17   %val = fptoui <2 x float> %in to <2 x i64>
18   ret <2 x i64> %val
19 }
20
21 define <2 x i16> @test_v2f32_to_signed_v2i16(<2 x float> %in) {
22 ; CHECK-LABEL: test_v2f32_to_signed_v2i16:
23 ; CHECK: fcvtzs.2s v0, v0
24
25   %val = fptosi <2 x float> %in to <2 x i16>
26   ret <2 x i16> %val
27 }
28
29 define <2 x i16> @test_v2f32_to_unsigned_v2i16(<2 x float> %in) {
30 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i16:
31 ; CHECK: fcvtzs.2s v0, v0
32
33   %val = fptoui <2 x float> %in to <2 x i16>
34   ret <2 x i16> %val
35 }
36
37 define <2 x i8> @test_v2f32_to_signed_v2i8(<2 x float> %in) {
38 ; CHECK-LABEL: test_v2f32_to_signed_v2i8:
39 ; CHECK: fcvtzs.2s v0, v0
40
41   %val = fptosi <2 x float> %in to <2 x i8>
42   ret <2 x i8> %val
43 }
44
45 define <2 x i8> @test_v2f32_to_unsigned_v2i8(<2 x float> %in) {
46 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i8:
47 ; CHECK: fcvtzs.2s v0, v0
48
49   %val = fptoui <2 x float> %in to <2 x i8>
50   ret <2 x i8> %val
51 }
52
53 define <4 x i16> @test_v4f32_to_signed_v4i16(<4 x float> %in) {
54 ; CHECK-LABEL: test_v4f32_to_signed_v4i16:
55 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
56 ; CHECK: xtn.4h v0, [[VAL64]]
57
58   %val = fptosi <4 x float> %in to <4 x i16>
59   ret <4 x i16> %val
60 }
61
62 define <4 x i16> @test_v4f32_to_unsigned_v4i16(<4 x float> %in) {
63 ; CHECK-LABEL: test_v4f32_to_unsigned_v4i16:
64 ; CHECK: fcvtzu.4s [[VAL64:v[0-9]+]], v0
65 ; CHECK: xtn.4h v0, [[VAL64]]
66
67   %val = fptoui <4 x float> %in to <4 x i16>
68   ret <4 x i16> %val
69 }
70
71 define <4 x i8> @test_v4f32_to_signed_v4i8(<4 x float> %in) {
72 ; CHECK-LABEL: test_v4f32_to_signed_v4i8:
73 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
74 ; CHECK: xtn.4h v0, [[VAL64]]
75
76   %val = fptosi <4 x float> %in to <4 x i8>
77   ret <4 x i8> %val
78 }
79
80 define <4 x i8> @test_v4f32_to_unsigned_v4i8(<4 x float> %in) {
81 ; CHECK-LABEL: test_v4f32_to_unsigned_v4i8:
82 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
83 ; CHECK: xtn.4h v0, [[VAL64]]
84
85   %val = fptoui <4 x float> %in to <4 x i8>
86   ret <4 x i8> %val
87 }
88
89 define <2 x i32> @test_v2f64_to_signed_v2i32(<2 x double> %in) {
90 ; CHECK-LABEL: test_v2f64_to_signed_v2i32:
91 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
92 ; CHECK: xtn.2s v0, [[VAL64]]
93
94   %val = fptosi <2 x double> %in to <2 x i32>
95   ret <2 x i32> %val
96 }
97
98 define <2 x i32> @test_v2f64_to_unsigned_v2i32(<2 x double> %in) {
99 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i32:
100 ; CHECK: fcvtzu.2d [[VAL64:v[0-9]+]], v0
101 ; CHECK: xtn.2s v0, [[VAL64]]
102
103   %val = fptoui <2 x double> %in to <2 x i32>
104   ret <2 x i32> %val
105 }
106
107 define <2 x i16> @test_v2f64_to_signed_v2i16(<2 x double> %in) {
108 ; CHECK-LABEL: test_v2f64_to_signed_v2i16:
109 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
110 ; CHECK: xtn.2s v0, [[VAL64]]
111
112   %val = fptosi <2 x double> %in to <2 x i16>
113   ret <2 x i16> %val
114 }
115
116 define <2 x i16> @test_v2f64_to_unsigned_v2i16(<2 x double> %in) {
117 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i16:
118 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
119 ; CHECK: xtn.2s v0, [[VAL64]]
120
121   %val = fptoui <2 x double> %in to <2 x i16>
122   ret <2 x i16> %val
123 }
124
125 define <2 x i8> @test_v2f64_to_signed_v2i8(<2 x double> %in) {
126 ; CHECK-LABEL: test_v2f64_to_signed_v2i8:
127 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
128 ; CHECK: xtn.2s v0, [[VAL64]]
129
130   %val = fptosi <2 x double> %in to <2 x i8>
131   ret <2 x i8> %val
132 }
133
134 define <2 x i8> @test_v2f64_to_unsigned_v2i8(<2 x double> %in) {
135 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i8:
136 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
137 ; CHECK: xtn.2s v0, [[VAL64]]
138
139   %val = fptoui <2 x double> %in to <2 x i8>
140   ret <2 x i8> %val
141 }