[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / Hexagon / S3_2op.ll
blob1424169230da126f40ee56a70dca103aaa4e6918
1 ; RUN: llc -mtriple=hexagon -filetype=obj < %s -o - | llvm-objdump --no-print-imm-hex -d - | FileCheck %s
3 ; CHECK-LABEL: <f0>:
4 ; CHECK: r{{[1-9]}}:{{[0-9]}} = abs(r{{[1-9]}}:{{[0-9]}})
5 define double @f0(double %a0) #0 {
6 b0:
7   %v0 = alloca double, align 8
8   store double %a0, ptr %v0, align 8
9   %v1 = load double, ptr %v0, align 8
10   %v2 = fptosi double %v1 to i64
11   %v3 = call i64 @llvm.hexagon.A2.absp(i64 %v2)
12   %v4 = sitofp i64 %v3 to double
13   ret double %v4
16 declare i64 @llvm.hexagon.A2.absp(i64) #1
18 ; CHECK-LABEL: <f1>:
19 ; CHECK: r{{[1-9]}}:{{[0-9]}} = neg(r{{[1-9]}}:{{[0-9]}})
20 define double @f1(double %a0) #0 {
21 b0:
22   %v0 = alloca double, align 8
23   store double %a0, ptr %v0, align 8
24   %v1 = load double, ptr %v0, align 8
25   %v2 = fptosi double %v1 to i64
26   %v3 = call i64 @llvm.hexagon.A2.negp(i64 %v2)
27   %v4 = sitofp i64 %v3 to double
28   ret double %v4
31 declare i64 @llvm.hexagon.A2.negp(i64) #1
33 ; CHECK-LABEL: <f2>:
34 ; CHECK: r{{[1-9]}}:{{[0-9]}} = not(r{{[1-9]}}:{{[0-9]}})
35 define double @f2(double %a0) #0 {
36 b0:
37   %v0 = alloca double, align 8
38   store double %a0, ptr %v0, align 8
39   %v1 = load double, ptr %v0, align 8
40   %v2 = fptosi double %v1 to i64
41   %v3 = call i64 @llvm.hexagon.A2.notp(i64 %v2)
42   %v4 = sitofp i64 %v3 to double
43   ret double %v4
46 declare i64 @llvm.hexagon.A2.notp(i64) #1
48 ; CHECK-LABEL: <f3>:
49 ; CHECK: r{{[1-9]}}:{{[0-9]}} = interleave(r{{[1-9]}}:{{[0-9]}})
50 define double @f3(double %a0) #0 {
51 b0:
52   %v0 = alloca double, align 8
53   store double %a0, ptr %v0, align 8
54   %v1 = load double, ptr %v0, align 8
55   %v2 = fptosi double %v1 to i64
56   %v3 = call i64 @llvm.hexagon.S2.interleave(i64 %v2)
57   %v4 = sitofp i64 %v3 to double
58   ret double %v4
61 declare i64 @llvm.hexagon.S2.interleave(i64) #1
63 ; CHECK-LABEL: <f4>:
64 ; CHECK: r{{[1-9]}}:{{[0-9]}} = deinterleave(r{{[1-9]}}:{{[0-9]}})
65 define double @f4(double %a0) #0 {
66 b0:
67   %v0 = alloca double, align 8
68   store double %a0, ptr %v0, align 8
69   %v1 = load double, ptr %v0, align 8
70   %v2 = fptosi double %v1 to i64
71   %v3 = call i64 @llvm.hexagon.S2.deinterleave(i64 %v2)
72   %v4 = sitofp i64 %v3 to double
73   ret double %v4
76 declare i64 @llvm.hexagon.S2.deinterleave(i64) #1
78 ; CHECK-LABEL: <f5>:
79 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vconj(r{{[1-9]}}:{{[0-9]}}):sat
80 define double @f5(double %a0) #0 {
81 b0:
82   %v0 = alloca double, align 8
83   store double %a0, ptr %v0, align 8
84   %v1 = load double, ptr %v0, align 8
85   %v2 = fptosi double %v1 to i64
86   %v3 = call i64 @llvm.hexagon.A2.vconj(i64 %v2)
87   %v4 = sitofp i64 %v3 to double
88   ret double %v4
91 declare i64 @llvm.hexagon.A2.vconj(i64) #1
93 ; CHECK-LABEL: <f6>:
94 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vsathb(r{{[1-9]}}:{{[0-9]}})
95 define double @f6(double %a0) #0 {
96 b0:
97   %v0 = alloca double, align 8
98   store double %a0, ptr %v0, align 8
99   %v1 = load double, ptr %v0, align 8
100   %v2 = fptosi double %v1 to i64
101   %v3 = call i64 @llvm.hexagon.S2.vsathb.nopack(i64 %v2)
102   %v4 = sitofp i64 %v3 to double
103   ret double %v4
106 declare i64 @llvm.hexagon.S2.vsathb.nopack(i64) #1
108 ; CHECK-LABEL: <f7>:
109 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vsathub(r{{[1-9]}}:{{[0-9]}})
110 define double @f7(double %a0) #0 {
112   %v0 = alloca double, align 8
113   store double %a0, ptr %v0, align 8
114   %v1 = load double, ptr %v0, align 8
115   %v2 = fptosi double %v1 to i64
116   %v3 = call i64 @llvm.hexagon.S2.vsathub.nopack(i64 %v2)
117   %v4 = sitofp i64 %v3 to double
118   ret double %v4
121 declare i64 @llvm.hexagon.S2.vsathub.nopack(i64) #1
123 ; CHECK-LABEL: <f8>:
124 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vsatwh(r{{[1-9]}}:{{[0-9]}})
125 define double @f8(double %a0) #0 {
127   %v0 = alloca double, align 8
128   store double %a0, ptr %v0, align 8
129   %v1 = load double, ptr %v0, align 8
130   %v2 = fptosi double %v1 to i64
131   %v3 = call i64 @llvm.hexagon.S2.vsatwh.nopack(i64 %v2)
132   %v4 = sitofp i64 %v3 to double
133   ret double %v4
136 declare i64 @llvm.hexagon.S2.vsatwh.nopack(i64) #1
138 ; CHECK-LABEL: <f9>:
139 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vsatwuh(r{{[1-9]}}:{{[0-9]}})
140 define double @f9(double %a0) #0 {
142   %v0 = alloca double, align 8
143   store double %a0, ptr %v0, align 8
144   %v1 = load double, ptr %v0, align 8
145   %v2 = fptosi double %v1 to i64
146   %v3 = call i64 @llvm.hexagon.S2.vsatwuh.nopack(i64 %v2)
147   %v4 = sitofp i64 %v3 to double
148   ret double %v4
151 declare i64 @llvm.hexagon.S2.vsatwuh.nopack(i64) #1
153 ; CHECK-LABEL: <f10>:
154 ; CHECK: r{{[1-9]}}:{{[0-9]}} = asr(r{{[1-9]}}:{{[0-9]}},#1)
155 define double @f10(double %a0) #0 {
157   %v0 = alloca double, align 8
158   store double %a0, ptr %v0, align 8
159   %v1 = load double, ptr %v0, align 8
160   %v2 = fptosi double %v1 to i64
161   %v3 = call i64 @llvm.hexagon.S2.asr.i.p(i64 %v2, i32 1)
162   %v4 = sitofp i64 %v3 to double
163   ret double %v4
166 declare i64 @llvm.hexagon.S2.asr.i.p(i64, i32) #1
168 ; CHECK-LABEL: <f11>:
169 ; CHECK: r{{[1-9]}}:{{[0-9]}} = lsr(r{{[1-9]}}:{{[0-9]}},#1)
170 define double @f11(double %a0) #0 {
172   %v0 = alloca double, align 8
173   store double %a0, ptr %v0, align 8
174   %v1 = load double, ptr %v0, align 8
175   %v2 = fptosi double %v1 to i64
176   %v3 = call i64 @llvm.hexagon.S2.lsr.i.p(i64 %v2, i32 1)
177   %v4 = sitofp i64 %v3 to double
178   ret double %v4
181 declare i64 @llvm.hexagon.S2.lsr.i.p(i64, i32) #1
183 ; CHECK-LABEL: <f12>:
184 ; CHECK: r{{[1-9]}}:{{[0-9]}} = asl(r{{[1-9]}}:{{[0-9]}},#1)
185 define double @f12(double %a0) #0 {
187   %v0 = alloca double, align 8
188   store double %a0, ptr %v0, align 8
189   %v1 = load double, ptr %v0, align 8
190   %v2 = fptosi double %v1 to i64
191   %v3 = call i64 @llvm.hexagon.S2.asl.i.p(i64 %v2, i32 1)
192   %v4 = sitofp i64 %v3 to double
193   ret double %v4
196 declare i64 @llvm.hexagon.S2.asl.i.p(i64, i32) #1
198 ; CHECK-LABEL: <f13>:
199 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vabsh(r{{[1-9]}}:{{[0-9]}})
200 define double @f13(double %a0) #0 {
202   %v0 = alloca double, align 8
203   store double %a0, ptr %v0, align 8
204   %v1 = load double, ptr %v0, align 8
205   %v2 = fptosi double %v1 to i64
206   %v3 = call i64 @llvm.hexagon.A2.vabsh(i64 %v2)
207   %v4 = sitofp i64 %v3 to double
208   ret double %v4
211 declare i64 @llvm.hexagon.A2.vabsh(i64) #1
213 ; CHECK-LABEL: <f14>:
214 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vabsh(r{{[1-9]}}:{{[0-9]}}):sat
215 define double @f14(double %a0) #0 {
217   %v0 = alloca double, align 8
218   store double %a0, ptr %v0, align 8
219   %v1 = load double, ptr %v0, align 8
220   %v2 = fptosi double %v1 to i64
221   %v3 = call i64 @llvm.hexagon.A2.vabshsat(i64 %v2)
222   %v4 = sitofp i64 %v3 to double
223   ret double %v4
226 declare i64 @llvm.hexagon.A2.vabshsat(i64) #1
228 ; CHECK-LABEL: <f15>:
229 ; CHECK: r{{[0-9]}}:{{[0-9]}} = vasrh(r{{[1-9]}}:{{[0-9]}},#1)
230 define double @f15(double %a0) #0 {
232   %v0 = alloca double, align 8
233   store double %a0, ptr %v0, align 8
234   %v1 = load double, ptr %v0, align 8
235   %v2 = fptosi double %v1 to i64
236   %v3 = call i64 @llvm.hexagon.S2.asr.i.vh(i64 %v2, i32 1)
237   %v4 = sitofp i64 %v3 to double
238   ret double %v4
241 declare i64 @llvm.hexagon.S2.asr.i.vh(i64, i32) #1
243 ; CHECK-LABEL: <f16>:
244 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vlsrh(r{{[1-9]}}:{{[0-9]}},#1)
245 define double @f16(double %a0) #0 {
247   %v0 = alloca double, align 8
248   store double %a0, ptr %v0, align 8
249   %v1 = load double, ptr %v0, align 8
250   %v2 = fptosi double %v1 to i64
251   %v3 = call i64 @llvm.hexagon.S2.lsr.i.vh(i64 %v2, i32 1)
252   %v4 = sitofp i64 %v3 to double
253   ret double %v4
256 declare i64 @llvm.hexagon.S2.lsr.i.vh(i64, i32) #1
258 ; CHECK-LABEL: <f17>:
259 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vaslh(r{{[1-9]}}:{{[0-9]}},#1)
260 define double @f17(double %a0) #0 {
262   %v0 = alloca double, align 8
263   store double %a0, ptr %v0, align 8
264   %v1 = load double, ptr %v0, align 8
265   %v2 = fptosi double %v1 to i64
266   %v3 = call i64 @llvm.hexagon.S2.asl.i.vh(i64 %v2, i32 1)
267   %v4 = sitofp i64 %v3 to double
268   ret double %v4
271 declare i64 @llvm.hexagon.S2.asl.i.vh(i64, i32) #1
273 ; CHECK-LABEL: <f18>:
274 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vabsw(r{{[1-9]}}:{{[0-9]}})
275 define double @f18(double %a0) #0 {
277   %v0 = alloca double, align 8
278   store double %a0, ptr %v0, align 8
279   %v1 = load double, ptr %v0, align 8
280   %v2 = fptosi double %v1 to i64
281   %v3 = call i64 @llvm.hexagon.A2.vabsw(i64 %v2)
282   %v4 = sitofp i64 %v3 to double
283   ret double %v4
286 declare i64 @llvm.hexagon.A2.vabsw(i64) #1
288 ; CHECK-LABEL: <f19>:
289 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vabsw(r{{[1-9]}}:{{[0-9]}}):sat
290 define double @f19(double %a0) #0 {
292   %v0 = alloca double, align 8
293   store double %a0, ptr %v0, align 8
294   %v1 = load double, ptr %v0, align 8
295   %v2 = fptosi double %v1 to i64
296   %v3 = call i64 @llvm.hexagon.A2.vabswsat(i64 %v2)
297   %v4 = sitofp i64 %v3 to double
298   ret double %v4
301 declare i64 @llvm.hexagon.A2.vabswsat(i64) #1
303 ; CHECK-LABEL: <f20>:
304 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vasrw(r{{[1-9]}}:{{[0-9]}},#1)
305 define double @f20(double %a0) #0 {
307   %v0 = alloca double, align 8
308   store double %a0, ptr %v0, align 8
309   %v1 = load double, ptr %v0, align 8
310   %v2 = fptosi double %v1 to i64
311   %v3 = call i64 @llvm.hexagon.S2.asr.i.vw(i64 %v2, i32 1)
312   %v4 = sitofp i64 %v3 to double
313   ret double %v4
316 declare i64 @llvm.hexagon.S2.asr.i.vw(i64, i32) #1
318 ; CHECK-LABEL: <f21>:
319 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vlsrw(r{{[1-9]}}:{{[0-9]}},#1)
320 define double @f21(double %a0) #0 {
322   %v0 = alloca double, align 8
323   store double %a0, ptr %v0, align 8
324   %v1 = load double, ptr %v0, align 8
325   %v2 = fptosi double %v1 to i64
326   %v3 = call i64 @llvm.hexagon.S2.lsr.i.vw(i64 %v2, i32 1)
327   %v4 = sitofp i64 %v3 to double
328   ret double %v4
331 declare i64 @llvm.hexagon.S2.lsr.i.vw(i64, i32) #1
333 ; CHECK-LABEL: <f22>:
334 ; CHECK: r{{[1-9]}}:{{[0-9]}} = vaslw(r{{[1-9]}}:{{[0-9]}},#1)
335 define double @f22(double %a0) #0 {
337   %v0 = alloca double, align 8
338   store double %a0, ptr %v0, align 8
339   %v1 = load double, ptr %v0, align 8
340   %v2 = fptosi double %v1 to i64
341   %v3 = call i64 @llvm.hexagon.S2.asl.i.vw(i64 %v2, i32 1)
342   %v4 = sitofp i64 %v3 to double
343   ret double %v4
346 declare i64 @llvm.hexagon.S2.asl.i.vw(i64, i32) #1
348 ; CHECK-LABEL: <f23>:
349 ; CHECK: r{{[1-9]}}:{{[0-9]}} = brev(r{{[1-9]}}:{{[0-9]}})
350 define double @f23(double %a0) #0 {
352   %v0 = alloca double, align 8
353   store double %a0, ptr %v0, align 8
354   %v1 = load double, ptr %v0, align 8
355   %v2 = fptosi double %v1 to i64
356   %v3 = call i64 @llvm.hexagon.S2.brevp(i64 %v2)
357   %v4 = sitofp i64 %v3 to double
358   ret double %v4
361 declare i64 @llvm.hexagon.S2.brevp(i64) #1
363 attributes #0 = { nounwind }
364 attributes #1 = { nounwind readnone }