• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=hexagon < %s | FileCheck %s
2
3; CHECK-LABEL: @t1
4; CHECK: r{{[0-9]+}}:{{[0-9]+}} += dfmpylh(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
5define dso_local double @t1(double %a, double %b, double %c) local_unnamed_addr #0 {
6entry:
7  %0 = tail call double @llvm.hexagon.F2.dfmpylh(double %a, double %b, double %c) #2
8  ret double %0
9}
10
11declare double @llvm.hexagon.F2.dfmpylh(double, double, double) #1
12
13; CHECK-LABEL: @t2
14; CHECK: r{{[0-9]+}}:{{[0-9]+}} += dfmpyhh(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
15define dso_local double @t2(double %a, double %b, double %c) local_unnamed_addr #0 {
16entry:
17  %0 = tail call double @llvm.hexagon.F2.dfmpyhh(double %a, double %b, double %c) #2
18  ret double %0
19}
20
21declare double @llvm.hexagon.F2.dfmpyhh(double, double, double) #1
22
23; CHECK-LABEL: @t3
24; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmax(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
25define dso_local double @t3(double %a, double %b) local_unnamed_addr #0 {
26entry:
27  %0 = tail call double @llvm.hexagon.F2.dfmax(double %a, double %b) #2
28  ret double %0
29}
30
31declare double @llvm.hexagon.F2.dfmax(double, double) #1
32
33; CHECK-LABEL: @t4
34; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmin(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
35define dso_local double @t4(double %a, double %b) local_unnamed_addr #0 {
36entry:
37  %0 = tail call double @llvm.hexagon.F2.dfmin(double %a, double %b) #2
38  ret double %0
39}
40
41declare double @llvm.hexagon.F2.dfmin(double, double) #1
42
43; CHECK-LABEL: @t5
44; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmpyfix(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
45define dso_local double @t5(double %a, double %b) local_unnamed_addr #0 {
46entry:
47  %0 = tail call double @llvm.hexagon.F2.dfmpyfix(double %a, double %b) #2
48  ret double %0
49}
50
51declare double @llvm.hexagon.F2.dfmpyfix(double, double) #1
52
53; CHECK-LABEL: @t6
54; CHECK: r{{[0-9]+}}:{{[0-9]+}} = dfmpyll(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}})
55define dso_local double @t6(double %a, double %b) local_unnamed_addr #0 {
56entry:
57  %0 = tail call double @llvm.hexagon.F2.dfmpyll(double %a, double %b) #2
58  ret double %0
59}
60
61declare double @llvm.hexagon.F2.dfmpyll(double, double) #1
62
63; CHECK-LABEL: @t7
64; CHECK:r{{[0-9]+}}:{{[0-9]+}} = cmpyrw(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}*)
65define dso_local i64 @t7(i64 %a, i64 %b) local_unnamed_addr #0 {
66entry:
67  %0 = tail call i64 @llvm.hexagon.M7.vdmpy(i64 %a, i64 %b)
68  ret i64 %0
69}
70
71declare i64 @llvm.hexagon.M7.vdmpy(i64, i64) #1
72
73; CHECK-LABEL: @t8
74; CHECK:r{{[0-9]+}}:{{[0-9]+}} += cmpyrw(r{{[0-9]+}}:{{[0-9]+}},r{{[0-9]+}}:{{[0-9]+}}*)
75define dso_local i64 @t8(i64 %a, i64 %b, i64 %c) local_unnamed_addr #0 {
76entry:
77  %0 = tail call i64 @llvm.hexagon.M7.vdmpy.acc(i64 %a, i64 %b, i64 %c)
78  ret i64 %0
79}
80
81declare i64 @llvm.hexagon.M7.vdmpy.acc(i64, i64, i64) #1
82
83; CHECK-LABEL: @t9
84; CHECK: r1:0 = cmpyrw(r1:0,r3:2)
85define i64 @t9(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
86entry:
87  %0 = tail call i64 @llvm.hexagon.M7.dcmpyrw(i64 %rss, i64 %rtt)
88  ret i64 %0
89}
90
91declare i64 @llvm.hexagon.M7.dcmpyrw(i64, i64) #1
92
93; CHECK-LABEL: @t10
94; CHECK: r1:0 += cmpyrw(r3:2,r5:4)
95define i64 @t10(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 {
96entry:
97  %0 = tail call i64 @llvm.hexagon.M7.dcmpyrw.acc(i64 %rxx, i64 %rss, i64 %rtt)
98  ret i64 %0
99}
100
101declare i64 @llvm.hexagon.M7.dcmpyrw.acc(i64, i64, i64) #1
102
103; CHECK-LABEL: @t11
104; CHECK: r1:0 = cmpyrw(r1:0,r3:2*)
105define i64 @t11(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
106entry:
107  %0 = tail call i64 @llvm.hexagon.M7.dcmpyrwc(i64 %rss, i64 %rtt)
108  ret i64 %0
109}
110
111declare i64 @llvm.hexagon.M7.dcmpyrwc(i64, i64) #1
112
113; CHECK-LABEL: @t12
114; CHECK: r1:0 += cmpyrw(r3:2,r5:4*)
115define i64 @t12(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 {
116entry:
117  %0 = tail call i64 @llvm.hexagon.M7.dcmpyrwc.acc(i64 %rxx, i64 %rss, i64 %rtt)
118  ret i64 %0
119}
120
121declare i64 @llvm.hexagon.M7.dcmpyrwc.acc(i64, i64, i64) #1
122
123; CHECK-LABEL: @t13
124; CHECK: r1:0 = cmpyiw(r1:0,r3:2)
125define i64 @t13(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
126entry:
127  %0 = tail call i64 @llvm.hexagon.M7.dcmpyiw(i64 %rss, i64 %rtt)
128  ret i64 %0
129}
130
131declare i64 @llvm.hexagon.M7.dcmpyiw(i64, i64) #1
132
133; CHECK-LABEL: @t14
134; CHECK: r1:0 += cmpyiw(r3:2,r5:4)
135define i64 @t14(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 {
136entry:
137  %0 = tail call i64 @llvm.hexagon.M7.dcmpyiw.acc(i64 %rxx, i64 %rss, i64 %rtt)
138  ret i64 %0
139}
140
141declare i64 @llvm.hexagon.M7.dcmpyiw.acc(i64, i64, i64) #1
142
143; CHECK-LABEL: @t15
144; CHECK: r1:0 = cmpyiw(r1:0,r3:2*)
145define i64 @t15(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
146entry:
147  %0 = tail call i64 @llvm.hexagon.M7.dcmpyiwc(i64 %rss, i64 %rtt)
148  ret i64 %0
149}
150
151declare i64 @llvm.hexagon.M7.dcmpyiwc(i64, i64) #1
152
153; CHECK-LABEL: @t16
154; CHECK: r1:0 += cmpyiw(r3:2,r5:4*)
155define i64 @t16(i64 %rxx, i64 %rss, i64 %rtt) local_unnamed_addr #0 {
156entry:
157  %0 = tail call i64 @llvm.hexagon.M7.dcmpyiwc.acc(i64 %rxx, i64 %rss, i64 %rtt)
158  ret i64 %0
159}
160
161declare i64 @llvm.hexagon.M7.dcmpyiwc.acc(i64, i64, i64) #1
162
163; CHECK-LABEL: @t17
164; CHECK: r0 = cmpyrw(r1:0,r3:2):<<1:sat
165define i32 @t17(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
166entry:
167  %0 = tail call i32 @llvm.hexagon.M7.wcmpyrw(i64 %rss, i64 %rtt)
168  ret i32 %0
169}
170
171declare i32 @llvm.hexagon.M7.wcmpyrw(i64, i64) #1
172
173; CHECK-LABEL: @t18
174; CHECK: r0 = cmpyrw(r1:0,r3:2*):<<1:sat
175define i32 @t18(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
176entry:
177  %0 = tail call i32 @llvm.hexagon.M7.wcmpyrwc(i64 %rss, i64 %rtt)
178  ret i32 %0
179}
180
181declare i32 @llvm.hexagon.M7.wcmpyrwc(i64, i64) #1
182
183; CHECK-LABEL: @t19
184; CHECK: r0 = cmpyiw(r1:0,r3:2):<<1:sat
185define i32 @t19(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
186entry:
187  %0 = tail call i32 @llvm.hexagon.M7.wcmpyiw(i64 %rss, i64 %rtt)
188  ret i32 %0
189}
190
191declare i32 @llvm.hexagon.M7.wcmpyiw(i64, i64) #1
192
193; CHECK-LABEL: @t20
194; CHECK: r0 = cmpyiw(r1:0,r3:2*):<<1:sat
195define i32 @t20(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
196entry:
197  %0 = tail call i32 @llvm.hexagon.M7.wcmpyiwc(i64 %rss, i64 %rtt)
198  ret i32 %0
199}
200
201declare i32 @llvm.hexagon.M7.wcmpyiwc(i64, i64) #1
202
203; CHECK-LABEL: @t21
204; CHECK: r0 = cmpyrw(r1:0,r3:2):<<1:rnd:sat
205define i32 @t21(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
206entry:
207  %0 = tail call i32 @llvm.hexagon.M7.wcmpyrw.rnd(i64 %rss, i64 %rtt)
208  ret i32 %0
209}
210
211declare i32 @llvm.hexagon.M7.wcmpyrw.rnd(i64, i64) #1
212
213; CHECK-LABEL: @t22
214; CHECK: r0 = cmpyrw(r1:0,r3:2*):<<1:rnd:sat
215define i32 @t22(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
216entry:
217  %0 = tail call i32 @llvm.hexagon.M7.wcmpyrwc.rnd(i64 %rss, i64 %rtt)
218  ret i32 %0
219}
220
221declare i32 @llvm.hexagon.M7.wcmpyrwc.rnd(i64, i64) #1
222
223; CHECK-LABEL: @t23
224; CHECK: r0 = cmpyiw(r1:0,r3:2):<<1:rnd:sat
225define i32 @t23(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
226entry:
227  %0 = tail call i32 @llvm.hexagon.M7.wcmpyiw.rnd(i64 %rss, i64 %rtt)
228  ret i32 %0
229}
230
231declare i32 @llvm.hexagon.M7.wcmpyiw.rnd(i64, i64) #1
232
233; CHECK-LABEL: @t24
234; CHECK: r0 = cmpyiw(r1:0,r3:2*):<<1:rnd:sat
235define i32 @t24(i64 %rss, i64 %rtt) local_unnamed_addr #0 {
236entry:
237  %0 = tail call i32 @llvm.hexagon.M7.wcmpyiwc.rnd(i64 %rss, i64 %rtt)
238  ret i32 %0
239}
240
241declare i32 @llvm.hexagon.M7.wcmpyiwc.rnd(i64, i64) #1
242
243; CHECK-LABEL: @t25
244; CHECK: r1:0 = cround(r1:0,#0)
245define i64 @t25(i64 %rss) local_unnamed_addr #0 {
246entry:
247  %0 = tail call i64 @llvm.hexagon.A7.croundd.ri(i64 %rss, i32 0)
248  ret i64 %0
249}
250
251declare i64 @llvm.hexagon.A7.croundd.ri(i64, i32) #1
252
253; CHECK-LABEL: @t26
254; CHECK: r1:0 = cround(r1:0,r2)
255define i64 @t26(i64 %rss, i32 %rt) local_unnamed_addr #0 {
256entry:
257  %0 = tail call i64 @llvm.hexagon.A7.croundd.rr(i64 %rss, i32 %rt)
258  ret i64 %0
259}
260
261declare i64 @llvm.hexagon.A7.croundd.rr(i64, i32) #1
262
263; CHECK-LABEL: @t27
264; CHECK: r0 = clip(r0,#0)
265define i32 @t27(i32 %rs) local_unnamed_addr #0 {
266entry:
267  %0 = tail call i32 @llvm.hexagon.A7.clip(i32 %rs, i32 0)
268  ret i32 %0
269}
270
271declare i32 @llvm.hexagon.A7.clip(i32, i32) #1
272
273; CHECK-LABEL: @t28
274; CHECK: r1:0 = vclip(r1:0,#0)
275define i64 @t28(i64 %rs) local_unnamed_addr #0 {
276entry:
277  %0 = tail call i64 @llvm.hexagon.A7.vclip(i64 %rs, i32 0)
278  ret i64 %0
279}
280
281declare i64 @llvm.hexagon.A7.vclip(i64, i32) #1
282
283attributes #0 = { nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv67" "target-features"="-long-calls" "unsafe-fp-math"="false" "use-soft-float"="false" }
284attributes #1 = { readnone }
285attributes #2 = { nounwind }
286