xref: /llvm-project/llvm/test/CodeGen/RISCV/condbinops.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1cb15e657SMikhail Gudim; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I
3cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I
4cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS
5cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV
6d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+zicond < %s | FileCheck %s -check-prefix=RV32ZICOND
7d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+zicond < %s | FileCheck %s -check-prefix=RV64ZICOND
8cb15e657SMikhail Gudim
9cb15e657SMikhail Gudimdefine i32 @shl32(i32 %x, i32 %y, i1 %c) {
10cb15e657SMikhail Gudim; RV32I-LABEL: shl32:
11cb15e657SMikhail Gudim; RV32I:       # %bb.0:
120fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
130fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
140fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
15cb15e657SMikhail Gudim; RV32I-NEXT:    sll a0, a0, a1
16cb15e657SMikhail Gudim; RV32I-NEXT:    ret
17cb15e657SMikhail Gudim;
18cb15e657SMikhail Gudim; RV64I-LABEL: shl32:
19cb15e657SMikhail Gudim; RV64I:       # %bb.0:
200fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
210fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
220fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
23cb15e657SMikhail Gudim; RV64I-NEXT:    sllw a0, a0, a1
24cb15e657SMikhail Gudim; RV64I-NEXT:    ret
25cb15e657SMikhail Gudim;
26cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl32:
27cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
28cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
29cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
300fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sllw a0, a0, a1
31cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
32cb15e657SMikhail Gudim;
33cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl32:
34cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
35cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
360fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
370fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sllw a0, a0, a1
38cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
39cb15e657SMikhail Gudim;
40cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl32:
41cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
42cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
43cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
440fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    sll a0, a0, a1
45cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
46cb15e657SMikhail Gudim;
47cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl32:
48cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
49cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
50cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
510fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    sllw a0, a0, a1
52cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
53cb15e657SMikhail Gudim  %binop = shl i32 %x, %y
54cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
55cb15e657SMikhail Gudim  ret i32 %select_
56cb15e657SMikhail Gudim}
57cb15e657SMikhail Gudim
58cb15e657SMikhail Gudimdefine i32 @ashr32(i32 %x, i32 %y, i1 %c) {
59cb15e657SMikhail Gudim; RV32I-LABEL: ashr32:
60cb15e657SMikhail Gudim; RV32I:       # %bb.0:
610fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
620fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
630fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
64cb15e657SMikhail Gudim; RV32I-NEXT:    sra a0, a0, a1
65cb15e657SMikhail Gudim; RV32I-NEXT:    ret
66cb15e657SMikhail Gudim;
67cb15e657SMikhail Gudim; RV64I-LABEL: ashr32:
68cb15e657SMikhail Gudim; RV64I:       # %bb.0:
690fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
700fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
710fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
72cb15e657SMikhail Gudim; RV64I-NEXT:    sraw a0, a0, a1
73cb15e657SMikhail Gudim; RV64I-NEXT:    ret
74cb15e657SMikhail Gudim;
75cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr32:
76cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
77cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
78cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
790fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sraw a0, a0, a1
80cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
81cb15e657SMikhail Gudim;
82cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr32:
83cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
84cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
850fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
860fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sraw a0, a0, a1
87cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
88cb15e657SMikhail Gudim;
89cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr32:
90cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
91cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
92cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
930fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    sra a0, a0, a1
94cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
95cb15e657SMikhail Gudim;
96cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr32:
97cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
98cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
99cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
1000fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    sraw a0, a0, a1
101cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
102cb15e657SMikhail Gudim  %binop = ashr i32 %x, %y
103cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
104cb15e657SMikhail Gudim  ret i32 %select_
105cb15e657SMikhail Gudim}
106cb15e657SMikhail Gudim
107cb15e657SMikhail Gudimdefine i32 @lshr32(i32 %x, i32 %y, i1 %c) {
108cb15e657SMikhail Gudim; RV32I-LABEL: lshr32:
109cb15e657SMikhail Gudim; RV32I:       # %bb.0:
1100fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
1110fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
1120fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
113cb15e657SMikhail Gudim; RV32I-NEXT:    srl a0, a0, a1
114cb15e657SMikhail Gudim; RV32I-NEXT:    ret
115cb15e657SMikhail Gudim;
116cb15e657SMikhail Gudim; RV64I-LABEL: lshr32:
117cb15e657SMikhail Gudim; RV64I:       # %bb.0:
1180fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
1190fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
1200fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
121cb15e657SMikhail Gudim; RV64I-NEXT:    srlw a0, a0, a1
122cb15e657SMikhail Gudim; RV64I-NEXT:    ret
123cb15e657SMikhail Gudim;
124cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr32:
125cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
126cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
127cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
1280fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    srlw a0, a0, a1
129cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
130cb15e657SMikhail Gudim;
131cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr32:
132cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
133cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
1340fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
1350fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    srlw a0, a0, a1
136cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
137cb15e657SMikhail Gudim;
138cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr32:
139cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
140cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
141cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
1420fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    srl a0, a0, a1
143cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
144cb15e657SMikhail Gudim;
145cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr32:
146cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
147cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
148cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
1490fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    srlw a0, a0, a1
150cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
151cb15e657SMikhail Gudim  %binop = lshr i32 %x, %y
152cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
153cb15e657SMikhail Gudim  ret i32 %select_
154cb15e657SMikhail Gudim}
155cb15e657SMikhail Gudim
156cb15e657SMikhail Gudimdefine i32 @sub32(i32 %x, i32 %y, i1 %c) {
157cb15e657SMikhail Gudim; RV32I-LABEL: sub32:
158cb15e657SMikhail Gudim; RV32I:       # %bb.0:
159cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
160cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
161cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
162cb15e657SMikhail Gudim; RV32I-NEXT:    sub a0, a0, a1
163cb15e657SMikhail Gudim; RV32I-NEXT:    ret
164cb15e657SMikhail Gudim;
165cb15e657SMikhail Gudim; RV64I-LABEL: sub32:
166cb15e657SMikhail Gudim; RV64I:       # %bb.0:
167cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
168cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
169cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
170cb15e657SMikhail Gudim; RV64I-NEXT:    subw a0, a0, a1
171cb15e657SMikhail Gudim; RV64I-NEXT:    ret
172cb15e657SMikhail Gudim;
173cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub32:
174cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
175cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
176cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
177cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    subw a0, a0, a1
178cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
179cb15e657SMikhail Gudim;
180cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub32:
181cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
182cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
183cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
184cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    subw a0, a0, a1
185cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
186cb15e657SMikhail Gudim;
187cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub32:
188cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
189cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
190cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
191cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a0, a1
192cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
193cb15e657SMikhail Gudim;
194cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub32:
195cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
196cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
197cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
198cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    subw a0, a0, a1
199cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
200cb15e657SMikhail Gudim  %binop = sub i32 %x, %y
201cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
202cb15e657SMikhail Gudim  ret i32 %select_
203cb15e657SMikhail Gudim}
204cb15e657SMikhail Gudim
205cb15e657SMikhail Gudimdefine i32 @and32(i32 %x, i32 %y, i1 %c) {
206cb15e657SMikhail Gudim; RV32I-LABEL: and32:
207cb15e657SMikhail Gudim; RV32I:       # %bb.0:
208cb15e657SMikhail Gudim; RV32I-NEXT:    andi a2, a2, 1
209cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a2, .LBB4_2
210cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
211cb15e657SMikhail Gudim; RV32I-NEXT:    and a0, a0, a1
212cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB4_2:
213cb15e657SMikhail Gudim; RV32I-NEXT:    ret
214cb15e657SMikhail Gudim;
215cb15e657SMikhail Gudim; RV64I-LABEL: and32:
216cb15e657SMikhail Gudim; RV64I:       # %bb.0:
217cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
218cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB4_2
219cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
220cb15e657SMikhail Gudim; RV64I-NEXT:    and a0, a0, a1
221cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB4_2:
222cb15e657SMikhail Gudim; RV64I-NEXT:    ret
223cb15e657SMikhail Gudim;
224cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and32:
225cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
226cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
227cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    and a1, a0, a1
228cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
229cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
230cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
231cb15e657SMikhail Gudim;
232cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and32:
233cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
234cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
235cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    and a1, a0, a1
236cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
237cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
238cb15e657SMikhail Gudim;
239cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and32:
240cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
241cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
242cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a1, a0, a1
243cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a2
244cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a1, a0
245cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
246cb15e657SMikhail Gudim;
247cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and32:
248cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
249cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
250cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    and a1, a0, a1
251cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
252cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
253cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
254cb15e657SMikhail Gudim  %binop = and i32 %x, %y
255cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
256cb15e657SMikhail Gudim  ret i32 %select_
257cb15e657SMikhail Gudim}
258cb15e657SMikhail Gudim
259cb15e657SMikhail Gudim
260cb15e657SMikhail Gudimdefine i32 @add32(i32 %x, i32 %y, i1 %c) {
261cb15e657SMikhail Gudim; RV32I-LABEL: add32:
262cb15e657SMikhail Gudim; RV32I:       # %bb.0:
263cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
264cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
265cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
266cb15e657SMikhail Gudim; RV32I-NEXT:    add a0, a0, a1
267cb15e657SMikhail Gudim; RV32I-NEXT:    ret
268cb15e657SMikhail Gudim;
269cb15e657SMikhail Gudim; RV64I-LABEL: add32:
270cb15e657SMikhail Gudim; RV64I:       # %bb.0:
271cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
272cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
273cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
274cb15e657SMikhail Gudim; RV64I-NEXT:    addw a0, a0, a1
275cb15e657SMikhail Gudim; RV64I-NEXT:    ret
276cb15e657SMikhail Gudim;
277cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add32:
278cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
279cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
280cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
281cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    addw a0, a0, a1
282cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
283cb15e657SMikhail Gudim;
284cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add32:
285cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
286cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
287cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
288cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    addw a0, a0, a1
289cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
290cb15e657SMikhail Gudim;
291cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add32:
292cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
293cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
294cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
295cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a0, a0, a1
296cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
297cb15e657SMikhail Gudim;
298cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add32:
299cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
300cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
301cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
302cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    addw a0, a0, a1
303cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
304cb15e657SMikhail Gudim  %binop = add i32 %x, %y
305cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
306cb15e657SMikhail Gudim  ret i32 %select_
307cb15e657SMikhail Gudim}
308cb15e657SMikhail Gudim
309cb15e657SMikhail Gudim
310cb15e657SMikhail Gudimdefine i32 @or32(i32 %x, i32 %y, i1 %c) {
311cb15e657SMikhail Gudim; RV32I-LABEL: or32:
312cb15e657SMikhail Gudim; RV32I:       # %bb.0:
313cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
314cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
315cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
316cb15e657SMikhail Gudim; RV32I-NEXT:    or a0, a0, a1
317cb15e657SMikhail Gudim; RV32I-NEXT:    ret
318cb15e657SMikhail Gudim;
319cb15e657SMikhail Gudim; RV64I-LABEL: or32:
320cb15e657SMikhail Gudim; RV64I:       # %bb.0:
321cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
322cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
323cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
324cb15e657SMikhail Gudim; RV64I-NEXT:    or a0, a0, a1
325cb15e657SMikhail Gudim; RV64I-NEXT:    ret
326cb15e657SMikhail Gudim;
327cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or32:
328cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
329cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
330cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
331cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
332cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
333cb15e657SMikhail Gudim;
334cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or32:
335cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
336cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
337cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
338cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    or a0, a0, a1
339cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
340cb15e657SMikhail Gudim;
341cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or32:
342cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
343cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
344cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
345cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a0, a1
346cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
347cb15e657SMikhail Gudim;
348cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or32:
349cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
350cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
351cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
352cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a0, a1
353cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
354cb15e657SMikhail Gudim  %binop = or i32 %x, %y
355cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
356cb15e657SMikhail Gudim  ret i32 %select_
357cb15e657SMikhail Gudim}
358cb15e657SMikhail Gudim
359cb15e657SMikhail Gudimdefine i32 @xor32(i32 %x, i32 %y, i1 %c) {
360cb15e657SMikhail Gudim; RV32I-LABEL: xor32:
361cb15e657SMikhail Gudim; RV32I:       # %bb.0:
362cb15e657SMikhail Gudim; RV32I-NEXT:    slli a2, a2, 31
363cb15e657SMikhail Gudim; RV32I-NEXT:    srai a2, a2, 31
364cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a2, a1
365cb15e657SMikhail Gudim; RV32I-NEXT:    xor a0, a0, a1
366cb15e657SMikhail Gudim; RV32I-NEXT:    ret
367cb15e657SMikhail Gudim;
368cb15e657SMikhail Gudim; RV64I-LABEL: xor32:
369cb15e657SMikhail Gudim; RV64I:       # %bb.0:
370cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
371cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
372cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
373cb15e657SMikhail Gudim; RV64I-NEXT:    xor a0, a0, a1
374cb15e657SMikhail Gudim; RV64I-NEXT:    ret
375cb15e657SMikhail Gudim;
376cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor32:
377cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
378cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
379cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
380cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
381cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
382cb15e657SMikhail Gudim;
383cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor32:
384cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
385cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
386cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
387cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
388cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
389cb15e657SMikhail Gudim;
390cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor32:
391cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
392cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a2, a2, 1
393cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a1, a1, a2
394cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    xor a0, a0, a1
395cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
396cb15e657SMikhail Gudim;
397cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor32:
398cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
399cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
400cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
401cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    xor a0, a0, a1
402cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
403cb15e657SMikhail Gudim  %binop = xor i32 %x, %y
404cb15e657SMikhail Gudim  %select_ = select i1 %c, i32 %binop, i32 %x
405cb15e657SMikhail Gudim  ret i32 %select_
406cb15e657SMikhail Gudim}
407cb15e657SMikhail Gudim
408cb15e657SMikhail Gudimdefine i64 @shl64(i64 %x, i64 %y, i1 %c) {
409cb15e657SMikhail Gudim; RV32I-LABEL: shl64:
410cb15e657SMikhail Gudim; RV32I:       # %bb.0:
4110fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
4120fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
4130fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a4, a4, a2
4140fb3ebb2SMikhail Gudim; RV32I-NEXT:    addi a3, a4, -32
4150fb3ebb2SMikhail Gudim; RV32I-NEXT:    sll a2, a0, a4
4160fb3ebb2SMikhail Gudim; RV32I-NEXT:    bltz a3, .LBB8_2
417cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
418cb15e657SMikhail Gudim; RV32I-NEXT:    mv a1, a2
4190fb3ebb2SMikhail Gudim; RV32I-NEXT:    j .LBB8_3
4200fb3ebb2SMikhail Gudim; RV32I-NEXT:  .LBB8_2:
4210fb3ebb2SMikhail Gudim; RV32I-NEXT:    sll a1, a1, a4
4220fb3ebb2SMikhail Gudim; RV32I-NEXT:    not a4, a4
4230fb3ebb2SMikhail Gudim; RV32I-NEXT:    srli a0, a0, 1
4240fb3ebb2SMikhail Gudim; RV32I-NEXT:    srl a0, a0, a4
4250fb3ebb2SMikhail Gudim; RV32I-NEXT:    or a1, a1, a0
426cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB8_3:
4270fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a0, a3, 31
4280fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a0, a0, a2
429cb15e657SMikhail Gudim; RV32I-NEXT:    ret
430cb15e657SMikhail Gudim;
431cb15e657SMikhail Gudim; RV64I-LABEL: shl64:
432cb15e657SMikhail Gudim; RV64I:       # %bb.0:
4330fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
4340fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
4350fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
436cb15e657SMikhail Gudim; RV64I-NEXT:    sll a0, a0, a1
437cb15e657SMikhail Gudim; RV64I-NEXT:    ret
438cb15e657SMikhail Gudim;
439cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl64:
440cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
441cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
442cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
4430fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sll a0, a0, a1
444cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
445cb15e657SMikhail Gudim;
446cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl64:
447cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
448cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
4490fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
4500fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sll a0, a0, a1
451cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
452cb15e657SMikhail Gudim;
453cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl64:
454cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
455cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
456*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    srli a3, a0, 1
457cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
458*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sll a0, a0, a2
4590fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    addi a4, a2, -32
4600fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    sll a1, a1, a2
4610fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    not a2, a2
462*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    slti a4, a4, 0
463*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    srl a2, a3, a2
464*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a0, a4
465*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a1, a2
466*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, a4
467*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a1, a3
468*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a0, a0, a4
469cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
470cb15e657SMikhail Gudim;
471cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl64:
472cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
473cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
474cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
4750fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    sll a0, a0, a1
476cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
477cb15e657SMikhail Gudim  %binop = shl i64 %x, %y
478cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
479cb15e657SMikhail Gudim  ret i64 %select_
480cb15e657SMikhail Gudim}
481cb15e657SMikhail Gudim
482cb15e657SMikhail Gudimdefine i64 @ashr64(i64 %x, i64 %y, i1 %c) {
483cb15e657SMikhail Gudim; RV32I-LABEL: ashr64:
484cb15e657SMikhail Gudim; RV32I:       # %bb.0:
485cb15e657SMikhail Gudim; RV32I-NEXT:    mv a3, a0
4860fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
4870fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
4880fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
4890fb3ebb2SMikhail Gudim; RV32I-NEXT:    addi a4, a2, -32
4900fb3ebb2SMikhail Gudim; RV32I-NEXT:    sra a0, a1, a2
4910fb3ebb2SMikhail Gudim; RV32I-NEXT:    bltz a4, .LBB9_2
4920fb3ebb2SMikhail Gudim; RV32I-NEXT:  # %bb.1:
4930fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a1, a1, 31
4940fb3ebb2SMikhail Gudim; RV32I-NEXT:    ret
4950fb3ebb2SMikhail Gudim; RV32I-NEXT:  .LBB9_2:
4960fb3ebb2SMikhail Gudim; RV32I-NEXT:    srl a3, a3, a2
4970fb3ebb2SMikhail Gudim; RV32I-NEXT:    not a2, a2
4980fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a1, a1, 1
4990fb3ebb2SMikhail Gudim; RV32I-NEXT:    sll a1, a1, a2
5000fb3ebb2SMikhail Gudim; RV32I-NEXT:    or a3, a3, a1
5010fb3ebb2SMikhail Gudim; RV32I-NEXT:    mv a1, a0
502cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a3
503cb15e657SMikhail Gudim; RV32I-NEXT:    ret
504cb15e657SMikhail Gudim;
505cb15e657SMikhail Gudim; RV64I-LABEL: ashr64:
506cb15e657SMikhail Gudim; RV64I:       # %bb.0:
5070fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
5080fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
5090fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
510cb15e657SMikhail Gudim; RV64I-NEXT:    sra a0, a0, a1
511cb15e657SMikhail Gudim; RV64I-NEXT:    ret
512cb15e657SMikhail Gudim;
513cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr64:
514cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
515cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
516cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
5170fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sra a0, a0, a1
518cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
519cb15e657SMikhail Gudim;
520cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr64:
521cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
522cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
5230fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
5240fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sra a0, a0, a1
525cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
526cb15e657SMikhail Gudim;
527cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr64:
528cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
529cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
530*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    slli a3, a1, 1
531*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    srai a5, a1, 31
532cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
533*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sra a1, a1, a2
5340fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    addi a4, a2, -32
5350fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    srl a0, a0, a2
5360fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    not a2, a2
537*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    slti a4, a4, 0
538*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sll a2, a3, a2
539*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a1, a4
5400fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a0, a2
541*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, a4
542*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a2, a5, a4
5430fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a0, a0, a4
544*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a3
545*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a1, a2
546cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
547cb15e657SMikhail Gudim;
548cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr64:
549cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
550cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
551cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
5520fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    sra a0, a0, a1
553cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
554cb15e657SMikhail Gudim  %binop = ashr i64 %x, %y
555cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
556cb15e657SMikhail Gudim  ret i64 %select_
557cb15e657SMikhail Gudim}
558cb15e657SMikhail Gudim
559cb15e657SMikhail Gudimdefine i64 @lshr64(i64 %x, i64 %y, i1 %c) {
560cb15e657SMikhail Gudim; RV32I-LABEL: lshr64:
561cb15e657SMikhail Gudim; RV32I:       # %bb.0:
5620fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
5630fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
5640fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a4, a4, a2
5650fb3ebb2SMikhail Gudim; RV32I-NEXT:    addi a3, a4, -32
5660fb3ebb2SMikhail Gudim; RV32I-NEXT:    srl a2, a1, a4
5670fb3ebb2SMikhail Gudim; RV32I-NEXT:    bltz a3, .LBB10_2
568cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
569cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a2
5700fb3ebb2SMikhail Gudim; RV32I-NEXT:    j .LBB10_3
5710fb3ebb2SMikhail Gudim; RV32I-NEXT:  .LBB10_2:
5720fb3ebb2SMikhail Gudim; RV32I-NEXT:    srl a0, a0, a4
5730fb3ebb2SMikhail Gudim; RV32I-NEXT:    not a4, a4
5740fb3ebb2SMikhail Gudim; RV32I-NEXT:    slli a1, a1, 1
5750fb3ebb2SMikhail Gudim; RV32I-NEXT:    sll a1, a1, a4
5760fb3ebb2SMikhail Gudim; RV32I-NEXT:    or a0, a0, a1
577cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB10_3:
5780fb3ebb2SMikhail Gudim; RV32I-NEXT:    srai a1, a3, 31
5790fb3ebb2SMikhail Gudim; RV32I-NEXT:    and a1, a1, a2
580cb15e657SMikhail Gudim; RV32I-NEXT:    ret
581cb15e657SMikhail Gudim;
582cb15e657SMikhail Gudim; RV64I-LABEL: lshr64:
583cb15e657SMikhail Gudim; RV64I:       # %bb.0:
5840fb3ebb2SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
5850fb3ebb2SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
5860fb3ebb2SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
587cb15e657SMikhail Gudim; RV64I-NEXT:    srl a0, a0, a1
588cb15e657SMikhail Gudim; RV64I-NEXT:    ret
589cb15e657SMikhail Gudim;
590cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr64:
591cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
592cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
593cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
5940fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    srl a0, a0, a1
595cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
596cb15e657SMikhail Gudim;
597cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr64:
598cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
599cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
6000fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
6010fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    srl a0, a0, a1
602cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
603cb15e657SMikhail Gudim;
604cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr64:
605cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
606cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
607*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    slli a3, a1, 1
608cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
609*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    srl a1, a1, a2
6100fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    addi a4, a2, -32
6110fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    srl a0, a0, a2
6120fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    not a2, a2
613*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    slti a4, a4, 0
614*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sll a2, a3, a2
615*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.nez a3, a1, a4
616*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a2
6170fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a0, a0, a4
618*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a0, a3
619*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a1, a1, a4
620cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
621cb15e657SMikhail Gudim;
622cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr64:
623cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
624cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
625cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
6260fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT:    srl a0, a0, a1
627cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
628cb15e657SMikhail Gudim  %binop = lshr i64 %x, %y
629cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
630cb15e657SMikhail Gudim  ret i64 %select_
631cb15e657SMikhail Gudim}
632cb15e657SMikhail Gudim
633cb15e657SMikhail Gudimdefine i64 @sub64(i64 %x, i64 %y, i1 %c) {
634cb15e657SMikhail Gudim; RV32I-LABEL: sub64:
635cb15e657SMikhail Gudim; RV32I:       # %bb.0:
636cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
637cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
638cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
639cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
640*9122c523SPengcheng Wang; RV32I-NEXT:    sltu a4, a0, a2
641cb15e657SMikhail Gudim; RV32I-NEXT:    sub a1, a1, a3
642*9122c523SPengcheng Wang; RV32I-NEXT:    sub a1, a1, a4
643cb15e657SMikhail Gudim; RV32I-NEXT:    sub a0, a0, a2
644cb15e657SMikhail Gudim; RV32I-NEXT:    ret
645cb15e657SMikhail Gudim;
646cb15e657SMikhail Gudim; RV64I-LABEL: sub64:
647cb15e657SMikhail Gudim; RV64I:       # %bb.0:
648cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
649cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
650cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
651cb15e657SMikhail Gudim; RV64I-NEXT:    sub a0, a0, a1
652cb15e657SMikhail Gudim; RV64I-NEXT:    ret
653cb15e657SMikhail Gudim;
654cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub64:
655cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
656cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
657cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
658cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    sub a0, a0, a1
659cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
660cb15e657SMikhail Gudim;
661cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub64:
662cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
663cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
664cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
665cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    sub a0, a0, a1
666cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
667cb15e657SMikhail Gudim;
668cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub64:
669cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
670cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
671cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
672cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
673*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sltu a4, a0, a2
674cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a1, a1, a3
675*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    sub a1, a1, a4
676cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sub a0, a0, a2
677cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
678cb15e657SMikhail Gudim;
679cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub64:
680cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
681cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
682cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
683cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    sub a0, a0, a1
684cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
685cb15e657SMikhail Gudim  %binop = sub i64 %x, %y
686cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
687cb15e657SMikhail Gudim  ret i64 %select_
688cb15e657SMikhail Gudim}
689cb15e657SMikhail Gudim
690cb15e657SMikhail Gudimdefine i64 @and64(i64 %x, i64 %y, i1 %c) {
691cb15e657SMikhail Gudim; RV32I-LABEL: and64:
692cb15e657SMikhail Gudim; RV32I:       # %bb.0:
693cb15e657SMikhail Gudim; RV32I-NEXT:    andi a4, a4, 1
694cb15e657SMikhail Gudim; RV32I-NEXT:    beqz a4, .LBB12_2
695cb15e657SMikhail Gudim; RV32I-NEXT:  # %bb.1:
696cb15e657SMikhail Gudim; RV32I-NEXT:    and a1, a1, a3
697cb15e657SMikhail Gudim; RV32I-NEXT:    and a0, a0, a2
698cb15e657SMikhail Gudim; RV32I-NEXT:  .LBB12_2:
699cb15e657SMikhail Gudim; RV32I-NEXT:    ret
700cb15e657SMikhail Gudim;
701cb15e657SMikhail Gudim; RV64I-LABEL: and64:
702cb15e657SMikhail Gudim; RV64I:       # %bb.0:
703cb15e657SMikhail Gudim; RV64I-NEXT:    andi a2, a2, 1
704cb15e657SMikhail Gudim; RV64I-NEXT:    beqz a2, .LBB12_2
705cb15e657SMikhail Gudim; RV64I-NEXT:  # %bb.1:
706cb15e657SMikhail Gudim; RV64I-NEXT:    and a0, a0, a1
707cb15e657SMikhail Gudim; RV64I-NEXT:  .LBB12_2:
708cb15e657SMikhail Gudim; RV64I-NEXT:    ret
709cb15e657SMikhail Gudim;
710cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and64:
711cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
712cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
713cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    and a1, a0, a1
714cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskcn a0, a0, a2
715cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a1, a0
716cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
717cb15e657SMikhail Gudim;
718cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and64:
719cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
720cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
721cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    and a1, a0, a1
722cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mvnez a0, a1, a2
723cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
724cb15e657SMikhail Gudim;
725cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and64:
726cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
727cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
728cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a3, a1, a3
729cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    and a2, a0, a2
730cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a0, a0, a4
731cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.nez a1, a1, a4
732*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a0, a2, a0
733cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a1, a3, a1
734cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
735cb15e657SMikhail Gudim;
736cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and64:
737cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
738cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
739cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    and a1, a0, a1
740cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.nez a0, a0, a2
741cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a1, a0
742cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
743cb15e657SMikhail Gudim  %binop = and i64 %x, %y
744cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
745cb15e657SMikhail Gudim  ret i64 %select_
746cb15e657SMikhail Gudim}
747cb15e657SMikhail Gudim
748cb15e657SMikhail Gudim
749cb15e657SMikhail Gudimdefine i64 @add64(i64 %x, i64 %y, i1 %c) {
750cb15e657SMikhail Gudim; RV32I-LABEL: add64:
751cb15e657SMikhail Gudim; RV32I:       # %bb.0:
752cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
753cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
754cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
755cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
756*9122c523SPengcheng Wang; RV32I-NEXT:    add a1, a1, a3
757cb15e657SMikhail Gudim; RV32I-NEXT:    add a2, a0, a2
758cb15e657SMikhail Gudim; RV32I-NEXT:    sltu a0, a2, a0
759cb15e657SMikhail Gudim; RV32I-NEXT:    add a1, a1, a0
760cb15e657SMikhail Gudim; RV32I-NEXT:    mv a0, a2
761cb15e657SMikhail Gudim; RV32I-NEXT:    ret
762cb15e657SMikhail Gudim;
763cb15e657SMikhail Gudim; RV64I-LABEL: add64:
764cb15e657SMikhail Gudim; RV64I:       # %bb.0:
765cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
766cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
767cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
768cb15e657SMikhail Gudim; RV64I-NEXT:    add a0, a0, a1
769cb15e657SMikhail Gudim; RV64I-NEXT:    ret
770cb15e657SMikhail Gudim;
771cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add64:
772cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
773cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
774cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
775cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    add a0, a0, a1
776cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
777cb15e657SMikhail Gudim;
778cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add64:
779cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
780cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
781cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
782cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    add a0, a0, a1
783cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
784cb15e657SMikhail Gudim;
785cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add64:
786cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
787cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
788cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
789cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
790*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    add a1, a1, a3
791cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a2, a0, a2
792cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    sltu a0, a2, a0
793cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    add a1, a1, a0
794cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    mv a0, a2
795cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
796cb15e657SMikhail Gudim;
797cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add64:
798cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
799cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
800cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
801cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    add a0, a0, a1
802cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
803cb15e657SMikhail Gudim  %binop = add i64 %x, %y
804cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
805cb15e657SMikhail Gudim  ret i64 %select_
806cb15e657SMikhail Gudim}
807cb15e657SMikhail Gudim
808cb15e657SMikhail Gudim
809cb15e657SMikhail Gudimdefine i64 @or64(i64 %x, i64 %y, i1 %c) {
810cb15e657SMikhail Gudim; RV32I-LABEL: or64:
811cb15e657SMikhail Gudim; RV32I:       # %bb.0:
812cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
813cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
814cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
815cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
816*9122c523SPengcheng Wang; RV32I-NEXT:    or a0, a0, a2
817cb15e657SMikhail Gudim; RV32I-NEXT:    or a1, a1, a3
818cb15e657SMikhail Gudim; RV32I-NEXT:    ret
819cb15e657SMikhail Gudim;
820cb15e657SMikhail Gudim; RV64I-LABEL: or64:
821cb15e657SMikhail Gudim; RV64I:       # %bb.0:
822cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
823cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
824cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
825cb15e657SMikhail Gudim; RV64I-NEXT:    or a0, a0, a1
826cb15e657SMikhail Gudim; RV64I-NEXT:    ret
827cb15e657SMikhail Gudim;
828cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or64:
829cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
830cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
831cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
832cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    or a0, a0, a1
833cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
834cb15e657SMikhail Gudim;
835cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or64:
836cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
837cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
838cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
839cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    or a0, a0, a1
840cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
841cb15e657SMikhail Gudim;
842cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or64:
843cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
844cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
845cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
846*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
847cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    or a0, a0, a2
848*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    or a1, a1, a3
849cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
850cb15e657SMikhail Gudim;
851cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or64:
852cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
853cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
854cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
855cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    or a0, a0, a1
856cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
857cb15e657SMikhail Gudim  %binop = or i64 %x, %y
858cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
859cb15e657SMikhail Gudim  ret i64 %select_
860cb15e657SMikhail Gudim}
861cb15e657SMikhail Gudim
862cb15e657SMikhail Gudimdefine i64 @xor64(i64 %x, i64 %y, i1 %c) {
863cb15e657SMikhail Gudim; RV32I-LABEL: xor64:
864cb15e657SMikhail Gudim; RV32I:       # %bb.0:
865cb15e657SMikhail Gudim; RV32I-NEXT:    slli a4, a4, 31
866cb15e657SMikhail Gudim; RV32I-NEXT:    srai a4, a4, 31
867cb15e657SMikhail Gudim; RV32I-NEXT:    and a2, a4, a2
868cb15e657SMikhail Gudim; RV32I-NEXT:    and a3, a4, a3
869*9122c523SPengcheng Wang; RV32I-NEXT:    xor a0, a0, a2
870cb15e657SMikhail Gudim; RV32I-NEXT:    xor a1, a1, a3
871cb15e657SMikhail Gudim; RV32I-NEXT:    ret
872cb15e657SMikhail Gudim;
873cb15e657SMikhail Gudim; RV64I-LABEL: xor64:
874cb15e657SMikhail Gudim; RV64I:       # %bb.0:
875cb15e657SMikhail Gudim; RV64I-NEXT:    slli a2, a2, 63
876cb15e657SMikhail Gudim; RV64I-NEXT:    srai a2, a2, 63
877cb15e657SMikhail Gudim; RV64I-NEXT:    and a1, a2, a1
878cb15e657SMikhail Gudim; RV64I-NEXT:    xor a0, a0, a1
879cb15e657SMikhail Gudim; RV64I-NEXT:    ret
880cb15e657SMikhail Gudim;
881cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor64:
882cb15e657SMikhail Gudim; RV64XVENTANACONDOPS:       # %bb.0:
883cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    andi a2, a2, 1
884cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    vt.maskc a1, a1, a2
885cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    xor a0, a0, a1
886cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT:    ret
887cb15e657SMikhail Gudim;
888cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor64:
889cb15e657SMikhail Gudim; RV64XTHEADCONDMOV:       # %bb.0:
890cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    andi a2, a2, 1
891cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    th.mveqz a1, zero, a2
892cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    xor a0, a0, a1
893cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT:    ret
894cb15e657SMikhail Gudim;
895cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor64:
896cb15e657SMikhail Gudim; RV32ZICOND:       # %bb.0:
897cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    andi a4, a4, 1
898cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    czero.eqz a2, a2, a4
899*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    czero.eqz a3, a3, a4
900cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    xor a0, a0, a2
901*9122c523SPengcheng Wang; RV32ZICOND-NEXT:    xor a1, a1, a3
902cb15e657SMikhail Gudim; RV32ZICOND-NEXT:    ret
903cb15e657SMikhail Gudim;
904cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor64:
905cb15e657SMikhail Gudim; RV64ZICOND:       # %bb.0:
906cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    andi a2, a2, 1
907cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    czero.eqz a1, a1, a2
908cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    xor a0, a0, a1
909cb15e657SMikhail Gudim; RV64ZICOND-NEXT:    ret
910cb15e657SMikhail Gudim  %binop = xor i64 %x, %y
911cb15e657SMikhail Gudim  %select_ = select i1 %c, i64 %binop, i64 %x
912cb15e657SMikhail Gudim  ret i64 %select_
913cb15e657SMikhail Gudim}
914