xref: /llvm-project/llvm/test/CodeGen/RISCV/condbinops.ll (revision cb15e657b5ef5682a9fbda8d881d12cf8d8da79e)
1*cb15e657SMikhail Gudim; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I
3*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I
4*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS
5*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV
6*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV32ZICOND
7*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV64ZICOND
8*cb15e657SMikhail Gudim
9*cb15e657SMikhail Gudimdefine i32 @shl32(i32 %x, i32 %y, i1 %c) {
10*cb15e657SMikhail Gudim; RV32I-LABEL: shl32:
11*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
12*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a2, a2, 1
13*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a2, .LBB0_2
14*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
15*cb15e657SMikhail Gudim; RV32I-NEXT:    sll a0, a0, a1
16*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB0_2:
17*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
18*cb15e657SMikhail Gudim;
19*cb15e657SMikhail Gudim; RV64I-LABEL: shl32:
20*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
21*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
22*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB0_2
23*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
24*cb15e657SMikhail Gudim; RV64I-NEXT:    sllw a0, a0, a1
25*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB0_2:
26*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
27*cb15e657SMikhail Gudim;
28*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl32:
29*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
30*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
31*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sllw a1, a0, a1
32*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
33*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
34*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
35*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
36*cb15e657SMikhail Gudim;
37*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl32:
38*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
39*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
40*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sllw a1, a0, a1
41*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
42*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
43*cb15e657SMikhail Gudim;
44*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl32:
45*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
46*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
47*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sll a1, a0, a1
48*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
49*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
50*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a1, a0
51*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
52*cb15e657SMikhail Gudim;
53*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl32:
54*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
55*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
56*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sllw a1, a0, a1
57*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
58*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
59*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
60*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
61*cb15e657SMikhail Gudim  %binop = shl i32 %x, %y
62*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
63*cb15e657SMikhail Gudim  ret i32 %select_
64*cb15e657SMikhail Gudim}
65*cb15e657SMikhail Gudim
66*cb15e657SMikhail Gudimdefine i32 @ashr32(i32 %x, i32 %y, i1 %c) {
67*cb15e657SMikhail Gudim; RV32I-LABEL: ashr32:
68*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
69*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a2, a2, 1
70*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a2, .LBB1_2
71*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
72*cb15e657SMikhail Gudim; RV32I-NEXT:    sra a0, a0, a1
73*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB1_2:
74*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
75*cb15e657SMikhail Gudim;
76*cb15e657SMikhail Gudim; RV64I-LABEL: ashr32:
77*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
78*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
79*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB1_2
80*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
81*cb15e657SMikhail Gudim; RV64I-NEXT:    sraw a0, a0, a1
82*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB1_2:
83*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
84*cb15e657SMikhail Gudim;
85*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr32:
86*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
87*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
88*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sraw a1, a0, a1
89*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
90*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
91*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
92*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
93*cb15e657SMikhail Gudim;
94*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr32:
95*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
96*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
97*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sraw a1, a0, a1
98*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
99*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
100*cb15e657SMikhail Gudim;
101*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr32:
102*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
103*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
104*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sra a1, a0, a1
105*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
106*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
107*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a1, a0
108*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
109*cb15e657SMikhail Gudim;
110*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr32:
111*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
112*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
113*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sraw a1, a0, a1
114*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
115*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
116*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
117*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
118*cb15e657SMikhail Gudim  %binop = ashr i32 %x, %y
119*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
120*cb15e657SMikhail Gudim  ret i32 %select_
121*cb15e657SMikhail Gudim}
122*cb15e657SMikhail Gudim
123*cb15e657SMikhail Gudimdefine i32 @lshr32(i32 %x, i32 %y, i1 %c) {
124*cb15e657SMikhail Gudim; RV32I-LABEL: lshr32:
125*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
126*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a2, a2, 1
127*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a2, .LBB2_2
128*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
129*cb15e657SMikhail Gudim; RV32I-NEXT:    srl a0, a0, a1
130*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB2_2:
131*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
132*cb15e657SMikhail Gudim;
133*cb15e657SMikhail Gudim; RV64I-LABEL: lshr32:
134*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
135*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
136*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB2_2
137*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
138*cb15e657SMikhail Gudim; RV64I-NEXT:    srlw a0, a0, a1
139*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB2_2:
140*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
141*cb15e657SMikhail Gudim;
142*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr32:
143*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
144*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
145*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    srlw a1, a0, a1
146*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
147*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
148*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
149*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
150*cb15e657SMikhail Gudim;
151*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr32:
152*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
153*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
154*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    srlw a1, a0, a1
155*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
156*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
157*cb15e657SMikhail Gudim;
158*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr32:
159*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
160*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
161*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srl a1, a0, a1
162*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
163*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
164*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a1, a0
165*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
166*cb15e657SMikhail Gudim;
167*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr32:
168*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
169*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
170*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    srlw a1, a0, a1
171*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
172*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
173*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
174*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
175*cb15e657SMikhail Gudim  %binop = lshr i32 %x, %y
176*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
177*cb15e657SMikhail Gudim  ret i32 %select_
178*cb15e657SMikhail Gudim}
179*cb15e657SMikhail Gudim
180*cb15e657SMikhail Gudimdefine i32 @sub32(i32 %x, i32 %y, i1 %c) {
181*cb15e657SMikhail Gudim; RV32I-LABEL: sub32:
182*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
183*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
184*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
185*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
186*cb15e657SMikhail Gudim; RV32I-NEXT:    sub a0, a0, a1
187*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
188*cb15e657SMikhail Gudim;
189*cb15e657SMikhail Gudim; RV64I-LABEL: sub32:
190*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
191*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
192*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
193*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
194*cb15e657SMikhail Gudim; RV64I-NEXT:    subw a0, a0, a1
195*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
196*cb15e657SMikhail Gudim;
197*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub32:
198*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
199*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
200*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
201*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    subw a0, a0, a1
202*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
203*cb15e657SMikhail Gudim;
204*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub32:
205*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
206*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
207*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
208*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    subw a0, a0, a1
209*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
210*cb15e657SMikhail Gudim;
211*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub32:
212*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
213*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
214*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
215*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a0, a1
216*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
217*cb15e657SMikhail Gudim;
218*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub32:
219*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
220*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
221*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
222*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    subw a0, a0, a1
223*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
224*cb15e657SMikhail Gudim  %binop = sub i32 %x, %y
225*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
226*cb15e657SMikhail Gudim  ret i32 %select_
227*cb15e657SMikhail Gudim}
228*cb15e657SMikhail Gudim
229*cb15e657SMikhail Gudimdefine i32 @and32(i32 %x, i32 %y, i1 %c) {
230*cb15e657SMikhail Gudim; RV32I-LABEL: and32:
231*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
232*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a2, a2, 1
233*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a2, .LBB4_2
234*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
235*cb15e657SMikhail Gudim; RV32I-NEXT:    and a0, a0, a1
236*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB4_2:
237*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
238*cb15e657SMikhail Gudim;
239*cb15e657SMikhail Gudim; RV64I-LABEL: and32:
240*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
241*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
242*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB4_2
243*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
244*cb15e657SMikhail Gudim; RV64I-NEXT:    and a0, a0, a1
245*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB4_2:
246*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
247*cb15e657SMikhail Gudim;
248*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and32:
249*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
250*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
251*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    and a1, a0, a1
252*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
253*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
254*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
255*cb15e657SMikhail Gudim;
256*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and32:
257*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
258*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
259*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    and a1, a0, a1
260*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
261*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
262*cb15e657SMikhail Gudim;
263*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and32:
264*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
265*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
266*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a1, a0, a1
267*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
268*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a1, a0
269*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
270*cb15e657SMikhail Gudim;
271*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and32:
272*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
273*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
274*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    and a1, a0, a1
275*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
276*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
277*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
278*cb15e657SMikhail Gudim  %binop = and i32 %x, %y
279*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
280*cb15e657SMikhail Gudim  ret i32 %select_
281*cb15e657SMikhail Gudim}
282*cb15e657SMikhail Gudim
283*cb15e657SMikhail Gudim
284*cb15e657SMikhail Gudimdefine i32 @add32(i32 %x, i32 %y, i1 %c) {
285*cb15e657SMikhail Gudim; RV32I-LABEL: add32:
286*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
287*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
288*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
289*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
290*cb15e657SMikhail Gudim; RV32I-NEXT:    add a0, a0, a1
291*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
292*cb15e657SMikhail Gudim;
293*cb15e657SMikhail Gudim; RV64I-LABEL: add32:
294*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
295*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
296*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
297*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
298*cb15e657SMikhail Gudim; RV64I-NEXT:    addw a0, a0, a1
299*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
300*cb15e657SMikhail Gudim;
301*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add32:
302*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
303*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
304*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
305*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    addw a0, a0, a1
306*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
307*cb15e657SMikhail Gudim;
308*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add32:
309*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
310*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
311*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
312*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    addw a0, a0, a1
313*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
314*cb15e657SMikhail Gudim;
315*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add32:
316*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
317*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
318*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
319*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a0, a1
320*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
321*cb15e657SMikhail Gudim;
322*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add32:
323*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
324*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
325*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
326*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    addw a0, a0, a1
327*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
328*cb15e657SMikhail Gudim  %binop = add i32 %x, %y
329*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
330*cb15e657SMikhail Gudim  ret i32 %select_
331*cb15e657SMikhail Gudim}
332*cb15e657SMikhail Gudim
333*cb15e657SMikhail Gudim
334*cb15e657SMikhail Gudimdefine i32 @or32(i32 %x, i32 %y, i1 %c) {
335*cb15e657SMikhail Gudim; RV32I-LABEL: or32:
336*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
337*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
338*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
339*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
340*cb15e657SMikhail Gudim; RV32I-NEXT:    or a0, a0, a1
341*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
342*cb15e657SMikhail Gudim;
343*cb15e657SMikhail Gudim; RV64I-LABEL: or32:
344*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
345*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
346*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
347*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
348*cb15e657SMikhail Gudim; RV64I-NEXT:    or a0, a0, a1
349*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
350*cb15e657SMikhail Gudim;
351*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or32:
352*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
353*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
354*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
355*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
356*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
357*cb15e657SMikhail Gudim;
358*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or32:
359*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
360*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
361*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
362*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    or a0, a0, a1
363*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
364*cb15e657SMikhail Gudim;
365*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or32:
366*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
367*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
368*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
369*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a0, a1
370*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
371*cb15e657SMikhail Gudim;
372*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or32:
373*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
374*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
375*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
376*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a0, a1
377*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
378*cb15e657SMikhail Gudim  %binop = or i32 %x, %y
379*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
380*cb15e657SMikhail Gudim  ret i32 %select_
381*cb15e657SMikhail Gudim}
382*cb15e657SMikhail Gudim
383*cb15e657SMikhail Gudimdefine i32 @xor32(i32 %x, i32 %y, i1 %c) {
384*cb15e657SMikhail Gudim; RV32I-LABEL: xor32:
385*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
386*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
387*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
388*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
389*cb15e657SMikhail Gudim; RV32I-NEXT:    xor a0, a0, a1
390*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
391*cb15e657SMikhail Gudim;
392*cb15e657SMikhail Gudim; RV64I-LABEL: xor32:
393*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
394*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
395*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
396*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
397*cb15e657SMikhail Gudim; RV64I-NEXT:    xor a0, a0, a1
398*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
399*cb15e657SMikhail Gudim;
400*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor32:
401*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
402*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
403*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
404*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
405*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
406*cb15e657SMikhail Gudim;
407*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor32:
408*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
409*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
410*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
411*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
412*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
413*cb15e657SMikhail Gudim;
414*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor32:
415*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
416*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
417*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
418*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    xor a0, a0, a1
419*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
420*cb15e657SMikhail Gudim;
421*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor32:
422*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
423*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
424*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
425*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    xor a0, a0, a1
426*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
427*cb15e657SMikhail Gudim  %binop = xor i32 %x, %y
428*cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
429*cb15e657SMikhail Gudim  ret i32 %select_
430*cb15e657SMikhail Gudim}
431*cb15e657SMikhail Gudim
432*cb15e657SMikhail Gudimdefine i64 @shl64(i64 %x, i64 %y, i1 %c) {
433*cb15e657SMikhail Gudim; RV32I-LABEL: shl64:
434*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
435*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a4, a4, 1
436*cb15e657SMikhail Gudim; RV32I-NEXT:    addi a5, a2, -32
437*cb15e657SMikhail Gudim; RV32I-NEXT:    sll a3, a0, a2
438*cb15e657SMikhail Gudim; RV32I-NEXT:    bltz a5, .LBB8_3
439*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
440*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a2, a3
441*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a4, .LBB8_4
442*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB8_2:
443*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a0, a5, 31
444*cb15e657SMikhail Gudim; RV32I-NEXT:    and a0, a0, a3
445*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a1, a2
446*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
447*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB8_3:
448*cb15e657SMikhail Gudim; RV32I-NEXT:    sll a6, a1, a2
449*cb15e657SMikhail Gudim; RV32I-NEXT:    not a2, a2
450*cb15e657SMikhail Gudim; RV32I-NEXT:    srli a7, a0, 1
451*cb15e657SMikhail Gudim; RV32I-NEXT:    srl a2, a7, a2
452*cb15e657SMikhail Gudim; RV32I-NEXT:    or a2, a6, a2
453*cb15e657SMikhail Gudim; RV32I-NEXT:    bnez a4, .LBB8_2
454*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB8_4:
455*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
456*cb15e657SMikhail Gudim;
457*cb15e657SMikhail Gudim; RV64I-LABEL: shl64:
458*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
459*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
460*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB8_2
461*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
462*cb15e657SMikhail Gudim; RV64I-NEXT:    sll a0, a0, a1
463*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB8_2:
464*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
465*cb15e657SMikhail Gudim;
466*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl64:
467*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
468*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
469*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sll a1, a0, a1
470*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
471*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
472*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
473*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
474*cb15e657SMikhail Gudim;
475*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl64:
476*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
477*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
478*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sll a1, a0, a1
479*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
480*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
481*cb15e657SMikhail Gudim;
482*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl64:
483*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
484*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
485*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sll a3, a1, a2
486*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    not a5, a2
487*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srli a6, a0, 1
488*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srl a5, a6, a5
489*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a5
490*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    addi a5, a2, -32
491*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    slti a5, a5, 0
492*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a5
493*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sll a2, a0, a2
494*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a6, a2, a5
495*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a6
496*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a5
497*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
498*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
499*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a2, a0
500*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a3, a4
501*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
502*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a2, a1
503*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
504*cb15e657SMikhail Gudim;
505*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl64:
506*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
507*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
508*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sll a1, a0, a1
509*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
510*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
511*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
512*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
513*cb15e657SMikhail Gudim  %binop = shl i64 %x, %y
514*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
515*cb15e657SMikhail Gudim  ret i64 %select_
516*cb15e657SMikhail Gudim}
517*cb15e657SMikhail Gudim
518*cb15e657SMikhail Gudimdefine i64 @ashr64(i64 %x, i64 %y, i1 %c) {
519*cb15e657SMikhail Gudim; RV32I-LABEL: ashr64:
520*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
521*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a5, a4, 1
522*cb15e657SMikhail Gudim; RV32I-NEXT:    addi a3, a2, -32
523*cb15e657SMikhail Gudim; RV32I-NEXT:    sra a4, a1, a2
524*cb15e657SMikhail Gudim; RV32I-NEXT:    bltz a3, .LBB9_2
525*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
526*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a1, 31
527*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a3, a4
528*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a4, a2
529*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a5, .LBB9_3
530*cb15e657SMikhail Gudim; RV32I-NEXT:    j .LBB9_4
531*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB9_2:
532*cb15e657SMikhail Gudim; RV32I-NEXT:    srl a3, a0, a2
533*cb15e657SMikhail Gudim; RV32I-NEXT:    not a2, a2
534*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a6, a1, 1
535*cb15e657SMikhail Gudim; RV32I-NEXT:    sll a2, a6, a2
536*cb15e657SMikhail Gudim; RV32I-NEXT:    or a3, a3, a2
537*cb15e657SMikhail Gudim; RV32I-NEXT:    bnez a5, .LBB9_4
538*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB9_3:
539*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a3, a0
540*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a4, a1
541*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB9_4:
542*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a3
543*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a1, a4
544*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
545*cb15e657SMikhail Gudim;
546*cb15e657SMikhail Gudim; RV64I-LABEL: ashr64:
547*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
548*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
549*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB9_2
550*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
551*cb15e657SMikhail Gudim; RV64I-NEXT:    sra a0, a0, a1
552*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB9_2:
553*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
554*cb15e657SMikhail Gudim;
555*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr64:
556*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
557*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
558*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sra a1, a0, a1
559*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
560*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
561*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
562*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
563*cb15e657SMikhail Gudim;
564*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr64:
565*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
566*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
567*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sra a1, a0, a1
568*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
569*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
570*cb15e657SMikhail Gudim;
571*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr64:
572*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
573*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
574*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srl a3, a0, a2
575*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    not a5, a2
576*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    slli a6, a1, 1
577*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sll a5, a6, a5
578*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a5
579*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    addi a5, a2, -32
580*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    slti a5, a5, 0
581*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a5
582*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sra a2, a1, a2
583*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a6, a2, a5
584*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a6
585*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srai a6, a1, 31
586*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a6, a6, a5
587*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a5
588*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a2, a2, a6
589*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
590*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
591*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a2, a1
592*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a3, a4
593*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
594*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a2, a0
595*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
596*cb15e657SMikhail Gudim;
597*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr64:
598*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
599*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
600*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sra a1, a0, a1
601*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
602*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
603*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
604*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
605*cb15e657SMikhail Gudim  %binop = ashr i64 %x, %y
606*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
607*cb15e657SMikhail Gudim  ret i64 %select_
608*cb15e657SMikhail Gudim}
609*cb15e657SMikhail Gudim
610*cb15e657SMikhail Gudimdefine i64 @lshr64(i64 %x, i64 %y, i1 %c) {
611*cb15e657SMikhail Gudim; RV32I-LABEL: lshr64:
612*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
613*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a4, a4, 1
614*cb15e657SMikhail Gudim; RV32I-NEXT:    addi a5, a2, -32
615*cb15e657SMikhail Gudim; RV32I-NEXT:    srl a3, a1, a2
616*cb15e657SMikhail Gudim; RV32I-NEXT:    bltz a5, .LBB10_3
617*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
618*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a2, a3
619*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a4, .LBB10_4
620*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB10_2:
621*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a1, a5, 31
622*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a1, a3
623*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a2
624*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
625*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB10_3:
626*cb15e657SMikhail Gudim; RV32I-NEXT:    srl a6, a0, a2
627*cb15e657SMikhail Gudim; RV32I-NEXT:    not a2, a2
628*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a7, a1, 1
629*cb15e657SMikhail Gudim; RV32I-NEXT:    sll a2, a7, a2
630*cb15e657SMikhail Gudim; RV32I-NEXT:    or a2, a6, a2
631*cb15e657SMikhail Gudim; RV32I-NEXT:    bnez a4, .LBB10_2
632*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB10_4:
633*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
634*cb15e657SMikhail Gudim;
635*cb15e657SMikhail Gudim; RV64I-LABEL: lshr64:
636*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
637*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
638*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB10_2
639*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
640*cb15e657SMikhail Gudim; RV64I-NEXT:    srl a0, a0, a1
641*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB10_2:
642*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
643*cb15e657SMikhail Gudim;
644*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr64:
645*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
646*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
647*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    srl a1, a0, a1
648*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
649*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
650*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
651*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
652*cb15e657SMikhail Gudim;
653*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr64:
654*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
655*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
656*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    srl a1, a0, a1
657*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
658*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
659*cb15e657SMikhail Gudim;
660*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr64:
661*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
662*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
663*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srl a3, a0, a2
664*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    not a5, a2
665*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    slli a6, a1, 1
666*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sll a5, a6, a5
667*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a5
668*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    addi a5, a2, -32
669*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    slti a5, a5, 0
670*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a5
671*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    srl a2, a1, a2
672*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a6, a2, a5
673*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a3, a3, a6
674*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a5
675*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
676*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
677*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a2, a1
678*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a3, a4
679*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
680*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a2, a0
681*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
682*cb15e657SMikhail Gudim;
683*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr64:
684*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
685*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
686*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    srl a1, a0, a1
687*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
688*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
689*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
690*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
691*cb15e657SMikhail Gudim  %binop = lshr i64 %x, %y
692*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
693*cb15e657SMikhail Gudim  ret i64 %select_
694*cb15e657SMikhail Gudim}
695*cb15e657SMikhail Gudim
696*cb15e657SMikhail Gudimdefine i64 @sub64(i64 %x, i64 %y, i1 %c) {
697*cb15e657SMikhail Gudim; RV32I-LABEL: sub64:
698*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
699*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
700*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
701*cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
702*cb15e657SMikhail Gudim; RV32I-NEXT:    sltu a5, a0, a2
703*cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
704*cb15e657SMikhail Gudim; RV32I-NEXT:    sub a1, a1, a3
705*cb15e657SMikhail Gudim; RV32I-NEXT:    sub a1, a1, a5
706*cb15e657SMikhail Gudim; RV32I-NEXT:    sub a0, a0, a2
707*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
708*cb15e657SMikhail Gudim;
709*cb15e657SMikhail Gudim; RV64I-LABEL: sub64:
710*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
711*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
712*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
713*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
714*cb15e657SMikhail Gudim; RV64I-NEXT:    sub a0, a0, a1
715*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
716*cb15e657SMikhail Gudim;
717*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub64:
718*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
719*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
720*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
721*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sub a0, a0, a1
722*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
723*cb15e657SMikhail Gudim;
724*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub64:
725*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
726*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
727*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
728*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sub a0, a0, a1
729*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
730*cb15e657SMikhail Gudim;
731*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub64:
732*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
733*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
734*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
735*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sltu a5, a0, a2
736*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
737*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a1, a1, a3
738*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a1, a1, a5
739*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a0, a2
740*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
741*cb15e657SMikhail Gudim;
742*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub64:
743*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
744*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
745*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
746*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sub a0, a0, a1
747*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
748*cb15e657SMikhail Gudim  %binop = sub i64 %x, %y
749*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
750*cb15e657SMikhail Gudim  ret i64 %select_
751*cb15e657SMikhail Gudim}
752*cb15e657SMikhail Gudim
753*cb15e657SMikhail Gudimdefine i64 @and64(i64 %x, i64 %y, i1 %c) {
754*cb15e657SMikhail Gudim; RV32I-LABEL: and64:
755*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
756*cb15e657SMikhail Gudim; RV32I-NEXT:    andi a4, a4, 1
757*cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a4, .LBB12_2
758*cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
759*cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a1, a3
760*cb15e657SMikhail Gudim; RV32I-NEXT:    and a0, a0, a2
761*cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB12_2:
762*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
763*cb15e657SMikhail Gudim;
764*cb15e657SMikhail Gudim; RV64I-LABEL: and64:
765*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
766*cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
767*cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB12_2
768*cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
769*cb15e657SMikhail Gudim; RV64I-NEXT:    and a0, a0, a1
770*cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB12_2:
771*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
772*cb15e657SMikhail Gudim;
773*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and64:
774*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
775*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
776*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    and a1, a0, a1
777*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
778*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
779*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
780*cb15e657SMikhail Gudim;
781*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and64:
782*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
783*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
784*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    and a1, a0, a1
785*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
786*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
787*cb15e657SMikhail Gudim;
788*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and64:
789*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
790*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
791*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a3, a1, a3
792*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a2, a0, a2
793*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
794*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a2, a0
795*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
796*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a3, a1
797*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
798*cb15e657SMikhail Gudim;
799*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and64:
800*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
801*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
802*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    and a1, a0, a1
803*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
804*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
805*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
806*cb15e657SMikhail Gudim  %binop = and i64 %x, %y
807*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
808*cb15e657SMikhail Gudim  ret i64 %select_
809*cb15e657SMikhail Gudim}
810*cb15e657SMikhail Gudim
811*cb15e657SMikhail Gudim
812*cb15e657SMikhail Gudimdefine i64 @add64(i64 %x, i64 %y, i1 %c) {
813*cb15e657SMikhail Gudim; RV32I-LABEL: add64:
814*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
815*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
816*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
817*cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
818*cb15e657SMikhail Gudim; RV32I-NEXT:    add a1, a1, a3
819*cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
820*cb15e657SMikhail Gudim; RV32I-NEXT:    add a2, a0, a2
821*cb15e657SMikhail Gudim; RV32I-NEXT:    sltu a0, a2, a0
822*cb15e657SMikhail Gudim; RV32I-NEXT:    add a1, a1, a0
823*cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a2
824*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
825*cb15e657SMikhail Gudim;
826*cb15e657SMikhail Gudim; RV64I-LABEL: add64:
827*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
828*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
829*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
830*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
831*cb15e657SMikhail Gudim; RV64I-NEXT:    add a0, a0, a1
832*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
833*cb15e657SMikhail Gudim;
834*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add64:
835*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
836*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
837*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
838*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    add a0, a0, a1
839*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
840*cb15e657SMikhail Gudim;
841*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add64:
842*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
843*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
844*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
845*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    add a0, a0, a1
846*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
847*cb15e657SMikhail Gudim;
848*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add64:
849*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
850*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
851*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
852*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a1, a1, a3
853*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
854*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a2, a0, a2
855*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sltu a0, a2, a0
856*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a1, a1, a0
857*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    mv a0, a2
858*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
859*cb15e657SMikhail Gudim;
860*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add64:
861*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
862*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
863*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
864*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    add a0, a0, a1
865*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
866*cb15e657SMikhail Gudim  %binop = add i64 %x, %y
867*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
868*cb15e657SMikhail Gudim  ret i64 %select_
869*cb15e657SMikhail Gudim}
870*cb15e657SMikhail Gudim
871*cb15e657SMikhail Gudim
872*cb15e657SMikhail Gudimdefine i64 @or64(i64 %x, i64 %y, i1 %c) {
873*cb15e657SMikhail Gudim; RV32I-LABEL: or64:
874*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
875*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
876*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
877*cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
878*cb15e657SMikhail Gudim; RV32I-NEXT:    or a0, a0, a2
879*cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
880*cb15e657SMikhail Gudim; RV32I-NEXT:    or a1, a1, a3
881*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
882*cb15e657SMikhail Gudim;
883*cb15e657SMikhail Gudim; RV64I-LABEL: or64:
884*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
885*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
886*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
887*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
888*cb15e657SMikhail Gudim; RV64I-NEXT:    or a0, a0, a1
889*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
890*cb15e657SMikhail Gudim;
891*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or64:
892*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
893*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
894*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
895*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
896*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
897*cb15e657SMikhail Gudim;
898*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or64:
899*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
900*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
901*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
902*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    or a0, a0, a1
903*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
904*cb15e657SMikhail Gudim;
905*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or64:
906*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
907*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
908*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
909*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a0, a2
910*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a3, a4
911*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a1, a2
912*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
913*cb15e657SMikhail Gudim;
914*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or64:
915*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
916*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
917*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
918*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a0, a1
919*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
920*cb15e657SMikhail Gudim  %binop = or i64 %x, %y
921*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
922*cb15e657SMikhail Gudim  ret i64 %select_
923*cb15e657SMikhail Gudim}
924*cb15e657SMikhail Gudim
925*cb15e657SMikhail Gudimdefine i64 @xor64(i64 %x, i64 %y, i1 %c) {
926*cb15e657SMikhail Gudim; RV32I-LABEL: xor64:
927*cb15e657SMikhail Gudim; RV32I:       # %bb.0:
928*cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
929*cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
930*cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
931*cb15e657SMikhail Gudim; RV32I-NEXT:    xor a0, a0, a2
932*cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
933*cb15e657SMikhail Gudim; RV32I-NEXT:    xor a1, a1, a3
934*cb15e657SMikhail Gudim; RV32I-NEXT:    ret
935*cb15e657SMikhail Gudim;
936*cb15e657SMikhail Gudim; RV64I-LABEL: xor64:
937*cb15e657SMikhail Gudim; RV64I:       # %bb.0:
938*cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
939*cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
940*cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
941*cb15e657SMikhail Gudim; RV64I-NEXT:    xor a0, a0, a1
942*cb15e657SMikhail Gudim; RV64I-NEXT:    ret
943*cb15e657SMikhail Gudim;
944*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor64:
945*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
946*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
947*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
948*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
949*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
950*cb15e657SMikhail Gudim;
951*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor64:
952*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
953*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
954*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
955*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
956*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
957*cb15e657SMikhail Gudim;
958*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor64:
959*cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
960*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
961*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
962*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    xor a0, a0, a2
963*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a3, a4
964*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    xor a1, a1, a2
965*cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
966*cb15e657SMikhail Gudim;
967*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor64:
968*cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
969*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
970*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
971*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    xor a0, a0, a1
972*cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
973*cb15e657SMikhail Gudim  %binop = xor i64 %x, %y
974*cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
975*cb15e657SMikhail Gudim  ret i64 %select_
976*cb15e657SMikhail Gudim}
977