[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / GlobalISel / x86_64-legalize-fptosi.mir
blob194b2a7766633243b20da9323c9d1a21e920e08a
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
6   define signext i8 @float_to_int8(float %val) {
7   entry:
8     %conv = fptosi float %val to i8
9     ret i8 %conv
10   }
12   define signext i16 @float_to_int16(float %val) {
13   entry:
14     %conv = fptosi float %val to i16
15     ret i16 %conv
16   }
18   define i32 @float_to_int32(float %val) {
19   entry:
20     %conv = fptosi float %val to i32
21     ret i32 %conv
22   }
24   define i64 @float_to_int64(float %val) {
25   entry:
26     %conv = fptosi float %val to i64
27     ret i64 %conv
28   }
30   define signext i8 @double_to_int8(double %val) {
31   entry:
32     %conv = fptosi double %val to i8
33     ret i8 %conv
34   }
36   define signext i16 @double_to_int16(double %val) {
37   entry:
38     %conv = fptosi double %val to i16
39     ret i16 %conv
40   }
42   define i32 @double_to_int32(double %val) {
43   entry:
44     %conv = fptosi double %val to i32
45     ret i32 %conv
46   }
48   define i64 @double_to_int64(double %val) {
49   entry:
50     %conv = fptosi double %val to i64
51     ret i64 %conv
52   }
54 ...
55 ---
56 name:            float_to_int8
57 alignment:       4
58 tracksRegLiveness: true
59 registers:
60   - { id: 0, class: _ }
61   - { id: 1, class: _ }
62   - { id: 2, class: _ }
63 body:             |
64   bb.1.entry:
65     liveins: $xmm0
67     ; CHECK-LABEL: name: float_to_int8
68     ; CHECK: liveins: $xmm0
69     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
70     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s128)
71     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s32)
72     ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[FPTOSI]](s32)
73     ; CHECK: $al = COPY [[TRUNC1]](s8)
74     ; CHECK: RET 0, implicit $al
75     %1:_(s128) = COPY $xmm0
76     %0:_(s32) = G_TRUNC %1(s128)
77     %2:_(s8) = G_FPTOSI %0(s32)
78     $al = COPY %2(s8)
79     RET 0, implicit $al
81 ...
82 ---
83 name:            float_to_int16
84 alignment:       4
85 tracksRegLiveness: true
86 registers:
87   - { id: 0, class: _ }
88   - { id: 1, class: _ }
89   - { id: 2, class: _ }
90 body:             |
91   bb.1.entry:
92     liveins: $xmm0
94     ; CHECK-LABEL: name: float_to_int16
95     ; CHECK: liveins: $xmm0
96     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
97     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s128)
98     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s32)
99     ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[FPTOSI]](s32)
100     ; CHECK: $ax = COPY [[TRUNC1]](s16)
101     ; CHECK: RET 0, implicit $ax
102     %1:_(s128) = COPY $xmm0
103     %0:_(s32) = G_TRUNC %1(s128)
104     %2:_(s16) = G_FPTOSI %0(s32)
105     $ax = COPY %2(s16)
106     RET 0, implicit $ax
110 name:            float_to_int32
111 alignment:       4
112 tracksRegLiveness: true
113 registers:
114   - { id: 0, class: _ }
115   - { id: 1, class: _ }
116   - { id: 2, class: _ }
117 body:             |
118   bb.1.entry:
119     liveins: $xmm0
121     ; CHECK-LABEL: name: float_to_int32
122     ; CHECK: liveins: $xmm0
123     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
124     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s128)
125     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s32)
126     ; CHECK: $eax = COPY [[FPTOSI]](s32)
127     ; CHECK: RET 0, implicit $eax
128     %1:_(s128) = COPY $xmm0
129     %0:_(s32) = G_TRUNC %1(s128)
130     %2:_(s32) = G_FPTOSI %0(s32)
131     $eax = COPY %2(s32)
132     RET 0, implicit $eax
136 name:            float_to_int64
137 alignment:       4
138 tracksRegLiveness: true
139 registers:
140   - { id: 0, class: _ }
141   - { id: 1, class: _ }
142   - { id: 2, class: _ }
143 body:             |
144   bb.1.entry:
145     liveins: $xmm0
147     ; CHECK-LABEL: name: float_to_int64
148     ; CHECK: liveins: $xmm0
149     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
150     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s128)
151     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s64) = G_FPTOSI [[TRUNC]](s32)
152     ; CHECK: $rax = COPY [[FPTOSI]](s64)
153     ; CHECK: RET 0, implicit $rax
154     %1:_(s128) = COPY $xmm0
155     %0:_(s32) = G_TRUNC %1(s128)
156     %2:_(s64) = G_FPTOSI %0(s32)
157     $rax = COPY %2(s64)
158     RET 0, implicit $rax
162 name:            double_to_int8
163 alignment:       4
164 tracksRegLiveness: true
165 registers:
166   - { id: 0, class: _ }
167   - { id: 1, class: _ }
168   - { id: 2, class: _ }
169 body:             |
170   bb.1.entry:
171     liveins: $xmm0
173     ; CHECK-LABEL: name: double_to_int8
174     ; CHECK: liveins: $xmm0
175     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
176     ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY]](s128)
177     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s64)
178     ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[FPTOSI]](s32)
179     ; CHECK: $al = COPY [[TRUNC1]](s8)
180     ; CHECK: RET 0, implicit $al
181     %1:_(s128) = COPY $xmm0
182     %0:_(s64) = G_TRUNC %1(s128)
183     %2:_(s8) = G_FPTOSI %0(s64)
184     $al = COPY %2(s8)
185     RET 0, implicit $al
189 name:            double_to_int16
190 alignment:       4
191 tracksRegLiveness: true
192 registers:
193   - { id: 0, class: _ }
194   - { id: 1, class: _ }
195   - { id: 2, class: _ }
196 body:             |
197   bb.1.entry:
198     liveins: $xmm0
200     ; CHECK-LABEL: name: double_to_int16
201     ; CHECK: liveins: $xmm0
202     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
203     ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY]](s128)
204     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s64)
205     ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[FPTOSI]](s32)
206     ; CHECK: $ax = COPY [[TRUNC1]](s16)
207     ; CHECK: RET 0, implicit $ax
208     %1:_(s128) = COPY $xmm0
209     %0:_(s64) = G_TRUNC %1(s128)
210     %2:_(s16) = G_FPTOSI %0(s64)
211     $ax = COPY %2(s16)
212     RET 0, implicit $ax
216 name:            double_to_int32
217 alignment:       4
218 tracksRegLiveness: true
219 registers:
220   - { id: 0, class: _ }
221   - { id: 1, class: _ }
222   - { id: 2, class: _ }
223 body:             |
224   bb.1.entry:
225     liveins: $xmm0
227     ; CHECK-LABEL: name: double_to_int32
228     ; CHECK: liveins: $xmm0
229     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
230     ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY]](s128)
231     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[TRUNC]](s64)
232     ; CHECK: $eax = COPY [[FPTOSI]](s32)
233     ; CHECK: RET 0, implicit $eax
234     %1:_(s128) = COPY $xmm0
235     %0:_(s64) = G_TRUNC %1(s128)
236     %2:_(s32) = G_FPTOSI %0(s64)
237     $eax = COPY %2(s32)
238     RET 0, implicit $eax
242 name:            double_to_int64
243 alignment:       4
244 tracksRegLiveness: true
245 registers:
246   - { id: 0, class: _ }
247   - { id: 1, class: _ }
248   - { id: 2, class: _ }
249 body:             |
250   bb.1.entry:
251     liveins: $xmm0
253     ; CHECK-LABEL: name: double_to_int64
254     ; CHECK: liveins: $xmm0
255     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $xmm0
256     ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY]](s128)
257     ; CHECK: [[FPTOSI:%[0-9]+]]:_(s64) = G_FPTOSI [[TRUNC]](s64)
258     ; CHECK: $rax = COPY [[FPTOSI]](s64)
259     ; CHECK: RET 0, implicit $rax
260     %1:_(s128) = COPY $xmm0
261     %0:_(s64) = G_TRUNC %1(s128)
262     %2:_(s64) = G_FPTOSI %0(s64)
263     $rax = COPY %2(s64)
264     RET 0, implicit $rax