xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/intrinsics/cr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon -O0 < %s | FileCheck -check-prefix=CHECK-CALL %s
3*9880d681SAndroid Build Coastguard Worker; Hexagon Programmer's Reference Manual 11.2 CR
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-CALL-NOT: call
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; Corner detection acceleration
8*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.fastcorner9(i32, i32)
9*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_fastcorner9(i32 %a, i32 %b) {
10*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
11*9880d681SAndroid Build Coastguard Worker  ret i32 %z
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker; CHECK: = fastcorner9({{.*}}, {{.*}})
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.fastcorner9.not(i32, i32)
16*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_fastcorner9_not(i32 %a, i32 %b) {
17*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
18*9880d681SAndroid Build Coastguard Worker  ret i32 %z
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker; CHECK: = !fastcorner9({{.*}}, {{.*}})
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; Logical reductions on predicates
23*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.any8(i32)
24*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_any8(i32 %a) {
25*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a)
26*9880d681SAndroid Build Coastguard Worker  ret i32 %z
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker; CHECK: = any8({{.*}})
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.all8(i32)
31*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_all8(i32 %a) {
32*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a)
33*9880d681SAndroid Build Coastguard Worker  ret i32 %z
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; CHECK: = all8({{.*}})
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; Logical operations on predicates
39*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.and(i32, i32)
40*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_and(i32 %a, i32 %b) {
41*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
42*9880d681SAndroid Build Coastguard Worker  ret i32 %z
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, {{.*}})
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.and.and(i32, i32, i32)
47*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_and_and(i32 %a, i32 %b, i32 %c) {
48*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
49*9880d681SAndroid Build Coastguard Worker  ret i32 %z
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, and({{.*}}, {{.*}}))
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.or(i32, i32)
54*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_or(i32 %a, i32 %b) {
55*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
56*9880d681SAndroid Build Coastguard Worker  ret i32 %z
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, {{.*}})
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.and.or(i32, i32, i32)
61*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_and_or(i32 %a, i32 %b, i32 %c) {
62*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
63*9880d681SAndroid Build Coastguard Worker  ret i32 %z
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, or({{.*}}, {{.*}}))
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.xor(i32, i32)
68*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_xor(i32 %a, i32 %b) {
69*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
70*9880d681SAndroid Build Coastguard Worker  ret i32 %z
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker; CHECK: = xor({{.*}}, {{.*}})
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.or.and(i32, i32, i32)
75*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_or_and(i32 %a, i32 %b, i32 %c) {
76*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
77*9880d681SAndroid Build Coastguard Worker  ret i32 %z
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, and({{.*}}, {{.*}}))
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.andn(i32, i32)
82*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_andn(i32 %a, i32 %b) {
83*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
84*9880d681SAndroid Build Coastguard Worker  ret i32 %z
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, !{{.*}})
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.or.or(i32, i32, i32)
89*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_or_or(i32 %a, i32 %b, i32 %c) {
90*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
91*9880d681SAndroid Build Coastguard Worker  ret i32 %z
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, or({{.*}}, {{.*}}))
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.and.andn(i32, i32, i32)
96*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_and_andn(i32 %a, i32 %b, i32 %c) {
97*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
98*9880d681SAndroid Build Coastguard Worker  ret i32 %z
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, and({{.*}}, !{{.*}}))
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.and.orn(i32, i32, i32)
103*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_and_orn(i32 %a, i32 %b, i32 %c) {
104*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
105*9880d681SAndroid Build Coastguard Worker  ret i32 %z
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker; CHECK: = and({{.*}}, or({{.*}}, !{{.*}}))
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.not(i32)
110*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_not(i32 %a) {
111*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a)
112*9880d681SAndroid Build Coastguard Worker  ret i32 %z
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker; CHECK: = not({{.*}})
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.or.andn(i32, i32, i32)
117*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_or_andn(i32 %a, i32 %b, i32 %c) {
118*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
119*9880d681SAndroid Build Coastguard Worker  ret i32 %z
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, and({{.*}}, !{{.*}}))
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C2.orn(i32, i32)
124*9880d681SAndroid Build Coastguard Workerdefine i32 @C2_orn(i32 %a, i32 %b) {
125*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b)
126*9880d681SAndroid Build Coastguard Worker  ret i32 %z
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, !{{.*}})
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.hexagon.C4.or.orn(i32, i32, i32)
131*9880d681SAndroid Build Coastguard Workerdefine i32 @C4_or_orn(i32 %a, i32 %b, i32 %c) {
132*9880d681SAndroid Build Coastguard Worker  %z = call [email protected](i32 %a, i32 %b, i32 %c)
133*9880d681SAndroid Build Coastguard Worker  ret i32 %z
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker; CHECK: = or({{.*}}, or({{.*}}, !{{.*}}))
136