1 ; RUN: llc -march=hexagon -O0 < %s | FileCheck %s
2 ; RUN: llc -march=hexagon -O0 < %s | FileCheck -check-prefix=CHECK-CALL %s
3 ; Hexagon Programmer's Reference Manual 11.1.1 ALU32/ALU
8 declare i32 @llvm.hexagon.A2.addi(i32, i32)
9 define i32 @A2_addi(i32 %a) {
10 %z = call i32 @llvm.hexagon.A2.addi(i32 %a, i32 0)
13 ; CHECK: = add({{.*}},#0)
15 declare i32 @llvm.hexagon.A2.add(i32, i32)
16 define i32 @A2_add(i32 %a, i32 %b) {
17 %z = call i32 @llvm.hexagon.A2.add(i32 %a, i32 %b)
20 ; CHECK: = add({{.*}},{{.*}})
22 declare i32 @llvm.hexagon.A2.addsat(i32, i32)
23 define i32 @A2_addsat(i32 %a, i32 %b) {
24 %z = call i32 @llvm.hexagon.A2.addsat(i32 %a, i32 %b)
27 ; CHECK: = add({{.*}},{{.*}}):sat
30 declare i32 @llvm.hexagon.A2.and(i32, i32)
31 define i32 @A2_and(i32 %a, i32 %b) {
32 %z = call i32 @llvm.hexagon.A2.and(i32 %a, i32 %b)
35 ; CHECK: = and({{.*}},{{.*}})
37 declare i32 @llvm.hexagon.A2.or(i32, i32)
38 define i32 @A2_or(i32 %a, i32 %b) {
39 %z = call i32 @llvm.hexagon.A2.or(i32 %a, i32 %b)
42 ; CHECK: = or({{.*}},{{.*}})
44 declare i32 @llvm.hexagon.A2.xor(i32, i32)
45 define i32 @A2_xor(i32 %a, i32 %b) {
46 %z = call i32 @llvm.hexagon.A2.xor(i32 %a, i32 %b)
49 ; CHECK: = xor({{.*}},{{.*}})
51 declare i32 @llvm.hexagon.A4.andn(i32, i32)
52 define i32 @A4_andn(i32 %a, i32 %b) {
53 %z = call i32 @llvm.hexagon.A4.andn(i32 %a, i32 %b)
56 ; CHECK: = and({{.*}},~{{.*}})
58 declare i32 @llvm.hexagon.A4.orn(i32, i32)
59 define i32 @A4_orn(i32 %a, i32 %b) {
60 %z = call i32 @llvm.hexagon.A4.orn(i32 %a, i32 %b)
63 ; CHECK: = or({{.*}},~{{.*}})
66 declare i32 @llvm.hexagon.A2.sub(i32, i32)
67 define i32 @A2_sub(i32 %a, i32 %b) {
68 %z = call i32 @llvm.hexagon.A2.sub(i32 %a, i32 %b)
71 ; CHECK: = sub({{.*}},{{.*}})
73 declare i32 @llvm.hexagon.A2.subsat(i32, i32)
74 define i32 @A2_subsat(i32 %a, i32 %b) {
75 %z = call i32 @llvm.hexagon.A2.subsat(i32 %a, i32 %b)
78 ; CHECK: = sub({{.*}},{{.*}}):sat
81 declare i32 @llvm.hexagon.A2.sxtb(i32)
82 define i32 @A2_sxtb(i32 %a) {
83 %z = call i32 @llvm.hexagon.A2.sxtb(i32 %a)
86 ; CHECK: = sxtb({{.*}})
88 declare i32 @llvm.hexagon.A2.sxth(i32)
89 define i32 @A2_sxth(i32 %a) {
90 %z = call i32 @llvm.hexagon.A2.sxth(i32 %a)
93 ; CHECK: = sxth({{.*}})
96 declare i32 @llvm.hexagon.A2.tfril(i32, i32)
97 define i32 @A2_tfril(i32 %a) {
98 %z = call i32 @llvm.hexagon.A2.tfril(i32 %a, i32 0)
103 declare i32 @llvm.hexagon.A2.tfrih(i32, i32)
104 define i32 @A2_tfrih(i32 %a) {
105 %z = call i32 @llvm.hexagon.A2.tfrih(i32 %a, i32 0)
110 declare i32 @llvm.hexagon.A2.tfrsi(i32)
111 define i32 @A2_tfrsi() {
112 %z = call i32 @llvm.hexagon.A2.tfrsi(i32 0)
118 declare i32 @llvm.hexagon.A2.tfr(i32)
119 define i32 @A2_tfr(i32 %a) {
120 %z = call i32 @llvm.hexagon.A2.tfr(i32 %a)
125 ; Vector add halfwords
126 declare i32 @llvm.hexagon.A2.svaddh(i32, i32)
127 define i32 @A2_svaddh(i32 %a, i32 %b) {
128 %z = call i32 @llvm.hexagon.A2.svaddh(i32 %a, i32 %b)
131 ; CHECK: = vaddh({{.*}},{{.*}})
133 declare i32 @llvm.hexagon.A2.svaddhs(i32, i32)
134 define i32 @A2_svaddhs(i32 %a, i32 %b) {
135 %z = call i32 @llvm.hexagon.A2.svaddhs(i32 %a, i32 %b)
138 ; CHECK: = vaddh({{.*}},{{.*}}):sat
140 declare i32 @llvm.hexagon.A2.svadduhs(i32, i32)
141 define i32 @A2_svadduhs(i32 %a, i32 %b) {
142 %z = call i32 @llvm.hexagon.A2.svadduhs(i32 %a, i32 %b)
145 ; CHECK: = vadduh({{.*}},{{.*}}):sat
147 ; Vector average halfwords
148 declare i32 @llvm.hexagon.A2.svavgh(i32, i32)
149 define i32 @A2_svavgh(i32 %a, i32 %b) {
150 %z = call i32 @llvm.hexagon.A2.svavgh(i32 %a, i32 %b)
153 ; CHECK: = vavgh({{.*}},{{.*}})
155 declare i32 @llvm.hexagon.A2.svavghs(i32, i32)
156 define i32 @A2_svavghs(i32 %a, i32 %b) {
157 %z = call i32 @llvm.hexagon.A2.svavghs(i32 %a, i32 %b)
160 ; CHECK: = vavgh({{.*}},{{.*}}):rnd
162 declare i32 @llvm.hexagon.A2.svnavgh(i32, i32)
163 define i32 @A2_svnavgh(i32 %a, i32 %b) {
164 %z = call i32 @llvm.hexagon.A2.svnavgh(i32 %a, i32 %b)
167 ; CHECK: = vnavgh({{.*}},{{.*}})
169 ; Vector subtract halfwords
170 declare i32 @llvm.hexagon.A2.svsubh(i32, i32)
171 define i32 @A2_svsubh(i32 %a, i32 %b) {
172 %z = call i32 @llvm.hexagon.A2.svsubh(i32 %a, i32 %b)
175 ; CHECK: = vsubh({{.*}},{{.*}})
177 declare i32 @llvm.hexagon.A2.svsubhs(i32, i32)
178 define i32 @A2_svsubhs(i32 %a, i32 %b) {
179 %z = call i32 @llvm.hexagon.A2.svsubhs(i32 %a, i32 %b)
182 ; CHECK: = vsubh({{.*}},{{.*}}):sat
184 declare i32 @llvm.hexagon.A2.svsubuhs(i32, i32)
185 define i32 @A2_svsubuhs(i32 %a, i32 %b) {
186 %z = call i32 @llvm.hexagon.A2.svsubuhs(i32 %a, i32 %b)
189 ; CHECK: = vsubuh({{.*}},{{.*}}):sat
192 declare i32 @llvm.hexagon.A2.zxth(i32)
193 define i32 @A2_zxth(i32 %a) {
194 %z = call i32 @llvm.hexagon.A2.zxth(i32 %a)
197 ; CHECK: = zxth({{.*}})