• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -verify-machineinstrs -mtriple aarch64--- \
3# RUN: -run-pass=legalizer -mattr=+fullfp16 -global-isel %s -o - \
4# RUN: | FileCheck %s
5...
6---
7name:            test_v4f16.exp2
8alignment:       4
9tracksRegLiveness: true
10body:             |
11  bb.0:
12    liveins: $d0
13    ; CHECK-LABEL: name: test_v4f16.exp2
14    ; CHECK: liveins: $d0
15    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
16    ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
17    ; CHECK: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[UV]](s16)
18    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
19    ; CHECK: $s0 = COPY [[FPEXT]](s32)
20    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
21    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
22    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
23    ; CHECK: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
24    ; CHECK: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)
25    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
26    ; CHECK: $s0 = COPY [[FPEXT1]](s32)
27    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
28    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0
29    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
30    ; CHECK: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)
31    ; CHECK: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[UV2]](s16)
32    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
33    ; CHECK: $s0 = COPY [[FPEXT2]](s32)
34    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
35    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0
36    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
37    ; CHECK: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY3]](s32)
38    ; CHECK: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[UV3]](s16)
39    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
40    ; CHECK: $s0 = COPY [[FPEXT3]](s32)
41    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
42    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $s0
43    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
44    ; CHECK: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY4]](s32)
45    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC1]](s16), [[FPTRUNC2]](s16), [[FPTRUNC3]](s16)
46    ; CHECK: $d0 = COPY [[BUILD_VECTOR]](<4 x s16>)
47    ; CHECK: RET_ReallyLR implicit $d0
48    %0:_(<4 x s16>) = COPY $d0
49    %1:_(<4 x s16>) = G_FEXP2 %0
50    $d0 = COPY %1(<4 x s16>)
51    RET_ReallyLR implicit $d0
52
53...
54---
55name:            test_v8f16.exp2
56alignment:       4
57tracksRegLiveness: true
58body:             |
59  bb.0:
60    liveins: $q0
61    ; CHECK-LABEL: name: test_v8f16.exp2
62    ; CHECK: liveins: $q0
63    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
64    ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)
65    ; CHECK: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[UV]](s16)
66    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
67    ; CHECK: $s0 = COPY [[FPEXT]](s32)
68    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
69    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
70    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
71    ; CHECK: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
72    ; CHECK: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)
73    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
74    ; CHECK: $s0 = COPY [[FPEXT1]](s32)
75    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
76    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0
77    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
78    ; CHECK: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)
79    ; CHECK: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[UV2]](s16)
80    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
81    ; CHECK: $s0 = COPY [[FPEXT2]](s32)
82    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
83    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0
84    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
85    ; CHECK: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY3]](s32)
86    ; CHECK: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[UV3]](s16)
87    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
88    ; CHECK: $s0 = COPY [[FPEXT3]](s32)
89    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
90    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $s0
91    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
92    ; CHECK: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY4]](s32)
93    ; CHECK: [[FPEXT4:%[0-9]+]]:_(s32) = G_FPEXT [[UV4]](s16)
94    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
95    ; CHECK: $s0 = COPY [[FPEXT4]](s32)
96    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
97    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $s0
98    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
99    ; CHECK: [[FPTRUNC4:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY5]](s32)
100    ; CHECK: [[FPEXT5:%[0-9]+]]:_(s32) = G_FPEXT [[UV5]](s16)
101    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
102    ; CHECK: $s0 = COPY [[FPEXT5]](s32)
103    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
104    ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY $s0
105    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
106    ; CHECK: [[FPTRUNC5:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY6]](s32)
107    ; CHECK: [[FPEXT6:%[0-9]+]]:_(s32) = G_FPEXT [[UV6]](s16)
108    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
109    ; CHECK: $s0 = COPY [[FPEXT6]](s32)
110    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
111    ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY $s0
112    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
113    ; CHECK: [[FPTRUNC6:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY7]](s32)
114    ; CHECK: [[FPEXT7:%[0-9]+]]:_(s32) = G_FPEXT [[UV7]](s16)
115    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
116    ; CHECK: $s0 = COPY [[FPEXT7]](s32)
117    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
118    ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY $s0
119    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
120    ; CHECK: [[FPTRUNC7:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY8]](s32)
121    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC1]](s16), [[FPTRUNC2]](s16), [[FPTRUNC3]](s16), [[FPTRUNC4]](s16), [[FPTRUNC5]](s16), [[FPTRUNC6]](s16), [[FPTRUNC7]](s16)
122    ; CHECK: $q0 = COPY [[BUILD_VECTOR]](<8 x s16>)
123    ; CHECK: RET_ReallyLR implicit $q0
124    %0:_(<8 x s16>) = COPY $q0
125    %1:_(<8 x s16>) = G_FEXP2 %0
126    $q0 = COPY %1(<8 x s16>)
127    RET_ReallyLR implicit $q0
128
129...
130---
131name:            test_v2f32.exp2
132alignment:       4
133tracksRegLiveness: true
134body:             |
135  bb.0:
136    liveins: $d0
137    ; CHECK-LABEL: name: test_v2f32.exp2
138    ; CHECK: liveins: $d0
139    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
140    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
141    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
142    ; CHECK: $s0 = COPY [[UV]](s32)
143    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
144    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
145    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
146    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
147    ; CHECK: $s0 = COPY [[UV1]](s32)
148    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
149    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0
150    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
151    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32)
152    ; CHECK: $d0 = COPY [[BUILD_VECTOR]](<2 x s32>)
153    ; CHECK: RET_ReallyLR implicit $d0
154    %0:_(<2 x s32>) = COPY $d0
155    %1:_(<2 x s32>) = G_FEXP2 %0
156    $d0 = COPY %1(<2 x s32>)
157    RET_ReallyLR implicit $d0
158
159...
160---
161name:            test_v4f32.exp2
162alignment:       4
163tracksRegLiveness: true
164body:             |
165  bb.0:
166    liveins: $q0
167    ; CHECK-LABEL: name: test_v4f32.exp2
168    ; CHECK: liveins: $q0
169    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
170    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
171    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
172    ; CHECK: $s0 = COPY [[UV]](s32)
173    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
174    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
175    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
176    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
177    ; CHECK: $s0 = COPY [[UV1]](s32)
178    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
179    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0
180    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
181    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
182    ; CHECK: $s0 = COPY [[UV2]](s32)
183    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
184    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0
185    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
186    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
187    ; CHECK: $s0 = COPY [[UV3]](s32)
188    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
189    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $s0
190    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
191    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32)
192    ; CHECK: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)
193    ; CHECK: RET_ReallyLR implicit $q0
194    %0:_(<4 x s32>) = COPY $q0
195    %1:_(<4 x s32>) = G_FEXP2 %0
196    $q0 = COPY %1(<4 x s32>)
197    RET_ReallyLR implicit $q0
198
199...
200---
201name:            test_v2f64.exp2
202alignment:       4
203tracksRegLiveness: true
204body:             |
205  bb.0:
206    liveins: $q0
207    ; CHECK-LABEL: name: test_v2f64.exp2
208    ; CHECK: liveins: $q0
209    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
210    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
211    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
212    ; CHECK: $d0 = COPY [[UV]](s64)
213    ; CHECK: BL &exp2, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0
214    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $d0
215    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
216    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
217    ; CHECK: $d0 = COPY [[UV1]](s64)
218    ; CHECK: BL &exp2, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0
219    ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $d0
220    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
221    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[COPY1]](s64), [[COPY2]](s64)
222    ; CHECK: $q0 = COPY [[BUILD_VECTOR]](<2 x s64>)
223    ; CHECK: RET_ReallyLR implicit $q0
224    %0:_(<2 x s64>) = COPY $q0
225    %1:_(<2 x s64>) = G_FEXP2 %0
226    $q0 = COPY %1(<2 x s64>)
227    RET_ReallyLR implicit $q0
228
229...
230---
231name:            test_exp2_half
232alignment:       4
233tracksRegLiveness: true
234body:             |
235  bb.0:
236    liveins: $h0
237    ; CHECK-LABEL: name: test_exp2_half
238    ; CHECK: liveins: $h0
239    ; CHECK: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
240    ; CHECK: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[COPY]](s16)
241    ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
242    ; CHECK: $s0 = COPY [[FPEXT]](s32)
243    ; CHECK: BL &exp2f, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit-def $s0
244    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
245    ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
246    ; CHECK: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
247    ; CHECK: $h0 = COPY [[FPTRUNC]](s16)
248    ; CHECK: RET_ReallyLR implicit $h0
249    %0:_(s16) = COPY $h0
250    %1:_(s16) = G_FEXP2 %0
251    $h0 = COPY %1(s16)
252    RET_ReallyLR implicit $h0
253