ARM: use the proper target object format for WoA
[oota-llvm.git] / test / CodeGen / AArch64 / fcvt-fixed.ll
1 ; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -O0 | FileCheck %s
2 ; RUN: llc -verify-machineinstrs < %s -mtriple=arm64-none-linux-gnu | FileCheck %s
3 ; RUN: llc -verify-machineinstrs < %s -mtriple=arm64-apple-ios7.0 -O0
4
5 ; (The O0 test is to make sure FastISel still constrains its operands properly
6 ; and the verifier doesn't trigger).
7
8 @var32 = global i32 0
9 @var64 = global i64 0
10
11 define void @test_fcvtzs(float %flt, double %dbl) {
12 ; CHECK-LABEL: test_fcvtzs:
13
14   %fix1 = fmul float %flt, 128.0
15   %cvt1 = fptosi float %fix1 to i32
16 ; CHECK: fcvtzs {{w[0-9]+}}, {{s[0-9]+}}, #7
17   store volatile i32 %cvt1, i32* @var32
18
19   %fix2 = fmul float %flt, 4294967296.0
20   %cvt2 = fptosi float %fix2 to i32
21 ; CHECK: fcvtzs {{w[0-9]+}}, {{s[0-9]+}}, #32
22   store volatile i32 %cvt2, i32* @var32
23
24   %fix3 = fmul float %flt, 128.0
25   %cvt3 = fptosi float %fix3 to i64
26 ; CHECK: fcvtzs {{x[0-9]+}}, {{s[0-9]+}}, #7
27   store volatile i64 %cvt3, i64* @var64
28
29   %fix4 = fmul float %flt, 18446744073709551616.0
30   %cvt4 = fptosi float %fix4 to i64
31 ; CHECK: fcvtzs {{x[0-9]+}}, {{s[0-9]+}}, #64
32   store volatile i64 %cvt4, i64* @var64
33
34   %fix5 = fmul double %dbl, 128.0
35   %cvt5 = fptosi double %fix5 to i32
36 ; CHECK: fcvtzs {{w[0-9]+}}, {{d[0-9]+}}, #7
37   store volatile i32 %cvt5, i32* @var32
38
39   %fix6 = fmul double %dbl, 4294967296.0
40   %cvt6 = fptosi double %fix6 to i32
41 ; CHECK: fcvtzs {{w[0-9]+}}, {{d[0-9]+}}, #32
42   store volatile i32 %cvt6, i32* @var32
43
44   %fix7 = fmul double %dbl, 128.0
45   %cvt7 = fptosi double %fix7 to i64
46 ; CHECK: fcvtzs {{x[0-9]+}}, {{d[0-9]+}}, #7
47   store volatile i64 %cvt7, i64* @var64
48
49   %fix8 = fmul double %dbl, 18446744073709551616.0
50   %cvt8 = fptosi double %fix8 to i64
51 ; CHECK: fcvtzs {{x[0-9]+}}, {{d[0-9]+}}, #64
52   store volatile i64 %cvt8, i64* @var64
53
54   ret void
55 }
56
57 define void @test_fcvtzu(float %flt, double %dbl) {
58 ; CHECK-LABEL: test_fcvtzu:
59
60   %fix1 = fmul float %flt, 128.0
61   %cvt1 = fptoui float %fix1 to i32
62 ; CHECK: fcvtzu {{w[0-9]+}}, {{s[0-9]+}}, #7
63   store volatile i32 %cvt1, i32* @var32
64
65   %fix2 = fmul float %flt, 4294967296.0
66   %cvt2 = fptoui float %fix2 to i32
67 ; CHECK: fcvtzu {{w[0-9]+}}, {{s[0-9]+}}, #32
68   store volatile i32 %cvt2, i32* @var32
69
70   %fix3 = fmul float %flt, 128.0
71   %cvt3 = fptoui float %fix3 to i64
72 ; CHECK: fcvtzu {{x[0-9]+}}, {{s[0-9]+}}, #7
73   store volatile i64 %cvt3, i64* @var64
74
75   %fix4 = fmul float %flt, 18446744073709551616.0
76   %cvt4 = fptoui float %fix4 to i64
77 ; CHECK: fcvtzu {{x[0-9]+}}, {{s[0-9]+}}, #64
78   store volatile i64 %cvt4, i64* @var64
79
80   %fix5 = fmul double %dbl, 128.0
81   %cvt5 = fptoui double %fix5 to i32
82 ; CHECK: fcvtzu {{w[0-9]+}}, {{d[0-9]+}}, #7
83   store volatile i32 %cvt5, i32* @var32
84
85   %fix6 = fmul double %dbl, 4294967296.0
86   %cvt6 = fptoui double %fix6 to i32
87 ; CHECK: fcvtzu {{w[0-9]+}}, {{d[0-9]+}}, #32
88   store volatile i32 %cvt6, i32* @var32
89
90   %fix7 = fmul double %dbl, 128.0
91   %cvt7 = fptoui double %fix7 to i64
92 ; CHECK: fcvtzu {{x[0-9]+}}, {{d[0-9]+}}, #7
93   store volatile i64 %cvt7, i64* @var64
94
95   %fix8 = fmul double %dbl, 18446744073709551616.0
96   %cvt8 = fptoui double %fix8 to i64
97 ; CHECK: fcvtzu {{x[0-9]+}}, {{d[0-9]+}}, #64
98   store volatile i64 %cvt8, i64* @var64
99
100   ret void
101 }
102
103 @varfloat = global float 0.0
104 @vardouble = global double 0.0
105
106 define void @test_scvtf(i32 %int, i64 %long) {
107 ; CHECK-LABEL: test_scvtf:
108
109   %cvt1 = sitofp i32 %int to float
110   %fix1 = fdiv float %cvt1, 128.0
111 ; CHECK: scvtf {{s[0-9]+}}, {{w[0-9]+}}, #7
112   store volatile float %fix1, float* @varfloat
113
114   %cvt2 = sitofp i32 %int to float
115   %fix2 = fdiv float %cvt2, 4294967296.0
116 ; CHECK: scvtf {{s[0-9]+}}, {{w[0-9]+}}, #32
117   store volatile float %fix2, float* @varfloat
118
119   %cvt3 = sitofp i64 %long to float
120   %fix3 = fdiv float %cvt3, 128.0
121 ; CHECK: scvtf {{s[0-9]+}}, {{x[0-9]+}}, #7
122   store volatile float %fix3, float* @varfloat
123
124   %cvt4 = sitofp i64 %long to float
125   %fix4 = fdiv float %cvt4, 18446744073709551616.0
126 ; CHECK: scvtf {{s[0-9]+}}, {{x[0-9]+}}, #64
127   store volatile float %fix4, float* @varfloat
128
129   %cvt5 = sitofp i32 %int to double
130   %fix5 = fdiv double %cvt5, 128.0
131 ; CHECK: scvtf {{d[0-9]+}}, {{w[0-9]+}}, #7
132   store volatile double %fix5, double* @vardouble
133
134   %cvt6 = sitofp i32 %int to double
135   %fix6 = fdiv double %cvt6, 4294967296.0
136 ; CHECK: scvtf {{d[0-9]+}}, {{w[0-9]+}}, #32
137   store volatile double %fix6, double* @vardouble
138
139   %cvt7 = sitofp i64 %long to double
140   %fix7 = fdiv double %cvt7, 128.0
141 ; CHECK: scvtf {{d[0-9]+}}, {{x[0-9]+}}, #7
142   store volatile double %fix7, double* @vardouble
143
144   %cvt8 = sitofp i64 %long to double
145   %fix8 = fdiv double %cvt8, 18446744073709551616.0
146 ; CHECK: scvtf {{d[0-9]+}}, {{x[0-9]+}}, #64
147   store volatile double %fix8, double* @vardouble
148
149   ret void
150 }
151
152 define void @test_ucvtf(i32 %int, i64 %long) {
153 ; CHECK-LABEL: test_ucvtf:
154
155   %cvt1 = uitofp i32 %int to float
156   %fix1 = fdiv float %cvt1, 128.0
157 ; CHECK: ucvtf {{s[0-9]+}}, {{w[0-9]+}}, #7
158   store volatile float %fix1, float* @varfloat
159
160   %cvt2 = uitofp i32 %int to float
161   %fix2 = fdiv float %cvt2, 4294967296.0
162 ; CHECK: ucvtf {{s[0-9]+}}, {{w[0-9]+}}, #32
163   store volatile float %fix2, float* @varfloat
164
165   %cvt3 = uitofp i64 %long to float
166   %fix3 = fdiv float %cvt3, 128.0
167 ; CHECK: ucvtf {{s[0-9]+}}, {{x[0-9]+}}, #7
168   store volatile float %fix3, float* @varfloat
169
170   %cvt4 = uitofp i64 %long to float
171   %fix4 = fdiv float %cvt4, 18446744073709551616.0
172 ; CHECK: ucvtf {{s[0-9]+}}, {{x[0-9]+}}, #64
173   store volatile float %fix4, float* @varfloat
174
175   %cvt5 = uitofp i32 %int to double
176   %fix5 = fdiv double %cvt5, 128.0
177 ; CHECK: ucvtf {{d[0-9]+}}, {{w[0-9]+}}, #7
178   store volatile double %fix5, double* @vardouble
179
180   %cvt6 = uitofp i32 %int to double
181   %fix6 = fdiv double %cvt6, 4294967296.0
182 ; CHECK: ucvtf {{d[0-9]+}}, {{w[0-9]+}}, #32
183   store volatile double %fix6, double* @vardouble
184
185   %cvt7 = uitofp i64 %long to double
186   %fix7 = fdiv double %cvt7, 128.0
187 ; CHECK: ucvtf {{d[0-9]+}}, {{x[0-9]+}}, #7
188   store volatile double %fix7, double* @vardouble
189
190   %cvt8 = uitofp i64 %long to double
191   %fix8 = fdiv double %cvt8, 18446744073709551616.0
192 ; CHECK: ucvtf {{d[0-9]+}}, {{x[0-9]+}}, #64
193   store volatile double %fix8, double* @vardouble
194
195   ret void
196 }